【发布时间】:2021-07-14 13:37:47
【问题描述】:
所以在学习 Flutter 的过程中,initState() 似乎不是使用 Providers 的地方,因为它还没有访问必须通过的context。我的导师解决这个问题的方法是使用didChangeDependencies() 生命周期钩子和一个标志,这样里面的任何代码都不会运行超过一次:
bool _isInit = true;
@override
void didChangeDependencies() {
if (_isInit) {
// Some provider code that gets/sets some state
}
_isInit = false;
super.didChangeDependencies();
}
这对我来说是一次糟糕的开发体验。没有其他方法可以在可以访问context 的 Flutter Widget 中运行初始化代码吗?或者有没有计划推出更实用的东西?
我见过的唯一其他方法是使用Future.delayed,感觉有点“hacky”:
@override
void initState() {
Future.delayed(Duration.zero).then(() {
// Some provider code that gets/sets some state
});
super.initState();
}
【问题讨论】:
标签: flutter dart lifecycle flutter-provider flutter-widget