将当前文档ID传递给detailsPage

时间:2019-02-25 04:42:27

标签: dart flutter google-cloud-firestore

我需要从Firestore文档中获取数据,这些文档包含子集合。

用户在点击新页面时应获得listTile的详细信息。问题是我在点击时传递文档ID时遇到问题。

  body: StreamBuilder(
    stream: Firestore.instance.collection('myMainCollection').snapshots(),
    builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
      if (!snapshot.hasData) return CircularProgressIndicator();
      return FirestoreListView(documents: snapshot.data.documents);
    },
 child: ListView.builder(

        itemCount: documents.length,
        itemExtent: 90.0,
        itemBuilder: (BuildContext context, int index) {


          final myListTile = ListTile(

              onTap: () {
    Navigator.push(
      context,
      MaterialPageRoute(
        builder: (context) => detailCard(documents[index] ),
      ),
    );
  },

在detailPage上,我有以下代码:

 body: StreamBuilder(

    stream: Firestore.instance.collection('myMainCollection').document("TappedDocID").collection('sub-collection').snapshots(),
    builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
      if (!snapshot.hasData) return CircularProgressIndicator();
      return FirestoreListView(documents: snapshot.data.documents);
    },
  ),

是否知道如何传递用户点击的doc ID?

1 个答案:

答案 0 :(得分:1)

您可以做的是在详细信息页面中传递ID,然后在详细信息页面中使用传递的ID来获取数据。

我正在通过和检索相同的方式,它对我有用。

示例:

使用导航器将文档ID从列表页面传递到详细信息页面:

Navigator.push(
  context,
  MaterialPageRoute(
    builder: (context) => DetailsPage(
      docId: 'theIdYouWantToPass',
    ),
  ),
);

详细信息页面:

class DetailsPage extends StatefulWidget {
  final String docId;

  DetailsPage(
      {Key key, @required this.docId})
      : super(key: key);

  @override
  DetailsPageState createState() {
    return new DetailsPageState();
  }
}

// accessing the doc id in details page like this
class DetailsPageState
    extends State<DetailsPage> {
  // example if you want to store it in another var
  // or you can directly use **this.widget.docId**
  var docId = this.widget.docId;
}