flutter - 在谷歌地图上热重载之前不显示标记,颤抖
问题描述
我将标记添加到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;
});
}
推荐阅读
- jmeter - 如何在 Jenkins Performance Plugin 中设置字段“Summariser Date Format”
- javascript - 来自 javascript 的动态 html 内容(使用 jquery 方法)
- c# - 每个请求的 ASP.NET Core MVC 注入
- shell - 使用 ~/.bashrc 中的 shell 脚本获取容器的 IP 地址
- c++ - 可以在 struct 中返回两个数组,但不能在 C++ 类中返回
- java - 使用 spring-boot 的线程安全 AbstractRoutingDataSource
- json - 如何在 Kotlin 的 Volley 请求中在 Url 中添加 Body?
- python - Pandas:在特定条件下对前 N 个元素求和
- linear-regression - 如何在statsmodel中分解线性回归误差
- visual-studio - Visual Studio Express 可以运行 ssis 包吗?