【Flutter之打开系统相册,拍照,剪裁】

准备工作

(1)添加依赖
 image_picker: ^0.6.4
 image_cropper: ^1.2.1

Android

建议添加上这些权限在清单文件下:

 <uses-permission android:name="android.permission.INTERNET"/>
 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
  <uses-permission android:name="android.permission.CAMERA"/>

在application标签下添加:

 <activity
            android:name="com.yalantis.ucrop.UCropActivity"
            android:screenOrientation="portrait"
            android:theme="@style/Theme.AppCompat.Light.NoActionBar"/>

PS:测试发现,我们是不需要动态申请权限的,image_picker 插件都给封装进去了,使用的时候,它会自动去申请权限。

ios

需要在 Info.plist 下添加:

   <key>NSPhotoLibraryUsageDescription</key>
    <string>Example usage description</string>
    <key>NSCameraUsageDescription</key>
    <string>Example usage description</string>
	<key>CFBundleDevelopmentRegion</key>

如何使用:

这里直接上代码,关键处已做说明:

//弹出底部菜单
void _showBottomMenu(BuildContext context) {
    showModalBottomSheet(
        context: context,
        //isScrollControlled: true,//设为true,此时为全屏展示

        builder: (BuildContext context) {
          return Container(
            color: Colors.white,
            height: 180,
            child: Column(
              mainAxisAlignment: MainAxisAlignment.spaceAround,
              crossAxisAlignment: CrossAxisAlignment.center,
              children: <Widget>[
                ListTile(
                  title: Text('拍照',
                      textAlign: TextAlign.center,
                      style: TextStyle(
                          fontSize: KDimens.font_sp16,
                          color: KColors.colorAccent)),
                  onTap: () {
                    _takePhoto();
                    Navigator.pop(context);
                  },
                ),
                Divider(
                  height: 1,
                ),
                ListTile(
                  title: Text('相册',
                      textAlign: TextAlign.center,
                      style: TextStyle(
                          fontSize: KDimens.font_sp16,
                          color: KColors.colorAccent)),
                  onTap: () {
                    _openPhotoAlbum();
                    Navigator.pop(context);
                  },
                ),
                Container(
                  color: KColors.divider,
                  height: 10,
                ),
                ListTile(
                  title: Text('取消',
                      textAlign: TextAlign.center,
                      style: TextStyle(
                          fontSize: KDimens.font_sp16, color: KColors.gray_33)),
                  onTap: () {
                    Navigator.pop(context);
                  },
                ),
              ],
            ),
          );
        });
  }

  File _image;

  ///拍照
  Future _takePhoto() async {
    var image = await ImagePicker.pickImage(source: ImageSource.camera);

    setState(() {
      _cropImage(image);
    });
  }

  ///打开相册
  Future _openPhotoAlbum() async {
    var image = await ImagePicker.pickImage(source: ImageSource.gallery);
    setState(() {
      _cropImage(image);
    });
  }

//剪裁
  _cropImage(File imageFile) async {
    File croppedFile = await ImageCropper.cropImage(
      sourcePath: imageFile.path,
      aspectRatioPresets: [
        CropAspectRatioPreset.square,
        CropAspectRatioPreset.ratio3x2,
        CropAspectRatioPreset.original,
        CropAspectRatioPreset.ratio4x3,
        CropAspectRatioPreset.ratio16x9
      ],
      androidUiSettings: AndroidUiSettings(
          toolbarTitle: '剪裁图片',
          toolbarColor: Colors.white,
          toolbarWidgetColor: Colors.black,
          initAspectRatio: CropAspectRatioPreset.original,
          lockAspectRatio: false),
      iosUiSettings: IOSUiSettings(
        minimumAspectRatio: 1.0,
      ),
    );

    if (croppedFile != null) {
      setState(() {
        _image = croppedFile;
      });
    }
  }

依赖地址:

image_picker
image_cropper
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值