如何解决如何在另一个小部件中获取Firestore数据
该应用程序到目前为止可以做什么:到目前为止,我有一个应用程序可以在Google Map上显示从Firestore获取坐标的标记。
我想要的东西:我希望当用户按下一个标记时,他会转到另一个显示更多数据的屏幕(数据也位于Firestore中)。
问题:我不知道如何在要显示详细信息的屏幕上获取数据(例如名称)。
我有一个onTap函数,该函数调用goToDetailPage()
那是goToDetailPage()函数:
void goToDetailPage() {
Navigator.of(context).push(new MaterialPageRoute(
builder: (BuildContext context) => new detailPage()));
}
这是“绘制”标记的代码:
void initMarker(specify,specifyId) async {
var markerIdVal = specifyId;
final MarkerId markerId = MarkerId(markerIdVal);
final Marker marker = Marker(
markerId: markerId,position:
LatLng(specify['location'].latitude,specify['location'].longitude),infoWindow: InfoWindow(title: specify['name'],snippet: 'Shop'),onTap: () {
goToDetailPage();
});
print(specify['location'].latitude);
nameTest = specify['name'];
setState(() {
markers[markerId] = marker;
print(markerId.toString() + '__________________________');
});
}
这是详细页面中的代码:
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Detail Page'),),body: Column(children: <Widget>[Text(specify['name'])]),);
问题在于详细信息页面中的describe ['name']中的指定带有红色下划线,我不知道这是什么原因。
解决方法
在第二页中:
class Tester extends StatefulWidget {
String dataFromLastPage;
Tester({Key key,this.dataFromLastPage}) : super(key: key);
@override
_TesterState createState() => _TesterState();
}
class _TesterState extends State<Tester> {
@override
Widget build(BuildContext context) {
return Text(widget.dataFromLastPage); //"thisWillGoToTheNextPage!"
}
}
导航到该页面时,请像这样发送数据:
Navigator.of(context).push(new MaterialPageRoute(
builder: (BuildContext context) => new Tester(dataFromLastPage: 'thisWillGoToTheNextPage!')));
,
尝试并按照文档所说的去做:https://firebase.flutter.dev/docs/firestore/usage/#realtime-changes
但是,文档未指定的一些内容是
- 要首先使用firestore,您需要初始化firestore应用,因为您只需在dart文件的main方法中编写一段特定的代码即可。
void main() async{ WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp(); runApp(MyApp()); }
-
要连接到Firestore数据库,只需键入小部件构建函数
CollectionReference <Variable name> = FirebaseFirestore.instance.collection(<Name of collection as string>);
-
现在,如果您要创建列表,则只需使用
StreamBuilder
函数,并通过(按文档中的说明初始化快照)获取文档中的数据
snapshot.data.docs[index].data()[<Identifier of your document such as 'Name' or 'location'>]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。