如何使用 Flutter 访问 Firestore 中特定配方的 documentId?

Posted

技术标签:

【中文标题】如何使用 Flutter 访问 Firestore 中特定配方的 documentId?【英文标题】:How can you access the documentId for a particular recipe in Firestore using Flutter? 【发布时间】:2019-02-03 11:20:33 【问题描述】:
  @override
  Widget build(BuildContext context) 
return new Scaffold(
  appBar: new AppBar(
    title: new Text(
      "Comments",
      style: TextStyle(color: Colors.white),
    ),
    backgroundColor: primaryColor,
  ),
  body: StreamBuilder(
    stream: Firestore.instance.collection('recipes').document('MXYt6fLDt5F4I1XJen31').collection('comments').snapshots(),
    builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot)
      if(!snapshot.hasData) return CircularProgressIndicator();
      return FirestoreListView( documents: snapshot.data.documents);
    ,
  ),
);



class FirestoreListView extends StatelessWidget 
 final List<DocumentSnapshot> documents;

 FirestoreListView(this.documents);

 @override
 Widget build(BuildContext context) 
  return ListView.builder(
  itemCount: documents.length,
  itemBuilder: (BuildContext context, int index)
    String message = documents[index].data['message'].toString();

    return ListTile(
      title: Container(
        decoration: BoxDecoration(
          borderRadius: BorderRadius.circular(5.0),
          border: Border.all(color: Colors.black),
        ),
        padding: EdgeInsets.all(5.0),
        child: Row(
          children: <Widget>[
            Expanded(
              child: Text(message),
            ),
          ]
        ),
      )
    );

  ,
);

Firestore.instance.collection('recipes').document('MXYt6fLDt5F4I1XJen31').collection('cmets').snapshots()

如您所见,我正在使用她对应的 ID 访问一个已经存在的食谱。我想转到详细信息页面,然后留下仅针对该食谱显示的评论。所以我需要访问那个 UNIC id。

【问题讨论】:

【参考方案1】:

您可以使用forEach 方法尝试这样的事情:

@override
  Widget build(BuildContext context) 
    return Scaffold(
     body: Container(
        child: Center(
          child: StreamBuilder(
            stream: Firestore.....your_path....collection('comments').snapshots(),
            builder: (context, snapshot) 
              if (snapshot.hasData) 
                List<DocumentSnapshot> documentSnapshotsList =
                    snapshot.data.documents;

                List<Recipe> recipesList = [];

                documentSnapshotsList.forEach((documentSnapshot) 
                  Recipe recipe = Recipe(
                    id: documentSnapshot["recipe_id"],
                    name: documentSnapshot["recipe_name"],
                    image: documentSnapshot["recipe_image_url"],
                  );

                  recipesList.add(recipe);
                );

                return FirestoreListView(recipesList);
               else if (snapshot.hasError)
                return Text("Error");
              else 
                return CircularProgressIndicator();
              
            ,
          ),
        ),
      ),
    );
  

【讨论】:

以上是关于如何使用 Flutter 访问 Firestore 中特定配方的 documentId?的主要内容,如果未能解决你的问题,请参考以下文章

Flutter / Firestore - 如何访问 Firebase 上的嵌套元素?

如何从 Dart VM / Dart 集成测试访问 Firebase Firestore?

无法使用 Flutter Web 访问 Cloud Firestore

无法在flutter中访问Firebase Firestore doc的字段[重复]

如何使用 Flutter 配置 Firebase Firestore 设置

Flutter Web App 无法访问 Firebase Cloud Firestore