【问题标题】:How can you access to FlutterMap Controller from different class如何从不同的类访问 FlutterMap 控制器
【发布时间】:2020-07-14 15:43:13
【问题描述】:

我正在尝试找到一种从课堂外部访问 flutter_map 控制器的方法 这个想法是我在地图屏幕上有标记。 当您点击标记时,地图应移动,以便香料标记位于中间

标记类初始在不同类中的问题,因此我无法立即访问地图控件

如何让地图移动?

  ./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);

                            }))))

【问题讨论】:

    标签: flutter fluttermap


    【解决方案1】:

    我看到的最简单的选择是将其转换为全局实例。 (或者您可以将其设为静态)。

    但我必须说,这些选项不是很“漂亮”...

    【讨论】:

      【解决方案2】:

      您可以公开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);
                  },
                ),
              ),
            ),
          );
        }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多