我正在使用带有提供者(状态管理)的flutter开发android / ios应用
在我的应用程序中,我有一个带有底部导航菜单的主支架。 (因此,一个具有许多视图的脚手架,并使用底部导航(而不是Navigator.push())对其进行控制
我想知道是否有可能从build()调用initstate()。
例如
... Statefulwidget
void initState() {
super.initState();
MYHttp.callAPI_only_once_for_some_reason();
}
Widget build(...) {
var flag = Provider.of<MyProvider>(context).flagdata; // flag is true when push notification has been arrived
if (flag) {
initstate() // apparently it should not work, but i have to recreate whole stateful widget to call initState()
}
}
答案 0 :(得分:1)
否,这是不可能的。 initstate()
仅在每次绘制新的窗口小部件时调用。
而不是调用initstate
。创建一个方法,将其添加为使用初始化状态,然后在您要调用它的任何地方调用。
查看以下代码以获取示例。效果很好:
// create the method.
void makeRequest() {
MYHttp.callAPI_only_once_for_some_reason();
}
void initState() {
//call the created method here
makeRequest();
super.initState();
}
Widget build(...) {
var flag = Provider.of<MyProvider>(context).flagdata; // flag is true when push notification has been arrived
if (flag) {
// call the method here again. if you need to use it.
makeRequest(); // apparently it should not work, but i have to recreate whole stateful widget to call initState()
}
}
我希望这会有所帮助。