?用Completer实现
class LocationInfo{
double longitude;
double latitude;
String address;
LocationInfo({this.latitude, this.longitude,this.address});
}
class LocationUtil{
///界面初始化完成
static Future<LocationInfo> fetchLocation() async {
Completer<LocationInfo> completer = Completer();
AMapFlutterLocation.updatePrivacyShow(true, true);
AMapFlutterLocation.updatePrivacyAgree(true);
AMapFlutterLocation.setApiKey("android ApiKey", "a6b2356c68aac3fdabd7ecdce63c2130");
AMapFlutterLocation amapLocation = AMapFlutterLocation();
AMapLocationOption locationOption = new AMapLocationOption();
locationOption.onceLocation = true;
amapLocation.setLocationOption(locationOption);
//amapLocation.onLocationChanged().listen((Map<String, Object> result) {
amapLocation.onLocationChanged().listen((Map<String, Object> result) {
if (result != null) {
double longitude = double.tryParse(result['longitude']);
double latitude = double.tryParse(result['latitude']);
String address = result['address'];
LocationInfo locationInfo = LocationInfo(longitude:longitude,latitude:latitude,address:address,);
if (!completer.isCompleted) {
completer.complete(locationInfo);
}
}
});
amapLocation.startLocation();
return completer.future;
}
}
调用:
///开始定位
void _startLocation() async{
LocationInfo locationInfo = await LocationUtil.fetchLocation();
print('LocationInfo: ${locationInfo.address} ${locationInfo.latitude}');
}
|