Flutter Dart:Getter即使在调用async Setter之后也返回null(确保方法中的字段不为null)
它感觉很简单,但却不起作用。我是否遗漏了一些非常基本的东西?这些getter和setter方法在类AppData中,它有一个静态字段:List(元素类型LatLng)_navRoute=List();由于某些原因,get总是返回nullFlutter Dart:Getter即使在调用async Setter之后也返回null(确保方法中的字段不为null),flutter,dart,Flutter,Dart,它感觉很简单,但却不起作用。我是否遗漏了一些非常基本的东西?这些getter和setter方法在类AppData中,它有一个静态字段:List(元素类型LatLng)_navRoute=List();由于某些原因,get总是返回null static void setNewRoute() async{ List<LatLng> navRoute = await _googleMapPolyline.getCoordinatesWithLocation( origin: L
static void setNewRoute() async{
List<LatLng> navRoute = await _googleMapPolyline.getCoordinatesWithLocation(
origin: LatLng(_currentLocation.latitude, _currentLocation.longitude),
destination: LatLng(_navDestination.latitude, _navDestination.longitude),
mode: RouteMode.walking
);
_navRoute = navRoute;
print("Nav route in set route is:" + _navRoute.toString()); //does not print null
}
static List<LatLng> getNavRoute(){
print("Nav route in get route is:" + _navRoute.toString()); //prints null
return _navRoute; //returns null
}
这里有几个问题 首先,您的
async
方法应该返回Future
,因为所有async
方法都应该返回Future
:
static Future setNewRoute()异步{
...
}
其次,你需要等待你的未来:
onPressed:(){
setState(()异步{
AppData.updateCurrentLocation();
setNavDestination(小部件的纬度、经度);
//这将在您实际设置导航路线后完成
等待AppData.setNewRoute();
AppData.setNavStatus(true);
});
打印(“当前位置为:“+AppData.getCurrentLocation().latitude.toString()+”,“+AppData.getCurrentLocation().latitude.toString());//不为空
打印(“导航目的地为:”+AppData.getNavDestination().latitude.toString()+”,“+AppData.getNavDestination().latitude.toString());//不为空
打印(“导航为:+AppData.getNavRoute().toString());//始终为空
Navigator.pop(context);//弹出底部ModalSheet
导航器。更换(
上下文
新材料路线(
builder:(BuildContext context)=>AppData.getTour(widget,
),
);
},
),
基本上
AppData.getNavRoute
返回null
,因为\u navRoute
实际上尚未设置,因为您没有等待它所依赖的异步操作完成。这里有几个问题
首先,您的async
方法应该返回Future
,因为所有async
方法都应该返回Future
:
static Future setNewRoute()异步{
...
}
其次,你需要等待你的未来:
onPressed:(){
setState(()异步{
AppData.updateCurrentLocation();
setNavDestination(小部件的纬度、经度);
//这将在您实际设置导航路线后完成
等待AppData.setNewRoute();
AppData.setNavStatus(true);
});
打印(“当前位置为:“+AppData.getCurrentLocation().latitude.toString()+”,“+AppData.getCurrentLocation().latitude.toString());//不为空
打印(“导航目的地为:”+AppData.getNavDestination().latitude.toString()+”,“+AppData.getNavDestination().latitude.toString());//不为空
打印(“导航为:+AppData.getNavRoute().toString());//始终为空
Navigator.pop(context);//弹出底部ModalSheet
导航器。更换(
上下文
新材料路线(
builder:(BuildContext context)=>AppData.getTour(widget,
),
);
},
),
基本上
AppData.getNavRoute
返回null
,因为\u navRoute
实际上还没有设置,因为您没有等待它所依赖的异步操作完成。将setter签名更改为将来的void,并按下:
onPressed: () async{
AppData.updateCurrentLocation();
AppData.setNavDestination(widget._latitude, widget._longitude);
AppData.setNavStatus(true);
await AppData.setNewRoute();
setState(() {
});
print("Current location is: " + AppData.getCurrentLocation().latitude.toString() + " , " + AppData.getCurrentLocation().longitude.toString());
print("Nav destination is: " + AppData.getNavDestination().latitude.toString()+ ", " + AppData.getNavDestination().longitude.toString());
Navigator.pop(context); //pop the bottomModalSheet
Navigator.pushReplacement(
context,
new MaterialPageRoute(
builder: (BuildContext context) => AppData.getTour(widget._tourID),
),
);
},
它可以工作。将setter签名更改为Future void,并按下:
onPressed: () async{
AppData.updateCurrentLocation();
AppData.setNavDestination(widget._latitude, widget._longitude);
AppData.setNavStatus(true);
await AppData.setNewRoute();
setState(() {
});
print("Current location is: " + AppData.getCurrentLocation().latitude.toString() + " , " + AppData.getCurrentLocation().longitude.toString());
print("Nav destination is: " + AppData.getNavDestination().latitude.toString()+ ", " + AppData.getNavDestination().longitude.toString());
Navigator.pop(context); //pop the bottomModalSheet
Navigator.pushReplacement(
context,
new MaterialPageRoute(
builder: (BuildContext context) => AppData.getTour(widget._tourID),
),
);
},
非常感谢您的回复。这不太管用,但是,你的回答帮助我发现了错误。我将对此添加一个答案。为了澄清:它抛出了一个关于在change state中调用异步函数的断言。非常感谢您的回答。这不太管用,但是,你的回答帮助我发现了错误。我将对此添加一个答案。为了澄清:它抛出了一个关于在change state中调用异步函数的断言