Flutter Google Maps:如何在运行后更改地图类型?

问题描述

按下图所示的按钮时,我试图从normal更改为satellite,但出现一个错误提示setMapType不存在。

mapController.setMapType(MapType.satellite);

有人知道我在做什么错吗?

解决方法

     import 'dart:async';

   import 'package:flutter/material.dart';

     import 'package:search_map_place/search_map_place.dart';
   import 'package:google_maps_flutter/google_maps_flutter.dart';

   String apiKEY;

  void main() => runApp(MyApp());

 class MyApp extends StatelessWidget {
   @override
     Widget build(BuildContext context) {
      return MaterialApp(
        title: 'Search Map Place Demo',home: MapSample(),);
         }
      }

     class MapSample extends StatefulWidget {
     @override
     State<MapSample> createState() => MapSampleState();
    }

      class MapSampleState extends State<MapSample> {
      Completer<GoogleMapController> _mapController = Completer();

      final CameraPosition _initialCamera = CameraPosition(
      target: LatLng(-20.3000,-40.2990),zoom: 14.0000,);
      var maptype = MapType.normal;
       @override
       Widget build(BuildContext context) {
       return Scaffold(
       resizeToAvoidBottomPadding: false,body: Stack(
       children: <Widget>[
        GoogleMap(
        mapType: maptype,initialCameraPosition: _initialCamera,onMapCreated: (GoogleMapController controller) {
          _mapController.complete(controller);
        },),],floatingActionButton: FloatingActionButton(
    backgroundColor: Colors.white,foregroundColor: Colors.black,child: const Icon(Icons.my_location),onPressed: () {
    setState(() {
      
      this.maptype=MapType.satellite;
    });
    },);
          }
          }
,
  1. 创建一个变量:

    MapType _currentMapType = MapType.normal;
    
  2. 在您的 Google 地图小部件中,将地图类型链接到您的变量:

    googleMap = new GoogleMap(
        mapType: _currentMapType,//etc
    
  3. 创建一个用于交换地图类型的浮动按钮小部件:

    floatingActionButton: FloatingActionButton(           
                              child: Icon(Icons.layers),onPressed: _toggleMapType,heroTag: null,
  4. 创建将切换地图类型的 onPressed 方法:

    void _toggleMapType(){    
       setState(() {
           _currentMapType = (_currentMapType == MapType.normal) ? MapType.satellite : MapType.normal;  
       });
    }