如何从不同的 class 访问 FlutterMap Controller
How can you access to FlutterMap Controller from different class
我正在尝试找到一种从 class 外部访问 flutter_map 控制器的方法
这个想法是我在地图屏幕上有标记。
当你点击标记时,地图应该移动,这样 spicefic 标记就会在中间
问题是标记 class 初始位置不同 class 所以我无法立即访问地图控制
如何让地图移动?
./screens/homeScreen.dart
class HomeScreen extends StatefulWidget {
static const routeName = '/home';
@override
_HomeScreenState createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
Widget build(BuildContext context) {
return Scaffold(
body:FlutterMap(
mapController: _mapController,
MarkerClusterLayerOptions(
onMarkerTap: (_) {
}, // Cluster tab
markers:externalReports.items // get the markers list
centerMarkerOnClick: true, // Cluster center
....),);}}
./externalReports.dart // where The Items Initial
_items.add(
Marker(
optionalDataContainer: data,
width: 45.0,
height: 45.0,
point: LatLng(
latitude,
longitude,),
builder: (context) => Container(
child: Container(
height: 45,
width: 45,
child: GestureDetector(
onTap: () {
// _mapController.move(LatLng(latitude,longitude), 15.0);
}))))
我看到的最简单的选项是将其转换为全局实例。 (或者您可以将其设为静态)。
但我必须说这些选项不是很'beautiful'...
您可以公开 Marker
的 onClick 回调
像这样:
class YourMarker extends StatelessWidget {
final double latitude;
final double longitude;
final Function(double, double) onClick;
YourMarker({
this.latitude,
this.longitude,
this.onClick,
});
@override
Widget build(BuildContext context) {
return Marker(
optionalDataContainer: data,
width: 45.0,
height: 45.0,
point: LatLng(
latitude,
longitude,
),
builder: (context) => Container(
child: Container(
height: 45,
width: 45,
child: GestureDetector(
onTap:
() {
onClick(latitude, longitude);
// _mapController.move(LatLng(latitude,longitude), 15.0);
},
),
),
),
);
}
}
我正在尝试找到一种从 class 外部访问 flutter_map 控制器的方法 这个想法是我在地图屏幕上有标记。 当你点击标记时,地图应该移动,这样 spicefic 标记就会在中间
问题是标记 class 初始位置不同 class 所以我无法立即访问地图控制
如何让地图移动?
./screens/homeScreen.dart
class HomeScreen extends StatefulWidget {
static const routeName = '/home';
@override
_HomeScreenState createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
Widget build(BuildContext context) {
return Scaffold(
body:FlutterMap(
mapController: _mapController,
MarkerClusterLayerOptions(
onMarkerTap: (_) {
}, // Cluster tab
markers:externalReports.items // get the markers list
centerMarkerOnClick: true, // Cluster center
....),);}}
./externalReports.dart // where The Items Initial
_items.add(
Marker(
optionalDataContainer: data,
width: 45.0,
height: 45.0,
point: LatLng(
latitude,
longitude,),
builder: (context) => Container(
child: Container(
height: 45,
width: 45,
child: GestureDetector(
onTap: () {
// _mapController.move(LatLng(latitude,longitude), 15.0);
}))))
我看到的最简单的选项是将其转换为全局实例。 (或者您可以将其设为静态)。
但我必须说这些选项不是很'beautiful'...
您可以公开 Marker
像这样:
class YourMarker extends StatelessWidget {
final double latitude;
final double longitude;
final Function(double, double) onClick;
YourMarker({
this.latitude,
this.longitude,
this.onClick,
});
@override
Widget build(BuildContext context) {
return Marker(
optionalDataContainer: data,
width: 45.0,
height: 45.0,
point: LatLng(
latitude,
longitude,
),
builder: (context) => Container(
child: Container(
height: 45,
width: 45,
child: GestureDetector(
onTap:
() {
onClick(latitude, longitude);
// _mapController.move(LatLng(latitude,longitude), 15.0);
},
),
),
),
);
}
}