flutter_vant_kit icon indicating copy to clipboard operation
flutter_vant_kit copied to clipboard

ImageWall 的文档需要完善

Open GuoDapeng opened this issue 4 years ago • 0 comments

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 替换成真的。 如果授权有问题,就询问是否进入设置页面。

大概是这个逻辑。希望有人能提供一个更加舒服的方法。

GuoDapeng avatar May 12 '20 09:05 GuoDapeng