Я создаю свое первое приложение 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());
}
Функция get_permissions () класса Permission Manager использует пакет 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;
}
}
КогдаЯ запускаю приложение, оно не ждет, пока функция завершит работу, как предполагалось, и печатает значение «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 возвращает значение в середине функции!Кто-нибудь знает, что я делаю не так?