【问题标题】:i am using flutter for chat app and getting an error in user distinguish for receiver and sender我正在为聊天应用程序使用颤振,并且在用户区分接收者和发送者时出现错误
【发布时间】:2021-08-28 16:01:47
【问题描述】:
class Messages extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return FutureBuilder(
      future: FirebaseAuth.instance.currentUser,// here is the error " The argument type 'User' can't be assigned to the parameter type 'Future<dynamic>'.dart(argument_type_not_assignable)"
    

builder: (ctx, futureSnapshot) { 如果(futureSnapshot.connectionState == ConnectionState.waiting){ 退货中心( 孩子:CircularProgressIndicator(), ); }

        return StreamBuilder(
            stream: FirebaseFirestore.instance
                .collection('chat')
                .orderBy('createdAt', descending: true)
                .snapshots(),
            builder: (ctx, chatSnapshot) {
              if (chatSnapshot.connectionState == ConnectionState.waiting) {
                return Center(
                  child: CircularProgressIndicator(),
                );
              }
              final chatDocs = chatSnapshot.data.docs;
              return ListView.builder(
                reverse: true,
                itemCount: chatSnapshot.data.docs.length,
                itemBuilder: (ctx, index) => MessageBubble(
                  chatDocs[index]['text'],
                  chatDocs[index]['userId'] == futureSnapshot.data.uid,
                  key: ValueKey(chatDocs[index].documentID),
                ),
              );
            });
      },
    );
  }
}

【问题讨论】:

  • 添加错误信息。
  • FirebaseAuth.instance.currentUser 不是未来,它将当前经过身份验证的用户作为 User 类的实例或 null 返回。
  • 请修剪您的代码,以便更容易找到您的问题。请按照以下指南创建minimal reproducible example

标签: flutter dart


【解决方案1】:

FirebaseAuth.instance.currentUser 不是错误所说的 Future。如果用户通过身份验证,它将返回用户类的实例。对于这种情况,您不需要使用 FutureBuilder Widget。可以直接使用。

【讨论】:

    【解决方案2】:

    'FirebaseAuth.instance.currentUser' 不是将来获取当前用户 uid 你可以这样做。

    class Messages extends StatelessWidget {
    final User user = FirebaseAuth.instance.currentUser;
    @override
    Widget build(BuildContext context) {
    
     final uid = user.uid; // set the function here
     return StreamBuilder(
        stream: FirebaseFirestore.instance
            .collection('chat')
            .orderBy('createdAt', descending: true)
            .snapshots(),
        builder: (ctx, chatSnapshot) {
          if (chatSnapshot.connectionState == ConnectionState.waiting) {
            return Center(
              child: CircularProgressIndicator(),
            );
          }
          final chatDocs = chatSnapshot.data.docs;
          return ListView.builder(
            reverse: true,
            itemCount: chatSnapshot.data.docs.length,
            itemBuilder: (ctx, index) => MessageBubble(
              chatDocs[index]['text'],
              chatDocs[index]['userId'] == uid, // Use it here
              key: ValueKey(chatDocs[index].documentID),
            ),
          );
        });
    }
    }
    

    【讨论】:

    • 无法在初始化程序中访问实例成员“用户”。尝试用不同的表达式替换对实例成员的引用
    • 使用上述代码时出现此错误
    • @MrRock 抱歉,我更新了答案。
    猜你喜欢
    • 1970-01-01
    • 2023-03-03
    • 2017-02-14
    • 2021-03-01
    • 2021-02-27
    • 2014-01-12
    • 2021-01-04
    • 1970-01-01
    • 2021-04-03
    相关资源
    最近更新 更多