我试图在主应用程序开始时获得用户许可,但我得到了异常。
void main() async {
final permission = Permission.manageExternalStorage.request();
if (await permission.isGranted){
}
错误:
<块引用>发生异常。 _CastError(对空值使用空检查运算符)
答案 0 :(得分:1)
查看下面的代码,我认为它可以解决您的问题,我对其进行了测试并为我工作。它没有在 main() 中获取权限,而是使用有状态小部件 MyApp,尝试在 initState() 中获取权限,使用异步函数 _getPermission() 等待用户的响应并使用 setState() 更新 _permission 成员中的权限授予状态。
在 build 方法中,您可以决定在授予与否的情况下您的应用应该做什么。在这个例子中,我只根据权限输出一条消息。例如,您可以在获得授权后返回 MaterialApp,如果没有,则返回一条警告消息,任何您喜欢的内容。
您可能已经意识到这一点,但还有一件事:如果用户永久拒绝许可,此解决方案将不会再次提示,因此您必须处理这种情况,如果您的应用程序没有这个就无法运行,您可以向用户提供进入设置并在那里启用它。
import 'package:flutter/material.dart';
import 'package:permission_handler/permission_handler.dart';
void main() {
WidgetsFlutterBinding.ensureInitialized();
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({Key? key}) : super(key: key);
@override
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
bool _permission = false;
void _getPermission() async {
final grant = await Permission.camera.request().isGranted;
setState(() {
_permission = grant;
});
}
@override
void initState() {
_getPermission();
super.initState();
}
@override
Widget build(BuildContext context) {
String message =
_permission ? 'Permission granted' : 'Permission not granted';
return MaterialApp(home: Scaffold(body: Center(child: Text(message))));
}
}
答案 1 :(得分:0)
我不知道你用哪个包来处理权限,但是如果你使用this,你必须在isGranted之前添加request() :
if (await Permission.manageExternalStorage.request().isGranted) {
}
或者,如果您只想获得许可状态而无需请求:
var status = await Permission.manageExternalStorage.status;
if (status.isDenied) {
}