如何在Flutter中在运行时正确地请求权限?

时间:2020-07-12 05:54:15

标签: flutter dart

我的目标是在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

,因此我不确定自己是否正确执行了操作

0 个答案:

没有答案
相关问题