#flutter #dart #permissions #android-permissions
#сбой #сбой при открытии потока READ_EXTERNAL_STORAGE #разрешения #android-разрешения
Вопрос:
Я получаю эту ошибку, когда нахожусь в приложении. Простое нажатие на пустое место также выводит это на консоль.
W/ClipData( 7375): Failure opening stream
W/ClipData( 7375): java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaProvider uri content://media/external/file/119902 from pid=7375, uid=10423 requires android.permission.READ_EXTERNAL_STORAGE, or grantUriPermission()
W/ClipData( 7375): at android.os.Parcel.createException(Parcel.java:1950)
W/ClipData( 7375): at android.os.Parcel.readException(Parcel.java:1918)
W/ClipData( 7375): at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:183)
W/ClipData( 7375): at android.database.DatabaseUtils.readExceptionWithFileNotFoundExceptionFromParcel(DatabaseUtils.java:146)
W/ClipData( 7375): at android.content.ContentProviderProxy.openTypedAssetFile(ContentProviderNative.java:698)
W/ClipData( 7375): at android.content.ContentResolver.openTypedAssetFileDescriptor(ContentResolver.java:1460)
W/ClipData( 7375): at android.content.ContentResolver.openTypedAssetFileDescriptor(ContentResolver.java:1404)
W/ClipData( 7375): at android.content.ClipData$Item.coerceToText(ClipData.java:351)
W/ClipData( 7375): at io.flutter.plugin.platform.PlatformPlugin.getClipboardData(PlatformPlugin.java:278)
W/ClipData( 7375): at io.flutter.plugin.platform.PlatformPlugin.access$700(PlatformPlugin.java:24)
W/ClipData( 7375): at io.flutter.plugin.platform.PlatformPlugin$1.getClipboardData(PlatformPlugin.java:81)
W/ClipData( 7375): at io.flutter.embedding.engine.systemchannels.PlatformChannel$1.onMethodCall(PlatformChannel.java:141)
W/ClipData( 7375): at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:230)
W/ClipData( 7375): at io.flutter.embedding.engine.dart.DartMessenger.handleMessageFromDart(DartMessenger.java:85)
W/ClipData( 7375): at io.flutter.embedding.engine.FlutterJNI.handlePlatformMessage(FlutterJNI.java:692)
W/ClipData( 7375): at android.os.MessageQueue.nativePollOnce(Native Method)
W/ClipData( 7375): at android.os.MessageQueue.next(MessageQueue.java:326)
W/ClipData( 7375): at android.os.Looper.loop(Looper.java:160)
W/ClipData( 7375): at android.app.ActivityThread.main(ActivityThread.java:6854)
W/ClipData( 7375): at java.lang.reflect.Method.invoke(Native Method)
W/ClipData( 7375): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
W/ClipData( 7375): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:860)
Я пытался использовать пакет Permissin_Handler следующим образом;
Future<bool> permissionGetter(BuildContext context) async {
if (await Permission.contacts.request().isGranted) {
return true;
}
Map<Permission, PermissionStatus> statuses = await [
Permission.storage,
].request();
print(statuses[Permission.location]);
return false;
}
Из этого FutureBuilder;
@override
Widget build(BuildContext context) {
SizeConfig().init(context);
return FutureBuilder(
future: permissionGetter(context),
builder: (context, builder){
print(builder);
if(builder.connectionState == ConnectionState.done){
print(builder);
return MaterialApp(
initialRoute: RegisterScreen.id,
routes: {
RegisterScreen.id: (context) => RegisterScreen(),
LoginScreen.id: (context) => LoginScreen()
},
);
}
return Text("HIII");
},
);
}
Но print(builder)
дает мне только эти две строки;
(перед инструкцией if)
I/flutter ( 7375): AsyncSnapshot<bool>(ConnectionState.waiting, null, MissingPluginException(No implementation found for method requestPermissions on channel flutter.baseflow.com/permissions/methods))
(в инструкции if)
I/flutter ( 7375): AsyncSnapshot<bool>(ConnectionState.done, null, MissingPluginException(No implementation found for method requestPermissions on channel flutter.baseflow.com/permissions/methods))
Также в настоящее время я не использую локальное хранилище, но в будущем я планирую. Как я могу получить разрешение и решить эту проблему?