google-maps - 颤振地图叠加问题
问题描述
我正在为使用 Google 地图的应用程序开发 Flutter。该应用程序由 2 个活动组成:列表和地图。
本段只是一些背景信息。你可以跳过它。通常,谷歌地图让您通过点击打开动态地图的静态地图来调用地图。静态地图只是一个小部件。该应用程序需要在单个活动上直接显示全屏地图。
我们面临的问题与覆盖有关。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;
}
有没有办法解决这个问题?
解决方案
推荐阅读
- android - 如何统一从插件接收mp3文件?
- alexa - InvalidSlotTypeLiteral:意图“RawText”中插槽“Text”的插槽类型“AMAZON.LITERAL”无效
- php - Sonata Admin - 更改订单父类别
- c++ - 为什么 deque 的 pop_front() 和 pop_back() 不是 noexcept?
- mercurial - 如何检查 Mercurial 存储库的一致性(校验和)?
- css - 按下时更改传单簇的样式
- python - PyCharm PEP 8:用于视觉缩进的续行缩进不足
- python - 当项目存储在 NAS 上时 PyCharm 重新索引
- ngxs - 使用子状态测试 NGXS 状态会将错误的状态输入到动作处理程序中
- python - Keras:大小为 x*x 的输入会生成不需要的输出 y*x