@override
void initState() {
super.initState();
_type = widget.type;
WidgetsBinding.instance.addPostFrameCallback((call) async {
/// !注意: 只要是返回Future的方法, 一律使用`await`修饰, 确保当前方法执行完成后再执行下一行,
/// 在不能使用`await`修饰的环境下, 在`then`方法中执行下一步.
/// 初始化 iOS在init方法中设置, android需要去AndroidManifest.xml里去设置, 详见 https://lbs.amap.com/api/android-sdk/gettingstarted
if (Platform.isIOS) {
LogUtil.e('', tag: 'IOS初始化高德地图API:');
await AMapLocationClient.setApiKey('这是appKey').then((boo){
LogUtil.e('$boo', tag: 'IOS初始化高德地图API返回值:');
});
}
// 单次定位
if (await _requestPermission()) {
//先启动一下
bool boo = await AMapLocationClient.startup(new AMapLocationOption(
desiredAccuracy: CLLocationAccuracy.kCLLocationAccuracyHundredMeters));
LogUtil.e('$boo', tag: '启动高德地图API返回值:');
// 直接获取定位:
// await AMapLocationClient.getLocation(true);
// 监听定位
AMapLocationClient.onLocationUpate.listen((AMapLocation loc) {
LogUtil.e('$mounted', tag: 'IOS初始化高德地图API - mounted:');
LogUtil.e('$loc', tag: 'IOS初始化高德地图API - loc:');
if (!mounted) return;
setState(() {
_location = loc;
});
});
AMapLocationClient.startLocation();
} else {
Utils.showToast('定位失败!');
}
});
}
iOS环境下完全没有执行到监听,android环境没有问题。是不是我哪里少了配置。
采用直接获取定位也是获取不到位置信息的
AMapLocationClient.getLocation(true).then((AMapLocation loc) {
LogUtil.e('$mounted', tag: '高德地图API - mounted:');
LogUtil.e('$loc', tag: '高德地图API - loc:');
if (!mounted) return;
setState(() {
_location = loc;
});
});