Flutter如何在build()中重新创建有状态的小部件

时间:2020-05-05 06:01:44

标签: flutter

我正在使用带有提供者(状态管理)的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()
  }
}

1 个答案:

答案 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()
  }
}

我希望这会有所帮助。