【问题标题】:The argument type 'User' can't be assigned to the parameter type 'Future<dynamic>'.? [duplicate]参数类型“User”不能分配给参数类型“Future<dynamic>”。? [复制]
【发布时间】: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,
                      ));
         

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

【问题讨论】:

    标签: firebase flutter google-cloud-firestore firebase-authentication


    【解决方案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中使用它
    • 我添加了一些代码,请检查我编辑的答案
    • 谢谢 :) 有美好的一天
    猜你喜欢
    • 2021-04-07
    • 2020-10-25
    • 2021-11-23
    • 2021-12-30
    • 1970-01-01
    • 2021-01-05
    • 2022-11-17
    • 2021-02-12
    • 2021-05-25
    相关资源
    最近更新 更多