dart - 将不可变的List <Map <String,dynamic >>映射到其他变量

标签 dart

我正在从sqlite数据库中查询,并在类型为List<Map<String, dynamic>>的people变量中得到结果。此变量是不可变的,无法对其进行操作。因此,我正在尝试将此变量映射到另一个具有相同数据类型的名为mPeople的变量。我正在尝试在以下代码中执行此操作。

List<Map<String, dynamic>> people = [];
List<Map<String, dynamic>> mPeople = [];

Database db;
db = await openDatabase(path, version: 1);
people = await db.rawQuery("SELECT * FROM people");
mPeople = Map<String, dynamic>.from(people);

for(var i=0; i< firebaseIds.length; i++){
  mPeople.removeWhere((item) => item['id'] == firebaseIds[i]);
}

但是我说A value of type 'Map<String, dynamic>' can't be assigned to a variable of type 'List<Map<String, dynamic>>'.时出错。我不明白为什么会这样。任何帮助将不胜感激。谢谢

最佳答案

您可以像这样在 map 列表中进行克隆,然后将每个 map 转换为新 map ,然后将结果转换为列表:

mPeople = people.map((m) => Map.of(m)).toList();

但是,由于您将只使用此列表来稍后删除内容,因此仅确保此新列表不包含不需要的元素会更有效。因此,您可以正确地进行如下操作:
final mPeople = people
    .where((item) => !firebaseIds.contains(item['id']))
    .map((m) => Map.of(m))
    .toList();

关于dart - 将不可变的List <Map <String,dynamic >>映射到其他变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61153649/

相关文章:

flutter - 如何取消在主函数中打开的 StreamSubscription

android - Flutter/cloud-firestore "Task is already complete"异常

c++ - Dart/flutter : getting data array from C/C++ using ffi?

dart - 如何在 Dart 中将相对路径转换为绝对路径?

generics - Dart:通用方法不起作用

dart - FixedExtentScrollPhysics flutter

flutter - 结合冷冻和 hive

javascript - 为什么我使用相同的代码得到不同的结果?

dart - 将 Gridview 添加到列中会使页面为空。 flutter

dart - Flutter 相机插件无法导入/可用