用数据初始化Flutter小部件状态

时间:2019-09-03 12:09:37

标签: flutter dart

我有以下窗口小部件,该窗口小部件需要使用从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是用于检索本地化字符串的类。

问题在于,在运行上述代码时,会引发以下异常:

  在FooWidgetState.initState()完成之前,调用了

inheritFromWidgetOfExactType(_LocalizationsScope)或InheritedFromElement()。

我尝试过的事情:

遵循建议given here,我将通话包裹在initState中,如下所示:

void initState() {
  super.initState();
  WidgetsBinding.instance.addPostFrameCallback((_) {
    _someUsefulData = DataClass.getUsefulData(context);
  });
}

但是,当我尝试在_someUsefulData小部件中访问build时,它始终是null

1 个答案:

答案 0 :(得分:1)

由于您正在使用上下文获取该数据,因此必须在didChangeDependencies方法中获取数据,该方法会在首次构建之前被调用。

如果您使用的是提供商,则可以查看以下链接:https://github.com/rrousselGit/provider#i-have-an-exception-when-obtaining-providers-inside-initstate-what-can-i-do

如果不是,则相同的概念适用于InheritedWidgets

相关问题