如何使用颤动检索Firestore数据

时间:2020-04-29 12:31:56

标签: flutter google-cloud-firestore

我现在已经尝试了好几天来检索我的Firestore值,但是没有运气,所以将其发布在这里。

我有一个Firestore数据库和一些数据。我想在Flutter的帮助下找回它。

这就是我一直在做的事情。

所以我有一个Flutter屏幕,其中在AppBar中显示了一个简单的3点下拉列表。

它有两个选项:editcancel

我想要的是,当我按Edit时,它应该打开一个新屏幕并传递我从Firestore检索到的数据。

这是我有editcancel下拉菜单(3个点)并调用a函数(以检索数据并打开新屏幕)的地方。

Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        centerTitle: true,
        title: Text(widget.news.headline.toUpperCase()),
        actions: <Widget>[
          PopupMenuButton<String>(
            onSelected: (value) {
              _open_edit_or_delete(value); // caling the function here
            },
            itemBuilder: (BuildContext context) {
              return {'Edit', 'Delete'}.map((String choice) {
                return PopupMenuItem<String>(
                  value: choice,
                  child: Text(choice),
                );
              }).toList();
            },
          ),
        ],
      ),
      body: _get_particular_news(widget.news),
    );
  }

,这是它正在调用的open_edit_or_delete函数。但是它并没有打开(导航)到我正在呼叫的屏幕。

open_edit_or_delete(String selectedOption) {
    News news;
    Visibility(
        visible: false,
        child: StreamBuilder(
          stream: FireStoreServiceApi().getNews(),
          builder: (BuildContext context, AsyncSnapshot<List<News>> snapshot) {
            if (snapshot.hasError || !snapshot.hasData) {
              Navigator.push(
                  context, MaterialPageRoute(builder: (_) => FirstScreen(news:news)));
              return null;
            } else {
              return ListView.builder(
                itemCount: snapshot.data.length,
                itemBuilder: (BuildContext context, int index) {
                  news = snapshot.data[index];
                },
              );
            }
          },
        ));
  }

如果您需要FireStoreServiceApi().getNews(),这里也是。

  // get the news
  Stream<List<News>> getNews() {
    return _db.collection("news").snapshots().map(
          (snapshot) => snapshot.documents
              .map((doc) => News.fromMap(doc.data, doc.documentID))
              .toList(),
        ) ;
  }

有人可以帮我吗?

1 个答案:

答案 0 :(得分:0)

您没有将数据正确传递给fromMap方法。

您可以使用doc.data ['']

访问数据

如果其中具有data和documentID属性,则可以进行以下操作。

 News.fromMap(doc.data.data, doc.data.documentID))

我不知道您的fromMap方法,我也不知道您的快照包含的内容,如果这对您不起作用,也可以添加它们。