如何在Google Maps小部件中使用Navigator.push()(上下文= null)?

时间:2019-03-22 20:53:31

标签: android google-maps dart flutter

我有一个Flutter应用程序,正在使用Google Maps小部件(刚刚更新为0.4.0)在屏幕上显示一些标记。每个标记对应一个商店,并具有一个带有商店名称的信息窗口。我希望当我们点击信息窗口时,会显示商店页面。

它似乎并不复杂,这是我所做的:

UIViewPropertyAnimator

但是当我单击窗口时,什么也没有发生。

我想我发现了问题所在:当我们单击信息窗口时,在controller.dart文件中调用了_handleMethodCall(MethodCall call)方法:

animator.addAnimations(animation: (()->Void), realtiveDuration: CGFloat)

上下文未作为参数传递,因此,当我进入调用Navigator.push的onTap方法时,上下文为null。

有人知道如何解决此问题吗?谢谢!

1 个答案:

答案 0 :(得分:0)

Marker类中的

onTap方法未传递上下文 google_maps_flutter/lib/src/marker.dart#L45 并且由于您要将上下文参数添加到onTap方法回调中,因此它会覆盖build方法中的上下文值。

您需要从构建方法中获取上下文。只需删除({BuildContext context})

Marker marker = Marker(
  consumeTapEvents: false,
  markerId: MarkerId(markerId.toString()),
  position:
      LatLng(truck.situation.position.lat, truck.situation.position.long),
  infoWindow: InfoWindow(
    title: truck.name,
    onTap: () {
      Navigator.push(
        context,
        MaterialPageRoute(builder: (context) => TruckScreen(truck: truck)),
      );
    },
  ),
);