我正在为使用Google Maps的应用开发Flutter。该应用程序由2个活动组成:列表和地图。
本段仅是一些背景信息。您可以跳过它。通常,Google Maps可以通过点击打开为动态地图的静态地图来调用地图。静态地图只是一个小部件。该应用需要在单个活动上直接显示全屏地图。
我们面临的问题与重叠广告有关。来自medium.com的Auby Khan提供了显示全屏地图所需的代码。因此,我们用一个按钮创建了第一个活动,该按钮将您导航到第二个活动:
new IconButton(
icon: new Icon(Icons.map),
tooltip: 'openMap',
onPressed: (){
Navigator.push(
context,
MaterialPageRoute(builder: (context) => ControlParkMapNormal()),
);
},
),
在第二个活动中,它将显示地图:
final size = MediaQueryData.fromWindow(ui.window).size;
final GoogleMapOverlayController controller =
GoogleMapOverlayController.fromSize(
width: size.width,
height: size.height,
);
final mapController = controller.mapController;
final Widget mapWidget = GoogleMapOverlay(controller: controller);
class ControlParkMapNormal extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: new Scaffold(
appBar: AppBar(
title: Text("ControlPark"),
actions: <Widget>[
IconButton(
icon: const Icon(Icons.list),
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => ControlPark()),
);
},
),
],
),
body: MapsDemo(mapWidget, controller.mapController),
),
navigatorObservers: <NavigatorObserver>[controller.overlayController],
);
}
}
class MapsDemo extends StatelessWidget {
MapsDemo(this.mapWidget, this.controller);
final Widget mapWidget;
final GoogleMapController controller;
@override
Widget build(BuildContext context) {
return Center(child: mapWidget);
}
}
从活动1>活动2>活动1导航时,地图将保持显示状态。该地图似乎永久地覆盖在所有后续活动上。从活动1>活动2>活动1>活动2的转换会产生此错误:
I / flutter(12701):引发了另一个异常:'package:flutter / src / widgets / navigator.dart':失败的断言:1303行pos 14:'observer.navigator == null':不正确。
这是观察者导航器的代码块:
@override
void initState() {
super.initState();
for (NavigatorObserver observer in widget.observers) {
assert(observer.navigator == null);
observer._navigator = this;
}
有什么办法解决这个问题?