很抱歉,我是flutter和dart语言的新手,所以我对它的用法并不熟悉。
目前,我有一个来自Page A
的ListTile
,它包含信息(纬度和经度(,当点击ListTile
中的任何项目时,它应该将该特定项目的信息传递给Page B
,并执行在Page B
声明的功能(基于从Page A
传递的纬度和经度放大谷歌地图(。
我知道从一个页面转到另一个页面,我们可以使用Navigator
,但我仍然不知道如何调用函数和传递信息。因此,我希望我能在这方面得到一些指导或帮助
这是我试图在Page B
:中调用的函数
_goToLocation(Information information) {
mapController.animateCamera(
CameraUpdate.newCameraPosition(
CameraPosition(
target: LatLng(
double.parse(infomration.latitude),
double.parse(information.longitude),
),
zoom: 18.0,
),
),
); }
我设法使用以下代码转到Page B
到Page A
,单击ListTile
中的任何项目(通过onTap()
(都会执行这些代码,但我不确定如何调用Page B
中的函数来使用此代码运行。我想知道我是否可以使用以下代码调用该函数?
void navigationToExplore(Information information) async {
await Navigator.push(context, MaterialPageRoute(builder: (context) {
return Explore();
}));
}
提前谢谢。
首先,您需要将数据从屏幕A传递到屏幕B
void navigationToExplore(Information information) async {
await Navigator.push(context, MaterialPageRoute(builder: (context) {
return Explore(
lat : latitude,
long : longitude,
);
}));
}
现在你的屏幕B:-
class Explore extends StatefulWidget {
final double lat;
final double long;
Explore({this.lat, this.long});
@override
_Explore createState() => _Explore();
}
class _Explore extends State<Explore> {
GoogleMapController _controller;
Completer<GoogleMapController> _googleMapCompleter = Completer();
updateCameraPosition(){
LatLng userCoordinates = LatLng(widget.jobData.lat, widget.jobData.long);
CameraPosition cameraPosition = CameraPosition(
target: userCoordinates,
zoom: 15,
);
final GoogleMapController controller = await _googleMapCompleter.future;
controller.animateCamera(CameraUpdate.newCameraPosition(cameraPosition));
}
@override
void initState() {
super.initState();
updateCameraPosition();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: GoogleMap(
mapType: MapType.normal,
initialCameraPosition: CameraPosition(target: LatLng(0, 0)),
myLocationEnabled: true,
onMapCreated: (GoogleMapController controller) async {
_controller = controller;
_googleMapCompleter.complete(_controller);
},
// this wont allow screen scrolling from google maps
gestureRecognizers: Set()
..add(
Factory<EagerGestureRecognizer>(() => EagerGestureRecognizer())),
)
);
}
}