我有以下小部件,它需要使用从DataClass
类中提取的一些数据进行初始化:
class FooWidgetState extends State<FooWidget> {
List<String> _someUsefulData;
@override
void initState() {
super.initState();
_someUsefulData = DataClass.getUsefulData(context);
}
@override
Widget build(BuildContext context) {
return Column(
children: _someUsefulData.map(_buildUsefulWidgets).toList(),
);
}
}
DataClass
看起来是这样的:
class DataClass {
static List<String> getUsefulData(BuildContext context) {
return [
BazLocalizations.of(context).usefulString1,
BazLocalizations.of(context).usefulString2,
];
}
}
BazLocalizations
是一个检索本地化字符串的类。
问题是,在运行上述代码时,将引发以下异常:
inheritFromWidgetOfExactType(_LocalizationsScope)或inheritFromElement()是在FooWidgetState.initState()完成之前调用的。
我尝试过的:
按照建议给在这里,我将调用包装为initState
,如下所示:
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) {
_someUsefulData = DataClass.getUsefulData(context);
});
}
但是,当我尝试访问build
小部件中的build
时,总是null
。
发布于 2019-09-03 04:17:35
由于您使用上下文来获取该数据,所以必须在didChangeDependencies
方法中获取数据,该方法在第一个构建之前进行调用。
如果您使用的是提供程序,您可以签出以下链接:https://github.com/rrousselGit/provider#i-have-an-exception-when-obtaining-providers-inside-initstate-what-can-i-do
如果不是,同样的概念也适用于InheritedWidgets
https://stackoverflow.com/questions/57771485
复制