如何在 initstate() 中读取和使用共享偏好值?我可以在其他小部件中读取和使用值,但不能在我在 initstate 中调用的 API 中读取和使用值
Posted
技术标签:
【中文标题】如何在 initstate() 中读取和使用共享偏好值?我可以在其他小部件中读取和使用值,但不能在我在 initstate 中调用的 API 中读取和使用值【英文标题】:How to read and use shared preference values in initstate()? I can read and use values in other widgets but not in my API which i call in initstate 【发布时间】:2019-08-29 13:20:51 【问题描述】:我正在 initstate 中通过 RestAPI 创建一个企业列表。我需要使用 sharedpreference 值作为其参数之一,但是当我尝试加载数据时,sharepreference 值为 null 初始值,但该值可以轻松用于其他小部件。
问题是如何在initstate中同时读取sharepreference值和使用?
我尝试了许多选项,例如将我的 api 从 initstate 中取出并使用 async 函数定义并在 initstate 中调用它。
**@override
void initState()
super.initState();
loadData();
getBizList();
getBizList() async
await api
.bizListAPI(widget.subCatid, savedCityID, supSubFinal, areaFinal)
.then((response)
setState(()
bizListOBJ = response;
);
);
loadData() async
SharedPreferences savedPref = await SharedPreferences.getInstance();
setState(()
savedCity = (savedPref.getString('savedCity') ?? "Mumbai");
savedCityID = (savedPref.getString('savedCityID') ?? "1");
);
**
在上面的代码中,我能够从 appbar 中的 sharedpreference(savedCity) 获取或读取数据并显示城市名称,但我想使用 savedcityID 数据在 initstate 中传递我的 api。
我也尝试使用以下插件
[https://medium.com/@greg.perry/a-flutter-class-for-app-preferences-a256166ecc63.][1]
有了这个我可以做我想做的事,但每次我关闭我的应用程序并再次打开...... 我收到以下错误
"_prefsInstance != null,
"Maybe call Prefs.getKeysF() instead. SharedPreferences not ready yet!");"
之后,当我返回并再次打开页面时,应用程序和商务列表完美运行,直到我再次关闭我的应用程序。
[1]: https://medium.com/@greg.perry/a-flutter-class-for-app-preferences-a256166ecc63
抱歉我的任何菜鸟解释或问题。实际上这是我在堆栈中的第一个问题,我是颤振的初学者。
【问题讨论】:
【参考方案1】:你可以试试这个吗?
void initState()
super.initState();
loadData().then((_)
getBizList();
);
【讨论】:
我试过这个,它成功了......谢谢,但我发现另一种解决方案更方便,方法是将我的所有 api 放在异步函数中,然后让我的 api 等待响应,最后将函数放入initstate()中,【参考方案2】:你需要在 init state 中使用 set state 因为
loadData();
getBizList();
是异步功能,所以你需要刷新页面才能获得价值。
试试这个
@override
void initState()
// TODO: implement initState
super.initState();
setState(()
loadData();
getBizList();
);
【讨论】:
对不起,这不是你的做法。 setstate 是必须的,但在这里对我没有帮助。以上是关于如何在 initstate() 中读取和使用共享偏好值?我可以在其他小部件中读取和使用值,但不能在我在 initstate 中调用的 API 中读取和使用值的主要内容,如果未能解决你的问题,请参考以下文章
如何在使用 pop 时重新加载或调用一些函数 initState()
在 initState 中获取 InheritedWidget 参数