我正在构建我的第一个 Flutter 应用程序,但遇到了一些异步问题。
当我的应用程序执行时,我希望它请求权限并等待它们被授予。我的 main() 函数如下所示:
import 'permission_manager.dart' as Perm_Manager;
void main() async
{
//Ensure valid permissions
Perm_Manager.Permission_Manager pm = Perm_Manager.Permission_Manager();
var res = await pm.get_permissions();
print(res);
return runApp(MyApp());
}
Permission Manager 类的 get_permissions() 函数使用 Flutter Simple Permissions 包来检查和请求权限。
import 'package:simple_permissions/simple_permissions.dart';
import 'dart:io' as IO;
import 'dart:async';
class Permission_Manager {
/* Get user permissions */
Future<bool> get_permissions() async
{
//Android handler
if (IO.Platform.isAndroid)
{
//Check for read permissions
SimplePermissions.checkPermission(Permission.ReadExternalStorage).then((result)
{
//If granted
if (result)
return true;
//Otherwise request them
else
{
SimplePermissions.requestPermission(Permission.ReadExternalStorage)
.then((result)
{
// Determine if they were granted
if (result == PermissionStatus.authorized)
return true;
else
IO.exit(0); //TODO - display a message
});
}
});
}
else
return true;
}
}
当我运行应用程序时,它不会等待函数按预期完成,而是在 Future 更新之前打印“res”的值。
Launching lib\main.dart on Android SDK built for x86 in debug mode...
Built build\app\outputs\apk\debug\app-debug.apk.
I/SimplePermission(15066): Checking permission : android.permission.READ_EXTERNAL_STORAGE
I/flutter (15066): null
I/SimplePermission(15066): Requesting permission : android.permission.READ_EXTERNAL_STORAGE
Future 在函数中途返回一个值!有谁知道我做错了什么?
最佳答案
要等待某些东西,您必须在未来调用 await
关键字而不是 .then
final result = await future;
// do something
而不是
future.then((result) {
// do something
});
如果你真的想要使用.then
那么你可以等待生成的future:
await future.then((result) {
// do something
});
只需确保在使用嵌套异步调用时在每个调用上都使用 async 关键字:
await future.then((result) async{
// do something
await future.then((result_2) {
// do something else
});
});
关于dart - flutter/Dart 异步不等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53632137/
相关文章:
android - 如何在没有 Android Studio 的情况下使用模拟器在 VS 代码中安装
intellij-idea - 如何在 IntelliJ 中自动完成/导入 Flutter 类?
android - Flutter - 多选 ListView
firebase - Flutter:取消 Google 登录流程时出现平台异常
flutter - 永久持久的 Bottom Sheet flutter
proxy - 企业防火墙后面的 Flutter 应用程序在获取包期间引发 TLS 错误
ios - 如何在 Flutter 中隐藏导航栏(在 iPhone X 上)