Flutter:连接小部件包装提供程序错误

时间:2020-10-06 13:29:01

标签: flutter dart

我已经在我的自定义offlineWidget中添加了ConnectivityWrapperWidget。运行应用程序时出现此错误

错误:在此ConnectivityWidgetWrapper窗口小部件上方找不到正确的提供程序

这可能是因为您使用的BuildContext不包含提供商 你的选择。有几种常见情况:

  • 您尝试读取的提供程序处于不同的路径。

    提供者是“范围”的。因此,如果您将提供商插入路由内,则 其他路由将无法访问该提供商。

  • 您使用的BuildContext是您尝试读取的提供程序的祖先。

    确保ConnectivityWidgetWrapper在您的MultiProvider / Provider下。 当您创建提供程序并尝试立即读取它时,通常会发生这种情况。

    例如,代替:

    Widget build(BuildContext context) {
      return Provider<Example>(
        create: (_) => Example(),
        // Will throw a ProviderNotFoundError, because `context` is associated
        // to the widget that is the parent of `Provider<Example>`
        child: Text(context.watch<Example>()),
      ),
    }
    

    考虑像这样使用builder

    Widget build(BuildContext context) {
      return Provider<Example>(
        create: (_) => Example(),
        // we use `builder` to obtain a new `BuildContext` that has access to the provider
        builder: (context) {
          // No longer throws
          return Text(context.watch<Example>()),
        }
      ),
    }
    
    

我不明白。有人可以解释一下,这是什么问题

2 个答案:

答案 0 :(得分:0)

根据错误提示,尝试使用生成器而不是子代。如果没有帮助,请显示一些代码。

答案 1 :(得分:0)

添加addConnectivityWrapper时,如果使用自定义的offlineWidget(),则必须将ConnectivityAppWrapper添加为MaterialApp的父级。