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

问题描述 投票:1回答:1
  @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( '食谱')。文件( 'MXYt6fLDt5F4I1XJen31')集合( '意见')。快照()

在这里你可以看到我正在访问已经存在的配方及其相应的ID。我想转到详细信息页面,然后留下仅针对该配方显示的注释。所以我需要访问该UNIC ID。

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

您可以使用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();
              }
            },
          ),
        ),
      ),
    );
  }
© www.soinside.com 2019 - 2024. All rights reserved.