我的目标是在Flutter的运行时正确地请求权限。
现在,我遇到 issue#1 ,在应用初始化之前3 to 6 seconds
出现了明显的延迟,而 issue#2 则很简单{{ 1}}方法导致异常。
我期望的是,该应用程序不会跳过帧,也不会导致异常。
问题#1
request()
lib / main.dart
I/Choreographer(19813): Skipped 35 frames! The application may be doing too much work on its main thread
问题#2
import 'package:flutter/material.dart';
import 'package:permission_handler/permission_handler.dart';
// void main() {
// runApp(MyApp());
//}
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: PermissionWidget(),
);
}
}
class PermissionWidget extends StatefulWidget {
@override
_PermissionState createState() => _PermissionState();
}
class _PermissionState extends State<PermissionWidget> {
@override
void initState() {
super.initState();
_listenForPermissionStatus();
}
@override
Widget build(BuildContext context) {
return SafeArea(
child: Text('test'),
);
}
void _listenForPermissionStatus() async {
Map<Permission, PermissionStatus> statuses = await [
Permission.microphone,
Permission.storage,
].request();
}
}
编辑前:lib / main.dart
Exception has occurred.
PlatformException (PlatformException(PermissionHandler.PermissionManager, A request for permissions is already running, please wait for it to finish before doing another request (note that you can request multiple permissions at the same time)., null))
编辑#1:lib / main.dart
...
...
void _listenForPermissionStatus() {
Permission.microphone.request();
Permission.storage.request();
}
}
原来是Exception暂停了该方法,如果我错了,请纠正我。我使用...
...
void _listenForPermissionStatus() async {
await [
Permission.microphone,
Permission.storage,
].request();
}
}
和async
对其进行了修复,但是由于the tutorial使用await