flutter_vant_kit
flutter_vant_kit copied to clipboard
ImageWall 的文档需要完善
ImageWall 的文档需要提醒在 iOS android 端申请权限。处理权限相关的逻辑
下面是我除了权限的逻辑,感觉应该有更好的方法。
<key>NSPhotoLibraryUsageDescription</key>
<string>photos</string>
<key>NSCameraUsageDescription</key>
<string></string>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.CAMERA"/>
import 'package:permission_handler/permission_handler.dart';
import 'package:flutter_vant_kit/theme/style.dart' as VantStyle;
_inspectPermission() async {
if (Platform.isIOS) {
var status = await Permission.photos.status;
if (!status.isGranted) {
return;
}
status = await Permission.camera.status;
if (!status.isGranted) {
return;
}
setState(() {
_permissionVerify = true;
});
} else if (Platform.isAndroid) {
var status = await Permission.storage.status;
if (!status.isGranted) {
return;
}
status = await Permission.camera.status;
if (!status.isGranted) {
return;
}
setState(() {
_permissionVerify = true;
});
}
}
_requestPermission(context) async {
if (Platform.isIOS) {
Map<Permission, PermissionStatus> statuses = await [
Permission.photos,
Permission.camera,
].request();
if (!(statuses[Permission.photos].isGranted &&
statuses[Permission.camera].isGranted)) {
showDialog(
context: context,
builder: (_) {
return NDialog(
title: "申请权限",
message: "设置LOGO和分享封面,需要您授权使用相册和相机权限。",
showCancelButton: true,
onConfirm: () {
openAppSettings();
},
);
},
);
}
} else if (Platform.isAndroid) {
Map<Permission, PermissionStatus> statuses = await [
Permission.storage,
Permission.camera,
].request();
if (!(statuses[Permission.storage].isGranted &&
statuses[Permission.camera].isGranted)) {
showDialog(
context: context,
builder: (_) {
return NDialog(
title: "申请权限",
message: "设置LOGO和分享封面,需要您授权使用存储和相机权限。",
showCancelButton: true,
onConfirm: () {
openAppSettings();
},
);
},
);
}
}
_inspectPermission();
}
大概的过程: 因为 ImageWall 没有找到合适的方法处理权限,所以写了一个一样的按钮。
_widget = Container(
padding: VantStyle.Style.imageWallPadding,
child: Wrap(
direction: Axis.horizontal,
spacing: VantStyle.Style.imageWallItemGutter,
runSpacing: VantStyle.Style.imageWallItemGutter,
children: [
InkWell(
child: Container(
width: VantStyle.Style.imageWallItemSize,
height: VantStyle.Style.imageWallItemSize,
decoration: BoxDecoration(
border: Border.all(
color: VantStyle.Style.imageWallUploadBorderColor,
),
borderRadius: BorderRadius.circular(
VantStyle.Style.imageWallItemBorderRadius,
),
),
child: Icon(
Icons.add,
color: VantStyle.Style.imageWallUploadColor,
size: VantStyle.Style.imageWallUploadSize,
),
),
onTap: () {
_requestPermission(context);
},
),
],
),
);
进入页面 initState
方法 调用 _inspectPermission()
检查权限。
当 bool _permissionVerify = false;
时,在本应该放置 ImageWall 的位置,放置一个和它长的一样的按钮,点击调用 _requestPermission()
询问授权。
授权成功了将假的 ImageWall
替换成真的。
如果授权有问题,就询问是否进入设置页面。
大概是这个逻辑。希望有人能提供一个更加舒服的方法。