我有一个使用软件包location
的项目。一切正常,只有一个小问题:当应用程序首次运行并要求位置许可(使用对话框)并且用户接受时,flutter上的代码不会继续执行。
这里是代码:
@override
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) async {
try {
await Provider.of<TurnActiveProvider>(context, listen: false)
.connectSocket();
} catch (error) {
Provider.of<ErrorProvider>(context, listen: false)
.showError(context, error, _scaffold);
}
setState(() {
_isLoadingSocket = false;
});
});
}
此提供者行:
await Provider.of<TurnActiveProvider>(context, listen: false)
.connectSocket();
调用并激活一个socketio客户端并获取用户坐标。系统显示对话框询问许可权,用户单击ALLOW并输入最终代码:
setState(() {
_isLoadingSocket = false;
});
永远不会执行,因此屏幕上会永远显示一个CircularProgressIndicator(因为_isLoadingSocket标志永远不会更改)。如果我重新启动应用程序,则可以正常工作。任何帮助吗?
问题仍然存在。但是,我找到了解决方案,并要求在任何其他事情之前获得权限。