首页 文章

谷歌 Map 扑动插件

提问于
浏览
0

你好,我尝试使用谷歌 Map 插件为flutter https://github.com/flutter/plugins/tree/master/packages/google_maps_flutter

我用这个例子
https://github.com/flutter/plugins/tree/master/packages/google_maps_flutter/example/lib

但在这个例子中有一些页面 . 在我的应用程序中,我只需要在应用程序的启动时使用一个 Map . 问题,有了这个例子,我没有设法在我方便的时候使用它 . 所以我尝试使用read.me的极简主义示例,但它是一个statlesswidget,而且我不能像整数Tag函数那样整数Tag函数或map_ui.dart . 所以我试图在statefull中传递这个无状态,但是当我这样做时,我有一个错误

这是我试图从两个例子中编译的内容


例子1 https://github.com/flutter/plugins/tree/master/packages/google_maps_flutter

void main() {
  GoogleMapController.init();
  final GoogleMapOverlayController controller =
  GoogleMapOverlayController.fromSize(width: 300.0, height: 200.0);
  final Widget mapWidget = GoogleMapOverlay(controller: controller);
  runApp(MaterialApp(
    home: new Scaffold(
      appBar: AppBar(title: const Text('Google Maps demo')),
      body: MapUiBody(mapWidget, controller.mapController),
    ),
    navigatorObservers: <NavigatorObserver>[controller.overlayController],
  ));
 }

例如2

https://github.com/flutter/plugins/blob/master/packages/google_maps_flutter/example/lib/map_ui.dart

class MapUiBody extends StatefulWidget {
   final GoogleMapOverlayController controller;

   const MapUiBody(this.controller, GoogleMapController mapController);

   @override
   State<StatefulWidget> createState() =>
      MapUiBodyState(controller.mapController);
  }

 class MapUiBodyState extends State<MapUiBody> {
  MapUiBodyState(this.mapController);

  final GoogleMapController mapController;

  @override
   Widget build(BuildContext context) {
    return Column(
    );
  }
}

有了这个,我有一个错误

body: MapUiBody(mapWidget, controller.mapController),
mapWidget: the argument type Widget can't be assigned to the  parameter type 'GooglemapoverlayController'

2 回答

  • 0

    我成功地在主页上显示 Map 但我无法移动 Map ..

    void main() {
      GoogleMapController.init();
      final GoogleMapOverlayController controller =
      GoogleMapOverlayController.fromSize(width: 300.0, height: 200.0);
      final Widget mapWidget = GoogleMapOverlay(controller: controller);
      runApp(MaterialApp(
        home: new Scaffold(
      appBar: AppBar(title: const Text('Google Maps demo')),
      body: MapsDemo(mapWidget, controller.mapController),
    ),
     ));
    }
    
    
     class MapsDemo extends StatelessWidget {
      MapsDemo(this.mapWidget, this.controller);
    
       final Widget mapWidget;
       final GoogleMapController controller;
       @override
       final GoogleMapOverlayController mapController =
        GoogleMapOverlayController.fromSize(
        width: 300.0,
    height: 200.0,
    options: GoogleMapOptions(
      cameraPosition: const CameraPosition(
        target: LatLng(-33.852, 151.211),
        zoom: 11.0,
      ),
      trackCameraPosition: true,
      ),
    );
    
       @override
       Widget build(BuildContext context) {
        return MapUiBody(mapController);
      }
     }
    
    
    class MapUiBody extends StatefulWidget {
      final GoogleMapOverlayController controller;
    
      const MapUiBody(this.controller);
    
      @override
      State<StatefulWidget> createState() =>
         MapUiBodyState(controller.mapController);
      }
    
     class MapUiBodyState extends State<MapUiBody> {
      MapUiBodyState(this.mapController);
    
      final GoogleMapController mapController;
       GoogleMapOptions _options;
    
      @override
      void initState() {
       super.initState();
       mapController.addListener(_onMapChanged);
       _extractMapInfo();
      }
    
      void _onMapChanged() {
       setState(() {
        _extractMapInfo();
       });
      }
    
      void _extractMapInfo() {
        _options = mapController.options;
      }
    
      @override
      void dispose() {
        mapController.removeListener(_onMapChanged);
       super.dispose();
       }
    
    
      Widget _mapTypeCycler() {
        final MapType nextType =
        MapType.values[(_options.mapType.index + 1) % MapType.values.length];
        return FlatButton(
          child: Text('change map type to $nextType'),
          onPressed: () {
           mapController.updateMapOptions(
             GoogleMapOptions(mapType: nextType),
          );
        },
      );
    }
    
    
    
      @override
       Widget build(BuildContext context) {
        return Column(
          mainAxisAlignment: MainAxisAlignment.start,
          crossAxisAlignment: CrossAxisAlignment.stretch,
          children: <Widget>[
          Padding(
          padding: const EdgeInsets.all(10.0),
          child: Center(
            child: GoogleMapOverlay(controller: widget.controller),
          ),
        ),
        Column(
          children: <Widget>[
    
            _mapTypeCycler(),
    
           ],
         ),
       ],
      );
     }
    }
    
  • 1

    你有

    final GoogleMapOverlayController controller;
    
    const MapUiBody(this.controller, GoogleMapController mapController);
    

    你经过的地方

    final GoogleMapOverlayController controller =
        GoogleMapOverlayController.fromSize(width: 300.0, height: 200.0);
    final Widget mapWidget = GoogleMapOverlay(controller: controller);
    
      ...
    
      body: MapUiBody(mapWidget, controller.mapController),
    

    其中 mapWidget 传递给 final GoogleMapOverlayController controller; ,这不是 Widget . controller.mapController 可能是 GoogleMapController ,正如 const MapUiBody(..., GoogleMapController mapController); 所期望的那样,但是传递它似乎是多余的,因为无论如何你都可以从 controller 传递到 mapWidget .

    从您的代码中不清楚您的意图是什么 .

    你为什么要通过 mapWidget ?它应该在 MapUiBody 中发生什么?

相关问题