我正在尝试制作一个应用程序,使用Riverpod进行州管理和FlutterMaps。我已经为页面设置了通知程序,并且正在为地图页面使用(State)NotifierProvider。我正在构建一个搜索功能,它将进入一个搜索页面,该页面显示带有搜索结果的列表。当单击这些结果之一(在列表中)时,我将更新映射页的通知程序。然而,这里有一个棘手的部分:我想要根据搜索结果的LatLng (居中)更新地图。
我的说明符的实现包含:late MapController? _mapController;
我的地图页面被加载,并从Notifier:mapController: notifier.getMapController()获取mapController: notifier.getMapController()
使用Riverpod状态管理,这一切都应该可以工作,但是我得到了以下错误:
LateError (LateInitializationError: Field '_state@1225051772' has already been initialized.)这个错误在MapController本身(这是FlutterMaps包的一部分)中,所以我不想碰它。有谁知道怎么解决这个问题吗?
发布于 2022-02-11 12:37:21
延迟错误是由取消将在应用程序启动前填充的变量引起的。
late MapController? _mapController;这个定义是错误的。在这里,你是说这个值很快就会被补上。您还会说这个值可以是null。
late MapController _mapController;如果这样做,则此变量在运行时不应为空。如果它为null,您将得到一个后期错误。
MapController? _mapController;如果你这样做。这意味着该值可以为空。你使用的时候应该检查一下。像这样
void sameFunction(){
if(_mapController!=null){
... your code
// here make sure this variable is not null. For this reason ! i put this
MapController anotherController=_mapController!;
}
}或
void sameFunction(){
// Your code will not throw an error if this variable is null. Because specify that
//it can be null
mapController?.moveTo(...)
}发布于 2022-02-11 12:22:54
您应该删除延迟关键字,或者在initState方法中删除它。
https://stackoverflow.com/questions/71079356
复制相似问题