我正在使用Provider
在小部件层次结构中传递值。在一种情况下,必须在绘制小部件之前,绘制小部件时或什至在绘制小部件之后,立即从后代小部件中更新值,这类似于React的componentDidMount
生命周期挂钩。
这可能吗?似乎您需要BuildContext
对象,该对象似乎仅在小部件的build
方法内部可用。
为了展示这个问题,我有以下代码示例(请注意:它会引发异常):
Widget build(BuildContext context) {
var attrs = Provider.of<SelectedPageAttributes>(context);
attrs.updateSelectedPageAttributes(title, color);
return CupertinoPageScaffold(
resizeToAvoidBottomInset: true,
navigationBar: CupertinoNavigationBar(
backgroundColor: Colors.black,
middle: attrs.title != null
? Text(attrs.title, style: categoryPageTitle)
: null),
child: Container(
child: SafeArea(child: child),
)));
}
本质上,我试图在返回小部件之前对其进行更新。这理所当然地抱怨在构建过程中正在调用setState()
,但是我不知道该在哪里调用它。我可以使用任何生命周期挂钩吗?
请注意,我知道可以使用Provider<T>
向下游发送数据,但这似乎很不方便,因为每当有新的页面路由时都必须重新应用它,而在使用ChangeNotifierProvider
时可以避免这种情况它包装了应用程序。
答案 0 :(得分:0)
Flutter中没有componentDidMount
。
您最好的选择是使用initState
并安排在框架结束后执行的回调:
initState() {
super.initState();
Future.microtask(() {
Provider.of<Foo>(context).doSomething();
});
}