试图调用 Provider.of<dynamic>。这可能是一个错误,因此不受支持

Posted

技术标签:

【中文标题】试图调用 Provider.of<dynamic>。这可能是一个错误,因此不受支持【英文标题】:Tried to call Provider.of<dynamic>. This is likely a mistake and is therefore unsupported 【发布时间】:2021-07-07 20:30:59 【问题描述】:

尝试获取当前用户的 uid 并向其发送文本,但面临 Provider 实现的错误。

尝试调用 Provider.of。这很可能是一个错误,并且是 因此不受支持。如果你想公开一个变量 任何事情,请考虑将dynamic 改为Object。 'package:provider/src/provider.dart':断言失败:第 307 行 pos 7: 'T != 动态'

这是使用提供程序的代码

 return SingleChildScrollView(
      child: Column(
        children: [
          FutureBuilder(
              future: Provider.of(context, listen: false).auth.getCurrentUid(),
              builder: (context, snapshot) 
                if (snapshot.connectionState == ConnectionState.done) 
                  return Text("$snapshot.data");
                 else 
                  return CircularProgressIndicator();
                
              )
        ],
      ),
    );

获取当前uid的函数

//GET UID
  Future<String> getCurrentUid() async 
    return _auth.currentUser.uid;
  

我该如何解决这个问题? 非常感谢任何帮助! 提前谢谢你。

【问题讨论】:

【参考方案1】:

只需替换

future: Provider.of(context, listen: false).auth.getCurrentUid(),

future: Provider.of<YOUR_PROVIDER_CLASSNAME>(context, listen: false).auth.getCurrentUid(),

你应该没问题。

您可以在不指定应提供的类的情况下使用Provider.of 的唯一时刻是初始化提供程序的变量时。

MyProvider _myProvider = Provider.of(context, listen: false);

【讨论】:

【参考方案2】:

只需告诉提供者它是哪种类型的“提供者”类。

future: Provider.of<CLASSNAME>(context, listen: false).auth.getCurrentUid(),

【讨论】:

以上是关于试图调用 Provider.of<dynamic>。这可能是一个错误,因此不受支持的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 Provider.of(context) 调用类方法

在dispose()方法内部调用带有Provider.of(context)的方法会导致“查找已停用的小部件的祖先是不安全的。”

如何将 get_it 用于 Provider.of<ExampleProvider>(context)?

如何对访问 Provider.of(context) 的小部件进行 Flutter 测试

Flutter之跨组件状态共享Provider剖析

Flutter之跨组件状态共享Provider剖析