flutter - 在Flutter中将forEach循环转换为Future.forEach循环

标签 flutter dart firebase-realtime-database

我尝试在flutter中将.forEach循环转换为Future.forEach循环以等待循环。我要循环播放的元素是Firebase实时数据库的快照。
我的功能如下:

Future<User> getUserByUid(String uid) async {
    DataSnapshot dataSnapshot =
        await databaseRef.orderByChild("uid").equalTo(uid).once();

    List user = List();

    dataSnapshot.value.forEach((key, value) async {
      User entry = await User.fromJson(value);
      await entry.setId(key);

      user.add(entry);
    });

    if (user.isNotEmpty) {
      return user[0];
    } else {
      return null;
    }
  }
我尝试了不同的方法,但是我无法使用该功能。
首次尝试:
Future<User> getUserByUid(String uid) async {
    DataSnapshot dataSnapshot =
        await databaseRef.orderByChild("uid").equalTo(uid).once();

    List user = List();

    await Future.forEach(dataSnapshot.value, (element) {
      print(element);
    });

    if (user.isNotEmpty) {
      return user[0];
    } else {
      return null;
    }
  }
错误:

Unhandled Exception: type '_InternalLinkedHashMap<dynamic, dynamic>' is not a subtype of type 'Iterable'


第二次尝试:
Future<User> getUserByUid(String uid) async {
    DataSnapshot dataSnapshot =
        await databaseRef.orderByChild("uid").equalTo(uid).once();

    List user = List();

    for (var u in dataSnapshot.value) {
      print(u);
    }

    if (user.isNotEmpty) {
      return user[0];
    } else {
      return null;
    }
  }
错误:

Unhandled Exception: type '_InternalLinkedHashMap<dynamic, dynamic>' is not a subtype of type 'Iterable'


对于所有尝试,我都会遇到相同的错误。但是上面的.forEach示例有效。
另一个问题:在.forEach中,我还获得了key变量。在Future.forEach中也可以通过某种方式使用吗?

最佳答案

您正在尝试遍历 map ,但是(如错误所示)map不可迭代。您可以遍历 map 的键:

for (var key in dataSnapshot.value.keys) {
  print(dataSnapshot.value[key]);
}

关于flutter - 在Flutter中将forEach循环转换为Future.forEach循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64698162/

相关文章:

android - Flutter 是否有上下文操作栏,用于从 ListView 中选择多个项目

当按钮单击时 flutter 创建动态文本字段

java - 无法从 Firebase 检索信息到自定义 ListView Android

swift - 某些数据未从 Firebase 数据库 Swift 3 中读取

java - 如何更新firebase数据库特定键中的值

flutter - 用=> 启动flutter 时如何调用多条语句?

android - 在 flutter 上解析 json 时出错。类型 '_InternalLinkedHashMap<String, dynamic>' 不是类型转换中类型 'ResultData' 的子类型

没有 AppBar 的 Flutter 布局

flutter - 通过扩展方法flutter创建const Widget

dart - 打印变量值的详细结构/类型信息