如何分配列表< dynamic>到列表< Khana>,其中Khana是一个模型类在参数Flutter-Firestore?

dced5bon  于 2023-01-09  发布在  Flutter
关注(0)|答案(1)|浏览(87)

实际上,我正在尝试从firebase获取数据,但遇到了错误:
应为List类型的值< Khana >,但得到的是“List”类型的值< dynamic >
我正在从firebase获取数据,我的fetchData函数是:

Future<void> fetchAndSetOrder() async {
    try {
      await collectionRef.get().then((querySnapshot) {
        for (var result in querySnapshot.docs) {
          debugPrint("${result.runtimeType}=> ${result.data()}");
          Orders newOrder = Orders.fromFirestore(result);
          debugPrint("\n new order : $newOrder");
          // _Order.add(newOrder);
          debugPrint("new order added");
          // _Order.add(Orders.fromMap(result as Map));
        }
      });
    } catch (e) {
      debugPrint("Error during Fetch:- $e");
    }
  }

并且Orders.fromFirestore构造函数为:

factory Orders.fromFirestore(DocumentSnapshot<Object?> snapshot) {
    final data = snapshot.data() as LinkedHashMap<String, dynamic>;
    debugPrint("Inside From Firestore Function");
    return Orders(
      khana: data['khana'], // here is the error...
      orderNumber: data['orderNumber'],
      userId: data['userId'],
      paymentCash: data['paymentCash'],
      dateTime: data['dateTime'],
    );
  }

订单类具有:

class Orders{
  List<Khana> khana;  // this is another ModelClass
  String userId;
  int orderNumber;
  DateTime dateTime;
  bool paymentCash;
  Orders({
    required this.khana,
    required this.userId,
    required this.orderNumber,
    required this.dateTime,
    required this.paymentCash,
  });
}

所以,问题是我如何从firestore读取列表作为列表?任何其他可能的方法来解决这个问题。我的Khana模型是:

import 'dart:convert';

class Khana {
  String mealName;
  int id;
  int price;
  int quantity;
  Khana({
    required this.mealName,
    required this.price,
    required this.quantity,
    required this.id,
  });

  Map<String, dynamic> toMap() {
    final result = <String, dynamic>{};

    result.addAll({'mealName': mealName});
    result.addAll({'id': id});
    result.addAll({'price': price});
    result.addAll({'quantity': quantity});

    return result;
  }

  factory Khana.fromMap(Map<String, dynamic> map) {
    return Khana(
      mealName: map['mealName'] ?? '',
      id: map['id']?.toInt() ?? 0,
      price: map['price']?.toInt() ?? 0,
      quantity: map['quantity']?.toInt() ?? 0,
    );
  }

  String toJson() => json.encode(toMap());

  factory Khana.fromJson(String source) => Khana.fromMap(json.decode(source));
}

我试图从firestore www.example.com()读取一个Listsnapshot.data,它说它的返回数据类型是List,我想把这个List赋给我自己的ModelClass(即Khana)的List,但我无法做到。我甚至尝试过

factory Orders.fromFirestore(DocumentSnapshot<Object?> snapshot) {
    final data = snapshot.data() as LinkedHashMap<String, dynamic>;
    debugPrint("Inside From Firestore Function");
    return Orders(
      khana: data['khana'] as List<Khana>, 
      orderNumber: data['orderNumber'],
      userId: data['userId'],
      paymentCash: data['paymentCash'],
      dateTime: data['dateTime'],
    );
  }

但也遇到了同样的问题

wh6knrhe

wh6knrhe1#

把你的卡那换成这个

khana: List<Khana>.from(data['khana'].map((x)=>Khana.fromJson(x)));

相关问题