Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter flatter:`Provider.of(context)`在它是`FutureProvider()时找不到`_Flutter_Dart_Flutter Provider - Fatal编程技术网

Flutter flatter:`Provider.of(context)`在它是`FutureProvider()时找不到`

Flutter flatter:`Provider.of(context)`在它是`FutureProvider()时找不到`,flutter,dart,flutter-provider,Flutter,Dart,Flutter Provider,我的小部件树中有一个提供者,我调用provider.of(context)来查找它。如果它是任何类型的提供程序,它都可以正常工作,但是,只要将提供程序从provider()(例如)更改为FutureProvider(),它就无法工作 我没有更改树中的任何小部件,也没有更改它们在导航器中的位置Provider.of()工作正常,但一旦我将其设置为FutureProvider()它就不工作了 编辑:我的代码如下所示: 内部小部件构建: returnfutureprovider( 初始数据:[], 创

我的小部件树中有一个提供者,我调用
provider.of(context)
来查找它。如果它是任何类型的提供程序,它都可以正常工作,但是,只要将提供程序从
provider()
(例如)更改为
FutureProvider()
,它就无法工作

我没有更改树中的任何小部件,也没有更改它们在导航器中的位置
Provider.of()
工作正常,但一旦我将其设置为
FutureProvider()
它就不工作了

编辑:我的代码如下所示:

内部小部件构建:

returnfutureprovider(
初始数据:[],
创建:())=>
数据库服务(uid:_auth.getUser()!.uid).getJournalEntries(),
catchError:(上下文,错误){
打印(error.toString());
},
...
}
然后其中一个子部件是另一个小部件,这是它的构建功能:

列出条目=
(上下文)的提供者;
返回升降按钮(
已按下:(){
打印(条目);
},
子项:文本(“打印提供程序数据”);
}
我得到以下错误:

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

这是因为您使用了不包含提供程序的
BuildContext
由您选择。有几种常见情况:

  • 您在
    main.dart
    中添加了一个新的提供程序,并执行了热重新加载。 要修复此问题,请执行热重启

  • 您试图读取的提供程序位于不同的路径中

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

  • 您使用了一个
    BuildContext
    ,它是您试图读取的提供程序的祖先

    确保TestButton位于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>()),
      ),
    }
    
问题是小部件树中有一个提供程序:


FutureProvider()
替换为任何其他类型的提供程序都可以使其工作,但我需要一个
FutureProvider()

我没有定义
FutureProvider()
的类型,所以它是
动态的
,但是在我的
提供程序中
call我指定了导致问题的类型。指定
FutureProvider()
的类型应该可以解决问题。

什么意思它不起作用?当我调用
Provider.of()时,是否出现错误
它是一个未来的提供商。它会抛出一个红色屏幕的错误,表示小部件树中没有提供商,基本上它找不到,但如果我将其更改为任何其他类型的提供商,我不会收到错误,并且一切正常。我现在不在计算机旁,但我会在更新帖子时提供更多信息可以。可能添加
listen:false
到你的
Provider.of
?@SilkeNL,但这不起作用。我更新了帖子以包含错误。可能是你以后需要包装你的列表吗?
Provider.of(context);
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>()),
    }
  ),
}