首页 > 解决方案 > 颤振地图叠加问题

问题描述

我正在为使用 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;
    }

有没有办法解决这个问题?

标签: google-mapsdartflutter

解决方案


推荐阅读