gpt4 book ai didi

flutter - 在Google map 上重新热加载之前,标记不会显示

转载 作者:行者123 更新时间:2023-12-03 04:40:09 25 4
gpt4 key购买 nike

我将标记添加到googlemap。
在此代码中。第一次加载时,没有标记
当我按r进行热重载时,会出现标记
我只是猜测,我可能必须在这里做些事情???

setState((){
print("items ready and set state");
});
我该如何解决?
class _MapPageState extends State<MapPage> {

Completer<gmap.GoogleMapController> _controller = Completer();

Set<gmap.Marker> _markers = {};


@override
void initState(){
super.initState();
_asyncMethod();
print("init ready");
}

_asyncMethod() async {
_markers = {};

print ("asyncMethod start");

List<dynamic> wayLabels = annotModel['wayLabel'];
wayLabels.forEach((x){
gmap.BitmapDescriptor icon;
gmap.BitmapDescriptor.fromAssetImage(
ImageConfiguration(devicePixelRatio: 2.5),
x['image'][CommonFunc.langKey]).then((onValue) {
icon = onValue;
gmap.Marker marker = gmap.Marker(
markerId: gmap.MarkerId(x['title']),
position: gmap.LatLng(x['latitude'],x['longitude']),
icon: icon
);
_markers.add(marker);
});
});

setState((){
print("items ready and set state");
});
}
Widget makeMyMap(){
gmap.GoogleMap myMap = gmap.GoogleMap(
mapType: gmap.MapType.normal,
markers : _markers,
initialCameraPosition: _kGooglePlex,
onMapCreated: (gmap.GoogleMapController controller) {
_controller.complete(controller);
}
);
return Container(child:myMap);
}

@override
Widget build(BuildContext context){
return
Column(children: <Widget>[
Expanded(child:Stack(children: <Widget>[
makeMyMap(),
]),),
]);
}
}
gmap.BitmapDescriptor.fromAssetImage可能需要一些时间,因此
    setState((){
print("items ready and set state");
});
_asyncMethod()在设置所有标记之前被调用。
那就是问题所在。

解。
更改 _markers.add(marker);
setState((){
_markers = markers;
print("items ready and set state");
});
它运作良好。

最佳答案

您应该尝试使用此软件包https://pub.dev/packages/after_layout
在afterFirstLayout方法内调用_asyncMethod

@override
void afterFirstLayout(BuildContext context) {
// Calling the same function "after layout" to resolve the issue.
_asyncMethod();
}
另外,我认为将_asyncMethod中的标记分配给局部变量更健康,然后在setState中更改标记
_asyncMethod() async {
var localMarkers = {};

.
.
.

setState((){
_markers = localMarkers;
});
}

关于flutter - 在Google map 上重新热加载之前,标记不会显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63381907/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com