Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google maps 颤振谷歌地图颤振可以';无法通过PopupMenuButton更改映射类型_Google Maps_Dart_Flutter - Fatal编程技术网

Google maps 颤振谷歌地图颤振可以';无法通过PopupMenuButton更改映射类型

Google maps 颤振谷歌地图颤振可以';无法通过PopupMenuButton更改映射类型,google-maps,dart,flutter,Google Maps,Dart,Flutter,我只是在玩一套新的flifter 我想使用PopupMenuButton更改地图的MapType,如混合、卫星、无等。下面是我的代码 import 'package:flutter/material.dart'; import 'package:google_maps_flutter/google_maps_flutter.dart'; class MapPage extends StatefulWidget { @override _MapPageState createState(

我只是在玩一套新的flifter

我想使用
PopupMenuButton
更改地图的
MapType
,如混合、卫星、无等。下面是我的代码

import 'package:flutter/material.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';

class MapPage extends StatefulWidget {
  @override
  _MapPageState createState() => _MapPageState();
}

class _MapPageState extends State<MapPage> {
  GoogleMapController mapController;
  List arrMapTyep = [
    {'title': 'none', 'value': MapType.none},
    {'title': 'hybrid', 'value': MapType.hybrid},
    {'title': 'normal', 'value': MapType.normal},
    {'title': 'satellite', 'value': MapType.satellite},
    {'title': 'terrain', 'value': MapType.terrain}
  ];
  MapType currentMapType = MapType.normal;

  @override
  void initState() {
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Google Map"),
        actions: <Widget>[
          PopupMenuButton(
              icon: Icon(Icons.more_vert),
              initialValue: currentMapType,
              onSelected: (value) {
                setState(() {
                  currentMapType = value;
                });
              },
              itemBuilder: (BuildContext context) => _setupAllMapType()
              )
        ],
      ),
      body: Container(
        child: GoogleMap(
          onMapCreated: _onMapCreated,
          options: GoogleMapOptions(
              mapType: currentMapType,
              compassEnabled: true,
              myLocationEnabled: true,
              cameraPosition: CameraPosition(
                  target: LatLng(37.785834, -122.406417), 
                  zoom: 16,
                )
              ),
        ),
      ),
    );
  }

  void _onMapCreated(GoogleMapController controller) {
    setState(() {
      mapController = controller;
    });
  }

  List<PopupMenuItem> _setupAllMapType() {
    List<PopupMenuItem> temArr = List();
    for (var i = 0; i < arrMapTyep.length; i++) {
      temArr.add(
        PopupMenuItem(
          value: arrMapTyep[i]['value'],
          child: Text(arrMapTyep[i]['title']),
        ),
      );
    }

    return temArr;
  }
}
导入“包装:颤振/材料.省道”;
导入“包:google_-maps_-flatter/google_-maps_-flatter.dart”;
类MapPage扩展StatefulWidget{
@凌驾
_MapPageState createState()=>\u MapPageState();
}
类_MapPageState扩展状态{
谷歌地图控制器;
列表arrMapTyep=[
{'title':'none','value':MapType.none},
{'title':'hybrid','value':MapType.hybrid},
{'title':'normal','value':MapType.normal},
{'title':'satellite','value':MapType.satellite},
{'title':'terrain','value':MapType.terrain}
];
MapType currentMapType=MapType.normal;
@凌驾
void initState(){
super.initState();
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(“谷歌地图”),
行动:[
弹出菜单按钮(
图标:图标(更多图标),
initialValue:currentMapType,
onSelected:(值){
设置状态(){
currentMapType=值;
});
},
itemBuilder:(BuildContext上下文)=>\u setupAllMapType()
)
],
),
主体:容器(
孩子:谷歌地图(
onMapCreated:_onMapCreated,
选项:谷歌地图选项(
mapType:currentMapType,
同谋:是的,
myLocationEnabled:对,
cameraPosition:cameraPosition(
目标:拉丁美洲(37.785834,-122.406417),
缩放:16,
)
),
),
),
);
}
void\u onMapCreated(谷歌地图控制器){
设置状态(){
mapController=控制器;
});
}
列表_setupAllMapType(){
List temArr=List();
对于(变量i=0;i

我打了
设置状态
,但我能处理它。

我不确定现在回答这个问题是否太晚,但万一像我这样的人偶然发现这个问题

可以使用对currentMapType变量的setState()调用来实现MapType中的实时更改。我已经在我的应用程序中实现了这一点,它工作起来像黄油一样平滑

希望能有帮助。快乐的飞翔

快速参考(将普通地图类型更改为卫星地图类型):


你得到解决方案了吗?我在appbar操作中有一个按钮,用于更改映射类型,但这样做会给我:未处理的异常:在构造函数中调用setState()。映射是一个辅助小部件
   RaisedButton(
     child: Text("Satellite"),
     onPressed: () {
        setState(() {
           currentMapType = MapType.satellite;
        });
     },
   )