Top*_*zoo 5 future async-await dart flutter
我正在构建我的第一个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());
}
Run Code Online (Sandbox Code Playgroud)
权限管理器类的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;
}
}
Run Code Online (Sandbox Code Playgroud)
当我运行该应用程序时,它不会等待功能按预期完成,并会在更新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
Run Code Online (Sandbox Code Playgroud)
Future在函数中途返回一个值!有人知道我在做什么错吗?
为了等待,您必须await在将来调用关键字,而不是.then
final result = await future;
// do something
Run Code Online (Sandbox Code Playgroud)
代替
future.then((result) {
// do something
});
Run Code Online (Sandbox Code Playgroud)
如果您真的想使用,.then则可以等待生成的将来:
await future.then((result) {
// do something
});
Run Code Online (Sandbox Code Playgroud)
只要确保在使用嵌套异步调用时在每个异步调用上使用async关键字即可:
await future.then((result) async{
// do something
await future.then((result_2) {
// do something else
});
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3862 次 |
| 最近记录: |