有时我会问自己,我是不是很傻,还是Dart(扑扑)很奇怪。
这怎么不起作用?
我正在使用https://github.com/apptreesoftware/flutter_google_map_view
我显示了一张地图,并添加了标记。
由于该程序包支持侦听器,因此在点击标记时,我想显示一个模式。
监听器可以工作吗?是的,因为发生了打印语句。
模态工作吗?我不知道。没有错误显示,什么都没有!
mapView.onTouchAnnotation.listen((annotation) {
print(annotation);
showModalBottomSheet<void>(
context: context,
builder: (BuildContext context) {
return Container(
height: 260.0,
child: Text('Text'),
);
},
);
});
请问,什么是魔术子弹?
修改
腿部肉肉更多。这是我的脚手架小部件。
MapView mapView = new MapView();
@override
Widget build(BuildContext context) {
return new MaterialApp(
home: new Scaffold(
key: scaffoldKey,
appBar: new AppBar(
title: new Text('Map View Example'),
),
body: new Column(
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
showMap(context),
],
),
),
);
showMap(...)
看起来像这样:
showMap(context) {
mapView.show(
new MapOptions(
mapViewType: MapViewType.normal,
showUserLocation: true,
showMyLocationButton: true,
showCompassButton: true,
initialCameraPosition:
new CameraPosition(new Location(5.6404963, -0.2285315), 15.0),
hideToolbar: false,
title: "Dashboard"),
// toolbarActions: [new ToolbarAction("Close", 1)],
);
mapView.onMapReady.listen((_) {
mapView.setMarkers(_markers);
});
mapView.onTouchAnnotation.listen((annotation) {
print(annotation);
showModalBottomSheet<void>(
context: context,
builder: (BuildContext context) {
return Container(
height: 260.0,
child: Text('Text'),
);
},
);
});
}
答案 0 :(得分:1)
您遇到问题的原因是您的context
不包含脚手架。如果您在代码中查看正在执行的操作,则上下文实际上来自封装支架的小部件。
YourWidget <------------ context
MaterialApp
Scaffold
AppBar
Column
showMap....
有两种方法可以解决此问题。您可以使用类似这样的Builder小部件:
body: new WidgetBuilder(
builder: (context) => new Column(
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
showMap(context),
],
)
),
在这种情况下,上下文实际上植根于支架下方。
YourWidget
MaterialApp
Scaffold
AppBar
Builder <------------ context
Column
showMap....
但是,我真正推荐的是将您的课程分为多个课程。如果您的构建函数足够大,则必须将其分离为另一个函数(该函数仅使用一次),很有可能需要一个新的小部件!
您既可以制作主体小部件(可能是无状态的),也可以制作仅用于显示地图的小部件(根据您的需要是无状态的或有状态的)……或更可能是两者!
现在为什么看不到任何错误...您是在调试还是发布模式下运行(如果处于调试模式,则屏幕右上方应该有一个小横幅)?如果您处于发布模式,则它可能会忽略上下文中没有脚手架并以静默方式失败的事实,而在调试模式下,它应该引发断言错误。从IDE运行或与flutter run
一起运行通常在调试模式下运行,但是您可能已对其进行了更改。