该应用程序到目前为止可以执行的操作:到目前为止,我有一个应用程序可以在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!')));
关于firebase - 如何在另一个小部件中获取Firestore数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64514512/