Dart
import 'package:device_info_plus/device_info_plus.dart';
import 'package:permission_handler/permission_handler.dart';
Future<bool> storagePermission() async {
final DeviceInfoPlugin info =
DeviceInfoPlugin(); // import 'package:device_info_plus/device_info_plus.dart';
final AndroidDeviceInfo androidInfo = await info.androidInfo;
final int androidVersion = int.parse(androidInfo.version.release);
bool havePermission = false;
// Here you can use android api level
// like android api level 33 = android 13
// This way you can also find out how to request storage permission
if (androidVersion >= 13) {
final request = await [
// Permission.videos,
// Permission.photos,
Permission.audio,
Permission.storage
//..... as needed
].request(); //import 'package:permission_handler/permission_handler.dart';
havePermission =
request.values.every((status) => status == PermissionStatus.granted);
} else {
final status = await Permission.storage.request();
havePermission = status.isGranted;
}
if (!havePermission) {
// if no permission then open app-setting
await openAppSettings();
}
return havePermission;
}
AndroidManifest.xml
XML
<!-- for below android 13-->
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" tools:ignore="ScopedStorage" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- for above android 13-->
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />