我现在已经尝试了好几天来检索我的Firestore值,但是没有运气,所以将其发布在这里。
我有一个Firestore数据库和一些数据。我想在Flutter的帮助下找回它。
这就是我一直在做的事情。
所以我有一个Flutter屏幕,其中在AppBar
中显示了一个简单的3点下拉列表。
它有两个选项:edit
和cancel
。
我想要的是,当我按Edit时,它应该打开一个新屏幕并传递我从Firestore检索到的数据。
这是我有edit
和cancel
下拉菜单(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(),
) ;
}
有人可以帮我吗?
答案 0 :(得分:0)
您没有将数据正确传递给fromMap方法。
您可以使用doc.data ['']
访问数据如果其中具有data和documentID属性,则可以进行以下操作。
News.fromMap(doc.data.data, doc.data.documentID))
我不知道您的fromMap方法,我也不知道您的快照包含的内容,如果这对您不起作用,也可以添加它们。