【问题标题】:Flutter Google Maps: How can you change maptype after runtime?Flutter Google Maps:如何在运行后更改地图类型?
【发布时间】:2020-08-15 20:20:29
【问题描述】:

按下如下所示的按钮时,我试图从normal 更改为satellite,但我收到一个错误,即setMapType 不存在。

mapController.setMapType(MapType.satellite);

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

【问题讨论】:

    标签: google-maps flutter dart


    【解决方案1】:
         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;
        });
        },
      ),
    
    
                );
              }
              }
    

    【讨论】:

    • 请记住,这会重新加载地图,因此可能会被视为额外的 API 调用并在网络上花钱。
    【解决方案2】:
    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;  
         });
      }
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-25
      • 2013-07-12
      • 2017-09-16
      • 1970-01-01
      • 1970-01-01
      • 2018-02-20
      • 2020-09-29
      相关资源
      最近更新 更多