我收到错误"NoSuchMethodError:方法‘[]’被调用时为空."从我的溪流里.我多次try 更改代码并添加了print语句,这些语句可以正确打印,但我的Stream最终返回了一个错误,这就是主题行中的错误.知道为什么吗?我如何才能修复这个错误?

这是PRINT DATA语句的结果:

数据:

{
   userId1: 59jTMEbvqFd8C8UhInksauAVNk63,
   userId2: 2ssfDEPhPhcIwInUWdlm0ReH5RZ2,
   latestMessageTime: Timestamp(seconds=1667140814, nanoseconds=334000000),
   lastMessageSenderId: 59jTMEbvqFd8C8UhInksauAVNk63, 
   created_at: 2022-10-26 19:44:13.793275, 
   latestMessage: TEST 3, 
   roomId: Qv30s8kATJbFJIWRdBEo
}

.

      Stream<RoomsListModel> roomsStream() async* {
    try {
      // get all active chats
      var rooms = await FirebaseFirestore.instance
          .collection("rooms")
          .where("users", arrayContains: userId)
          .orderBy("latestMessageTime", descending: true)
          .snapshots();
      print("rooms: $rooms");
// get Other user details
      await for (var room in rooms) {
        for (var doc in room.docs) {
          var data = doc.data() as Map<String, dynamic>;
          print("数据: $data");
          var otherUser = await getOtherUser(
              data["users"][0] == userId ? data["users"][1] : data["users"][0]);
          print("otherUser: $otherUser");
          yield RoomsListModel(
              roomId: doc.id,
              userId: otherUser["user id"],
              avatar: otherUser["photoUrl"],
              name: otherUser["name"],
              lastMessage: data["latestMessage"],
              lastMessageTime: data["latestMessageTime"]);
        }
      }
    } catch (e) {
      print("Error: $e");
    }
  }

.

Future getOtherUser(String id) async {
  // get other user profile
  var user = await FirebaseFirestore.instance
      .collection("users")
      .doc(id)
      .get()
      .then((value) => value.data()) as Map<String, dynamic>;
  // return other user profile
  return user;
}

推荐答案

更改这一点:

var otherUser = await getOtherUser(
              data["users"][0] == userId ? data["users"][1] : data["users"][0]);

对此:

var otherUser = await getOtherUser(
              data["userId1"] == userId ? data["userId2"] : data["userId1"]);

Flutter相关问答推荐

Flutter bloc -如何使用BlocBuilder?

想更新ListView上的索引点击块Flutter

下拉图标未居中

如何在容器小部件中的图像旁边添加文本?

当键盘在抖动中打开时,如何才能看到包装在SingleChildScrollView中的列中的最后一个小工具?

如何在Flutter Webview包中触发基于URL导航的事件

Flutter Android Google Sign-in error:ApiException:10在确认软件包名称、SHA-1 fingerprint 和设置同意页面后出现异常

在Dart中使用Riverpod代码生成时出现问题(addListener)

如何处理平台游戏的对象冲突?

2023 年如何使用 youtube_explode_dart 包下载 URL?

如何在android中 Select 任何文件/文件路径 - Flutter

应用程序和应用程序内的 webview 之间的单点登录

Android: 从 URI 获取音频元数据

Flutter snapShot.hasData 为假但响应有数据

在 Flutter 中更改高架按钮 OnPressed 的背景 colored颜色

为什么 orientation == Orientation.portrait 总是正确的,尽管我的设备已经处于横向

避免长单词中断

如何在 tabBar 中的选项卡之间制作垂直线?

如何在 SingleChildScrollView 小部件中管理自定义小部件状态

为什么这个参数类型不能分配给参数类型?