在InitState中设置提供程序状态会出错

时间:2020-09-07 19:30:01

标签: flutter dart

如何在initState方法中设置提供者?尝试做listen: false,但出现错误:

final MyProvider myProvider = Provider.of<MyProvider>(context, listen: false);
if (myProvider.someVar == null) {
    myProvider.setSomeVar('yo');
}

我收到以下错误:

在构建过程中调用

setState()或markNeedsBuild()

这是providers方法

void setSomeVar(String text) {
    someVar = text;
    notifyListeners();
  }

1 个答案:

答案 0 :(得分:1)

在您的提供程序中,setSomeVar()正在调用notifyListeners()。在initState和build()中这是一个禁忌。构建完成后,尝试使用addPostFrameCallback来setSomeVar()。

此外,在使用addPostFrameCallback时,对于使用上下文的内容,应检查context == null,以防万一。

initState() {
  WidgetsBinding.instance.addPostFrameCallback((_) {
    if (context == null) return;
    log('Navigating to SplashPage');
    Navigator.pushReplacementNamed(context, splashRoute);
  });
  
  super.initState();
}