Моя цель - правильно запрашивать разрешения во время выполнения во Flutter.
Прямо сейчас я столкнулся с проблемой # 1 , значительная задержка 3 to 6 seconds
перед инициализацией приложения и проблема # 2 , простой метод request()
вызывает исключение.
Я ожидал, что приложение не пропускает кадры и не вызывает исключение.
проблема # 1
I/Choreographer(19813): Skipped 35 frames! The application may be doing too much work on its main thread
lib / main.dart
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();
}
}
проблема # 2
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))
перед редактированием: lib / main.dart
...
...
void _listenForPermissionStatus() {
Permission.microphone.request();
Permission.storage.request();
}
}
редактировать # 1: lib / main.dart
...
...
void _listenForPermissionStatus() async {
await [
Permission.microphone,
Permission.storage,
].request();
}
}
Оказывается, исключение приостановило метод, пожалуйста поправьте меня, если я ошибаюсь. Я использую async
и await
, чтобы исправить это, но я не уверен, правильно ли я делаю это, поскольку учебник использует Map<Permission, PermissionStatus>