flutter - 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()
}
}
解决方案
不,这是不可能的。仅在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()
}
}
我希望这有帮助。
推荐阅读
- python-3.x - IndexError:背包问题的列表索引超出范围
- python - 检查数据类中的“无”或无效数据
- python - 将 4 行连接成 python 中文本文件的单行
- ansible - 错误:无法匹配提供的主机模式,忽略:切换(跳过没有匹配的主机)
- python - 从 numpy.linalg.lstsq 输出计算 p 值
- visual-studio-debugging - 如何确保每次从命令提示符加载 Visual Studio 以使用 -debugexe 命令进行调试时,它都会加载所有源代码?
- vue.js - vue-cli3中如何输出devServer的配置?
- python - 通过scrapy JsonRequest发送文件
- javascript - 转换 Observable