Flutter 标记在热重新加载后显示,但在按下按钮时不显示。(颤振-谷歌地图)
当我尝试在我的谷歌地图中放置一个标记时,它直到我单击“热重新加载”才会显示。我是否在某处缺少Flutter 标记在热重新加载后显示,但在按下按钮时不显示。(颤振-谷歌地图),flutter,Flutter,当我尝试在我的谷歌地图中放置一个标记时,它直到我单击“热重新加载”才会显示。我是否在某处缺少setState() 我的问题是我不知道在哪里。这个软件包的文档真的很混乱,因为谷歌地图控制器从一开始就进行了更新和大幅更改。许多指南根本没有帮助,因为代码已经更改 import 'package:geolocator/geolocator.dart'; import 'package:google_maps_flutter/google_maps_flutter.dart'; import 'packa
setState()
我的问题是我不知道在哪里。这个软件包的文档真的很混乱,因为谷歌地图控制器从一开始就进行了更新和大幅更改。许多指南根本没有帮助,因为代码已经更改
import 'package:geolocator/geolocator.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:flutter/material.dart';
import 'package:mobile_app_dev/UI/base_widget.dart';
import 'package:mobile_app_dev/UI/widgets.dart';
import '../main.dart';
class myMapScreen extends StatefulWidget {
@override
myMapState createState() => myMapState();
}
class myMapState extends State<myMapScreen> {
PageController _pageController;
GoogleMapController mapController;
LatLng center = const LatLng(37.352727, -122.034227);
// Location location = new Location();
Position currentLocation;
final Set<Marker> _markers = {};
void _getLocation() async {
var currentLocation = await Geolocator()
.getCurrentPosition(desiredAccuracy: LocationAccuracy.best);
setState(() {
_markers.clear();
final marker = Marker(
markerId: MarkerId("curr_loc"),
position: LatLng(currentLocation.latitude, currentLocation.longitude),
infoWindow: InfoWindow(title: 'Your Location'),
icon: BitmapDescriptor.defaultMarker
);
_markers.add(marker);
});
currentLocation = currentLocation;
}
void _onMapCreated(GoogleMapController controller) {
mapController = controller;
}
@override
void initState() {
_markers.clear();
super.initState();
_pageController = PageController();
_getLocation();
}
@override
void dispose() {
_pageController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return BaseWidget(builder: (context, sizingInformation) {
return Scaffold(
backgroundColor: MyApp.backgroundColor,
appBar: AppBar(
automaticallyImplyLeading: true,
backgroundColor: MyApp.appBarColor,
title: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'Map View',
style: TextStyle(
color: MyApp.whiteNoChangeColor,
fontSize: 25.0,
fontWeight: FontWeight.bold
),
),
],
),
centerTitle: true,
actions: <Widget>[
Padding(
padding: EdgeInsets.only(right: 20.0),
child: GestureDetector(
onTap: () async {
_getLocation();
},
child: Icon(
Icons.search,
size: 26.0,
),
)
)
],
),
body: Container(
height: sizingInformation.myScreenSize.height,
width: sizingInformation.myScreenSize.width,
child: Stack(
children: <Widget>[
GoogleMap(
onMapCreated: _onMapCreated,
initialCameraPosition: CameraPosition(
target: center,
zoom: 15.0,
),
myLocationEnabled: true,
mapType: MapType.hybrid,
compassEnabled: true,
markers: _markers,
),
Positioned(
child: FlatButton(
color: Colors.green,
child: Text("button"),
onPressed: (){
final marker = Marker(
markerId: MarkerId("curr_loc"),
position: center,
infoWindow: InfoWindow(title: 'Your Location'),
icon: BitmapDescriptor.defaultMarker
);
_markers.add(marker);
// _getLocation();
},
),
)
],
),
),
);
},
);
}
}
import'包:geologitor/geologitor.dart';
导入“包:google_-maps_-flatter/google_-maps_-flatter.dart”;
进口“包装:颤振/材料.省道”;
导入“package:mobile_app_dev/UI/base_widget.dart”;
导入“package:mobile_app_dev/UI/widgets.dart”;
导入“../main.dart”;
类myMapScreen扩展StatefulWidget{
@凌驾
myMapState createState()=>myMapState();
}
类myMapState扩展了状态{
页面控制器_页面控制器;
谷歌地图控制器;
LatLng中心=常数LatLng(37.352727,-122.034227);
//位置=新位置();
位置当前位置;
最终集_标记={};
void\u getLocation()异步{
var currentLocation=等待地理定位器()
.getCurrentPosition(所需精度:定位精度。最佳);
设置状态(){
_标记。清除();
最终标记=标记(
markerId:markerId(“curr_loc”),
位置:LatLng(当前位置.纬度,当前位置.经度),
infoWindow:infoWindow(标题:“您的位置”),
图标:BitmapDescriptor.defaultMarker
);
_标记。添加(标记);
});
currentLocation=当前位置;
}
void\u onMapCreated(谷歌地图控制器){
mapController=控制器;
}
@凌驾
void initState(){
_标记。清除();
super.initState();
_pageController=pageController();
_getLocation();
}
@凌驾
无效处置(){
_pageController.dispose();
super.dispose();
}
@凌驾
小部件构建(构建上下文){
返回BaseWidget(生成器:(上下文,大小信息){
返回脚手架(
backgroundColor:MyApp.backgroundColor,
appBar:appBar(
自动嵌入:正确,
背景颜色:MyApp.appBarColor,
标题:世界其他地区(
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
正文(
“地图视图”,
样式:TextStyle(
颜色:MyApp.whiteNoChangeColor,
字体大小:25.0,
fontWeight:fontWeight.bold
),
),
],
),
标题:对,
行动:[
填充物(
填充:仅限边缘设置(右侧:20.0),
儿童:手势检测器(
onTap:()异步{
_getLocation();
},
子:图标(
Icons.search,
尺寸:26.0,
),
)
)
],
),
主体:容器(
高度:sizingInformation.myScreenSize.height,
宽度:sizingInformation.myScreenSize.width,
子:堆栈(
儿童:[
谷歌地图(
onMapCreated:_onMapCreated,
initialCameraPosition:CameraPosition(
目标:中心,
缩放:15.0,
),
myLocationEnabled:对,
mapType:mapType.hybrid,
同谋:是的,
标记:_标记,
),
定位(
孩子:扁平按钮(
颜色:颜色。绿色,
子项:文本(“按钮”),
已按下:(){
最终标记=标记(
markerId:markerId(“curr_loc”),
位置:中,
infoWindow:infoWindow(标题:“您的位置”),
图标:BitmapDescriptor.defaultMarker
);
_标记。添加(标记);
//_getLocation();
},
),
)
],
),
),
);
},
);
}
}
**只需在onPressed中添加一个setState方法,请检查以下示例**
onPressed: (){
final marker = Marker(
markerId: MarkerId("curr_loc"),
position: center,
infoWindow: InfoWindow(title: 'Your Location'),
icon: BitmapDescriptor.defaultMarker
);
setState((){
_markers.add(marker);
});
},
只需创建一个标记列表,首先必须清除该列表,然后在该列表上添加标记
var markers = Set<Marker>();
addMarker(double lat, double lng, String id) {
var marker = Marker(
markerId: MarkerId(id),
position: LatLng(
lat,
lng,
),
infoWindow: InfoWindow(title: locationName),
onTap: () {},
);
markers.clear();
markers.add(marker);
}
var markers=Set();
addMarker(双lat、双lng、字符串id){
变量标记=标记(
markerId:markerId(id),
职位:LatLng(
拉特,
液化天然气,
),
infoWindow:infoWindow(标题:locationName),
onTap:(){},
);
标记。清除();
标记。添加(标记);
}
我也有同样的问题。我发现解决这个问题的唯一方法是在谷歌地图小部件的onTap选项中移动你的
getLocation()
。是的,你需要setState
在onPressed:(){
当我这样做时,即使我按下“热重新加载”按钮,标记也不会出现。我想知道设置状态是否实际上不会影响google地图小部件?