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

标签 flutter dart

如何在initState方法中设置提供程序?尝试执行listen: false,但出现错误:

final MyProvider myProvider = Provider.of<MyProvider>(context, listen: false);
if (myProvider.someVar == null) {
    myProvider.setSomeVar('yo');
}
我收到以下错误:

setState() or markNeedsBuild() called during build


这是提供者方法
void setSomeVar(String text) {
    someVar = text;
    notifyListeners();
  }

最佳答案

在您的提供程序中,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();
}

关于flutter - 在InitState中设置提供程序状态会出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63783264/

相关文章:

image - 如何使用 flutter 检测图像是否全黑?

dart - Flutter 菜单和导航

android - flutter 本地通知 : what's the channel id?

flutter - 有没有办法撤消 'flutter clean'

flutter - 下拉按钮不会改变

dart - Flutter-如何控制ListView构建器的速度?

flutter - 如何将上下文传递给提供者的第二个小部件树

dart - 使用带 Dartium 的 `pub serve` 时如何查看 HTML 模板和 CSS 错误?

android - 在 Android 中导入包,但不在 IOS 中为 Flutter 应用导入包

ios - 在 Flutter 中监听方向状态;旋转前后