如何在Firebase上查询-Flutter

问题描述 投票:0回答:1

我正在开发一个卖家可以添加itens(iPhone,冰柜等)的应用,用户应该可以查询iten。我不喜欢某种组织方式-我尝试创建子集合(卖方-> docId->项目-> ID->项目)并通过数组(卖方-> docId->(..){itens})进行创建, main image

嗯,我确实知道如何与Streambuilder一起显示和类似的东西。我的代码的一部分非常像这样:

StreamBuilder(

                  stream:
                    Firestore.instance.collection('vendedores')
                    .where(['item'],
                    isEqualTo: widget.busca, 
                    ).
                    snapshots(),
                      //Firestore.instance.collection("vendedores").snapshots(),
                  builder: (context, snapshot) {
                    switch (snapshot.connectionState) {
                      case ConnectionState.none:
                      case ConnectionState.waiting:
                        return Center(
                          child: CircularProgressIndicator(),
                        );
                      default:
                      return 
                        Expanded(child:
                         ListView.builder(
                            itemCount: snapshot.data.documents.length,
                            itemBuilder: (context, index) => showCard(
                                context, snapshot.data.documents[index])));
                    }
                  }
              ),

编辑:我希望能够找到属于卖家的商品(iPhone,冰柜),因此它应该在我的卡(showCard)上显示卖家的姓名。因此,如果有5个人销售相同的商品(例如:主席),则当用户搜索“椅子”时,这5个卖家都将出现在ListView中。

我的小部件showCard已经可以工作-尽管目前仅作为草稿-基本上是:

Widget showCard(context, DocumentSnapshot document) {
  return Card(
    elevation: 8,
    child: InkWell(
      splashColor: Colors.orange.withAlpha(30),
      onTap: () {},
      child: Container(
          color: Color(0xffDFE0DF).withOpacity(0.7),
          width: 500,
          height: 120,
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.end,
            children: <Widget>[
              Padding(
                  padding: EdgeInsets.only(top: 5, right: 5),
                  child: Text( 
                    document['nomeLoja'],
                    style: TextStyle(fontSize: 20),
                  )),
            ],
          )),
    ),
  );
}

** nomeLoja是卖方的名称。

提前感谢!

firebase flutter google-cloud-firestore
1个回答
0
投票

如果您将数据库结构更改为以下形式:

products: {

    100: {

        name: 'chair',
        vendor: {
            name: 'vendor 1'
        }
    },

    101: {

        name: 'chair',
        vendor: {
            name: 'vendor 2'
        }
    },

    102: {

        name: 'table',
        vendor: {
            name: 'vendor 1'
        }
    }
}

您可以在此行中查询所需的数据:

 final documents = await Firestore.instance.collection('products').where('name', isEqualTo: 'chair').getDocuments();

通过这种方式,您可以获得所需供应商的信息,并可以在列表中设置名称。例如:

for(final vendorDocument in documents) {
    final vendor = Vendor.fromData(vendorDocument.data);
    //do what you want with the vendor...
}
© www.soinside.com 2019 - 2024. All rights reserved.