当前位置: 首页 > 知识库问答 >
问题:

从子集合fiRecovery FLUTTER中检索信息

潘兴朝
2023-03-14

我是《颤栗》和《火种》的新手。

我有一个名为“菜肴”的集合,其中我有许多文档(例如名称、描述等),我还有一个名为成分的子集合,其中我有作为文档的id、名称和数量。

我要做的是取回所有含有配料的菜肴。

我有一个模型

class DishModel{
  static const ID = "id";
  static const DESCRIPTION = "description";
  static const IMAGE = "image";
  static const NAME = "name";
  static const INGREDIENTS = "ingredients";

  int _id;
  String _description;
  String _image;
  String _name;
  double _price;
  int _rates;
  double _rating;
  List<IngredientModel> _ingredients;

//GETTERS

  int get id => _id;

  String get description => _description;


  String get image => _image;



  String get name => _name;

  List<IngredientModel> get ingredients => _ingredients;

  DishModel.fromSnapshot(DocumentSnapshot snapshot){
    _id = snapshot.data()[ID];
    _description = snapshot.data()[DESCRIPTION];
    _image = snapshot.data()[IMAGE];
    _name = snapshot.data()[NAME];
  }
}

IngredientModel模型

class IngredientModel{
  static const ID = "id";
  static const NAME = "name";
  static const QUANTITY = "quantity";

  int _id;
  String _name;
  String _quantity;

  //GETTERS

  int get id => _id;

  String get name => _name;

  String get quantity => _quantity;


  IngredientModel.fromSnapshot(DocumentSnapshot snapshot){
    _id = snapshot.data()[ID];
    _name = snapshot.data()[NAME];
    _quantity = snapshot.data()[QUANTITY];

  }


}

DishHelper

class DishServices{
  String collection = "dishes";
  FirebaseFirestore _firestore = FirebaseFirestore.instance;
  String subcollection = "ingredients";

  Future<List<DishModel>> getDishes() async
  {
    DishModel dishTemp ;
    List<DishModel> dishes = [];
    _firestore.collection(collection).get().then((result) {
      for (DocumentSnapshot dish in result.docs) {
        dishTemp = DishModel.fromSnapshot(dish);
        dish.reference.collection(subcollection).get().then((ingredientRes) {
          for(DocumentSnapshot ingredient in ingredientRes.docs) {
            dishTemp.ingredients.add(IngredientModel.fromSnapshot(ingredient));
          }
        });
        dishes.add(dishTemp);
      }
      return dishes;
    });

  }

}

餐具供应商

class DishProvider with ChangeNotifier{
  DishServices _dishServices = DishServices();
  List<DishModel> dishes = [];

  DishProvider.initialize(){
    _loadDishes();
  }

  _loadDishes() async{
    dishes = await _dishServices.getDishes();
    notifyListeners();
  }


}

主要我写了

 runApp(MultiProvider(providers: [
    ChangeNotifierProvider.value(value: DishProvider.initialize())
  ],
      child: MaterialApp(
          debugShowCheckedModeBanner: false,
          title: 'example_app',
          theme: ThemeData(
            primarySwatch: Colors.red,
          ),
          home: ScreensController()
      )));
}

和在家中(在构建方法中)

final dishProvider =  Provider.of<DishProvider>(context);

但是如果我尝试打印<code>打印(dishProvider.disks)我获得了<code>颤振:null</code>而不是颤振:<code>DishModel</code>的实例

我该如何解决它并检索我的菜品信息?

谢谢大家

共有3个答案

琴元凯
2023-03-14

我发现了错误,它是在get Dish方法中,正确的是:

Future<List<DishModel>> getDishes() async
  {
    DishModel dishTemp ;
    List<DishModel> dishes = [];
    _firestore.collection(collection).get().then((result) {
      for (DocumentSnapshot dish in result.docs) {
        dishTemp = DishModel.fromSnapshot(dish);
        List<IngredientModel> ing_temp = [];
        dish.reference.collection(subcollection).get().then((ingredientRes) {
          for(DocumentSnapshot ingredient in ingredientRes.docs) {
            ing_temp.add(IngredientModel.fromSnapshot(ingredient));

          }
          dishTemp.ingredients = ing_temp;
        });
        dishes.add(dishTemp);
      }
      return dishes;
    });
    return dishes;
  }

感谢大家

常翰
2023-03-14

我认为在 getDishes() 循环中有一些东西。这是文档抛出数据的方式:

FirebaseFirestore.instance
    .collection('users')
    .get()
    .then((QuerySnapshot querySnapshot) {
        querySnapshot.docs.forEach((doc) {
            print(doc["first_name"]);
        });
    });

以下文档:https://firebase.flutter.dev/docs/firestore/usage您可以尝试使用foreach吗?

邬良才
2023-03-14

您需要获取DISPS文档的id才能检索子集合。

FirebaseFirestore.instance
              .collection('dishes')
              .doc(docId)
              .collection('ingredients')
              .snapshots(),

这是一个Github回购协议

 类似资料:
  • 问题内容: 我有一个大型SQL数据库,需要在其中验证表和列的结构(而不​​是数据本身)。因此,我需要生成所有表的列表,然后为每个表,其所有列,然后为每个列,其数据类型,长度/精度,序数位置以及它是否是该表的主键的一部分而生成。 我可以通过以下查询获得大部分所需信息: 但是,我不确定如何检查列是否是主键的一部分。另外,对于那些PK由不止一列组成的表,我想知道键中每一列的顺序位置。到目前为止,我发现的

  • 我正在使用Laravel5.3,需要一些关于雄辩的模型查询的帮助。我有三个模型(UserDetails、Categories、Articles)。我在用户详细信息之间有关系- 每个关系都运行良好,即Userdetails::find(1)- 我有一种感觉,范围可能是答案,但他们似乎不工作,当我尝试它。 模型中的关系 UserDetails.php Categories.php 我研究了HasMan

  • 我试图在一个旧的海军网页上抓取产品的URL。然而,它只是给出了产品列表的一部分,而不是全部(例如,当超过8个URL时,只给出8个URL)。我希望有人能帮我找出问题所在。

  • 我们应该如何从kafka集群/动物园管理员处检索所有代理(已连接/已断开连接)的完整详细信息? 我发现以下方法只获取活动代理,但我想知道以前在集群中服务的代理的IP地址,但它现在已断开连接 以下代码片段给出了活动代理的列表: 输出: 我的机器-1:端口 我的机器-2:端口 我的机器-3:端口 我的机器-4:端口 我需要多节点 kafka 集群中所有已连接/已断开连接的代理的信息

  • Hy Guys我试图做的是从Firestore数据库中检索2个收集文档,并将其显示到我的代码中: 这允许我从特定用户检索数据,但我有另一个名为“shippingAddress”的表单,它创建了如下集合: 然后我必须检索上面的集合,但我不知道如何...因为在同一屏幕中,我检索“用户”集合以仅显示来自特定用户的数据,并且我还需要检索“shippingAddress”集合,因为在此类集合中还有其他要显示

  • 我已经创建了一个azure函数,当一个新文档被添加到一个集合中时,它会被触发。 是否可以从该集合中选择特定文档,然后查询所选文档中的数据? 例如,在所谓的募集服装,我有一个文件,有一个ID: 12345Tops.我想查询ID为:12345Tops的文档中找到的数据。 或者检索集合中的第一个文档,然后查询第一个选定文档 我看过带有http触发器的azure函数:https://docs.micros