【发布时间】:2020-09-18 06:07:41
【问题描述】:
第一次出现屏幕时,我想检查是否启用了用户 GPS 并授予了位置权限。然后,如果其中一个不满足,我会显示对话框以打开应用设置。
源代码
_initPermission(BuildContext context) async {
final geolocationStatus = await commonF.getGeolocationPermission();
final gpsStatus = await commonF.getGPSService();
if (geolocationStatus != GeolocationStatus.granted) {
showDialog(
context: context,
builder: (ctx) {
return commonF.showPermissionLocation(ctx);
},
);
} else if (!gpsStatus) {
showDialog(
context: context,
builder: (ctx) {
return commonF.showPermissionGPS(ctx);
},
);
}
}
然后我在 initState 中这样调用这个函数:
初始化状态
void initState() {
super.initState();
Future.delayed(Duration(milliseconds: 50)).then((_) => _initPermission(context));
}
问题是,每次屏幕出现时都会给我这样的错误:
错误
[ERROR:flutter/lib/ui/ui_dart_state.cc(166)] Unhandled Exception: Looking up a deactivated widget's ancestor is unsafe.
At this point the state of the widget's element tree is no longer stable.
To safely refer to a widget's ancestor in its dispose() method, save a reference to the ancestor by calling dependOnInheritedWidgetOfExactType() in the widget's didChangeDependencies() method.
我做了什么:
- 像这样改变 InitState
//1
WidgetsBinding.instance.addPostFrameCallback((_) {
_initPermission(context);
});
//2
SchedulerBinding.instance.addPostFrameCallback((_) => _initPermission(context));
//3
Timer.run(() {
_initPermission(context);
})
- 为脚手架添加全局键
final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
Scaffold(
key: _scaffoldKey,
- 搜索与我类似的问题
我做的结果什么都没有,第一次出现的时候还是出现错误。
但奇怪的是,这只发生在第一次出现屏幕时。当我执行 热重启 时,错误消息消失了。
[第一次出现屏幕失败]
[热重启,错误消失]
【问题讨论】:
标签: flutter