参数类型“User”不能分配给参数类型“Future<dynamic>”。? [复制]

Posted

技术标签:

【中文标题】参数类型“User”不能分配给参数类型“Future<dynamic>”。? [复制]【英文标题】:The argument type 'User' can't be assigned to the parameter type 'Future<dynamic>'.? [duplicate] 【发布时间】:2021-06-13 02:29:38 【问题描述】:

我尝试像往常一样使用 Firebase 实例,但在这种情况下,我遇到了一个错误,我的问题是如何在我的代码中修复此错误:

 The argument type 'User' can't be assigned to the parameter type 'Future<dynamic>'.


class Messages extends StatelessWidget 
  @override
  Widget build(BuildContext context) 
    return FutureBuilder(
      future: FirebaseAuth.instance.currentUser,
      builder: (context, futureSnapshot) 
        if (futureSnapshot.connectionState == ConnectionState.waiting) 
          return Center(
              child: CircularProgressIndicator());
        
        return StreamBuilder(
            stream: FirebaseFirestore.instance
                .collection('chat')
                .orderBy('created', descending: true)
                .snapshots(),
            builder: (context, chatSnapshot) 
              if (chatSnapshot.connectionState == ConnectionState.waiting) 
                return Center(
                  child: CircularProgressIndicator(),
                );
              
              final chatdocs = chatSnapshot.data.docs;
              return ListView.builder(
                  itemCount: chatdocs.length,
                  itemBuilder: (context, index) => MessageBubble(
                        chatdocs[index]['text'],
                        chatdocs[index]['userId'] == futureSnapshot.data.uid,
                      ));
         

希望任何人都可以提供帮助。 也许任何人都可以向我解释这一点,而不仅仅是给出答案

【问题讨论】:

【参考方案1】:

FirebaseAuth.instance.currentUser 是 User 类型,它不是 Future。

因此在这种情况下您不需要使用 FutureBuilder。

class Messages extends StatelessWidget 
  @override
  Widget build(BuildContext context) 
    final currentUser = FirebaseAuth.instance.currentUser;

    return StreamBuilder(
      stream: FirebaseFirestore.instance
          .collection('chat')
          .orderBy('created', descending: true)
          .snapshots(),
      builder: (context, chatSnapshot) 
        if (chatSnapshot.connectionState == ConnectionState.waiting) 
          return Center(
            child: CircularProgressIndicator(),
          );
        

        final chatdocs = chatSnapshot.data.docs;

        return ListView.builder(
            itemCount: chatdocs.length,
            itemBuilder: (context, index) 
              return MessageBubble(
                chatdocs[index]['text'],
                chatdocs[index]['userId'] == currentUser.data.uid,
              );
            ,
        );
      ,
    );
  

【讨论】:

但我是否使用它?我已经返回一个未来的建设者 删除 FutureBuilder,你不需要它。将 FirebaseAuth.instance.currentUser 存储在 build 方法中的变量中,并在您将返回的 StreamBuilder 中使用它。 啊不应该使用streambuilder你可以添加一个代码答案,因为我真的不明白我如何在stream builder中使用它 我添加了一些代码,请检查我编辑的答案 谢谢 :) 有美好的一天

以上是关于参数类型“User”不能分配给参数类型“Future<dynamic>”。? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

类型'字符串|的参数用户'不能分配给'string'类型的参数

颤振列表错误参数类型'List'不能分配给参数类型'String'

获取错误“未知”类型的参数不能分配给“错误”类型的参数 |空值'

参数类型“对象?”不能分配给参数类型'String'最新版本

参数类型“Type”不能分配给参数类型“FirebaseUser”

参数类型“字符串”不能分配给参数类型“目录”