【问题标题】:Cannot read List Type automatically from Firestore Flutter无法从 Firestore Flutter 自动读取列表类型
【发布时间】:2021-04-12 17:56:59
【问题描述】:

每当我尝试创建流或只是从 firestore 获取数据并将其映射到对象时,List 字段类型始终被视为动态

class Order{
  String itemId;
  String itemName;
  List<String> itemImage;
  Order({this.itemId, this.itemName, this.itemImage});

  factory Order.fromMap(Map<String , dynamic> parsedData){

    return Order(
      itemId: parsedData['itemId'],
      itemName: parsedData['itemName'],
      itemImage: parsedData['listImage'],
    );
  }
}

这是调用流的代码

Stream<List<Order>> getOrder(int unit) {
    return _firestore
        .collection(orderPath)
        .where("unit", whereIn: [unit])
        .snapshots()
        .map((QuerySnapshot snapshot) => snapshot.docs
            .map((DocumentSnapshot e) => Order.fromMap(e.data()))
            .toList());
  }

当我使用流时总是发生错误

type 'List<dynamic>' is not a subtype of type 'List<String>' of 'function result'

只有当我像这样更改工厂方法 fromMap 时才会起作用

factory Order.fromMap(Map<String , dynamic> parsedData){
List<String> imageList = parsedData['itemImage'].map<String>((e) {
      String image = e;
      return image;
    }).toList();
    return Order(
      itemId: parsedData['itemId'],
      itemName: parsedData['itemName'],
      itemImage: imageList ,
    );
  }

这真的是必要的步骤吗?因为我很确定列表只包含字符串,还是我做错了?谢谢你

【问题讨论】:

    标签: flutter google-cloud-firestore


    【解决方案1】:

    在您的原始工厂 fromMap 中,您需要将其转换为这样的字符串列表:

    (parsedData['imageList'] as List).cast<String>()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-10
      • 1970-01-01
      • 2021-12-27
      • 1970-01-01
      • 2021-05-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多