首页 > 解决方案 > Flutter 如何在 build() 中重新创建有状态的小部件

问题描述

我正在使用 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()
  }
}

标签: flutter

解决方案


不,这是不可能的。仅在initstate()每次绘制新小部件时调用。而不是召回initstate. 创建一个方法,将其添加到使用 init 状态,然后在任何你想调用它的地方调用它。

检查下面的代码以获取示例。它完美地工作:

// 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()
  }
}

我希望这有帮助。


推荐阅读