题记
—— 执剑天涯,从你的点滴积累开始,所及之处,必精益求精。

github? 测试源码在这里 百度同步
CSDN 网易云课堂教程 掘金
知乎 Flutter系列文章 头条同步

实际项目开发中,谷歌官方推荐的几个相机插件总是满足不了需要,更令人不舒服的是在华为某些高版本系列的手机中使用系统相机拍照或者是选择照片会让应用闪退。

小编也分析了原因,在这些手机拍照的照片过大,在手机相机拍完的那一瞬间,手机系统还没有处理完照片,然后应用就去读取这个照片,导致系统异常崩溃。

至本插件编写的 0.0.1 版本时,各相机应用插件都未修复其兼容性,以小编的性格,那就是再造个轮子,于是乎 本插件就诞生了。

0.0.1 版本 只支持 Android (已发布 2020-09-09)
0.0.3 版本 同时支持 iOS (已发布 2020-09-12)
0.0.5 版本 自定义相机 同时支持 iOS (已发布 2020-09-15)

0.0.5 版本的功能修复
iOS平台的图片资源策略修改


本插件实现的最终目标​:

  • 1、调用原生默认的自定义相机

  • 2、调用原生的系统相机、相册选择图片

  • 3、拍照或者选择照片后 调用 系统裁剪(自定义)功能

  • 4、在 Flutter Widget 中嵌入 自定义相机,允许使用 Widget 开发的页面布局来操作相机


如下图是默认情况下自定义相机的页面效果:


1 添加依赖

小编以将这个自定义相机封装成一个插件组件,直接使用flutter_custom_camera_pugin插件就可使用,一般小编的作风就是提供两种集成方式如下:

通过pub仓库添加依赖,代码如下:最新版本查看这里

  dependencies:flutter_custom_camera_pugin: ^0.0.1

或者是通过 github 点击查看github方式添加依赖,代码如下:

dependencies:shake_animation_widget:git:url: https://github.com/zhaolongs/FlutterCustomCameraPugin.gitref: master

然后加载依赖,代码如下:

flutter pub get

然后在使用的地方导包,代码如下:

import 'package:flutter_custom_camera_pugin/flutter_custom_camera_pugin.dart';

2 打开自定义相机 拍照

你可以使用 FlutterCustomCameraPugin 的 openCamera 方法来打开自定义相机拍照页面,其中 可选参数 cameraConfigOptions 用来配置自定义相机页面的的按钮是否显示,如下代码清单 2-1:

  ///代码清单 2-1 ///打开相机void openCamera() async {CameraConfigOptions options = new CameraConfigOptions();///默认自定义相册是否显示 相册切换options.isShowSelectCamera = true;///默认自定义相册是否显示 前后镜头切换options.isShowPhotoAlbum = true;///默认自定义相册是否显示 闪光灯开关按钮options.isShowFlashButtonCamera = true;///调起自定义相机///拍照的返回结果CameraResultInfo resultInfo =await FlutterCustomCameraPugin.openCamera(cameraConfigOptions: options);if (resultInfo.code == 200) {imageFile = new File(resultInfo.data["lImageUrl"]);}else if (resultInfo.code == 201) {///201 是拍照取消 如点击了关闭按钮 ///或者是 Android 手机的后退按钮}setState(() {});}

CameraConfigOptions 用来配置相机参数,如下所示:

/// 相册配置使用参数
class CameraConfigOptions {///0.0.1 版本 ///默认自定义相册是否显示 相册切换bool isShowPhotoAlbum = true;///默认自定义相册是否显示 前后镜头切换bool isShowSelectCamera = true;///默认自定义相册是否显示 闪光灯开关按钮bool isShowFlashButtonCamera = true;}

CameraResultInfo 是拍照或者相册选择结果封闭,拍照成功、拍照取消、相册选择成功、相册选择失败均会回调:

class CameraResultInfo {///消息标识 int code;///回调的消息String message ='';///回调的数据dynamic data ;///回调的方法名String method ='';
}

3 打开 相册选择照片

  ///打开相册void openPhotoAlbum() async {/// 相册的选择返回结果/// 选择成功与取消都会回调CameraResultInfo resultInfo =await FlutterCustomCameraPugin.openPhotoAlbum();if (resultInfo.code == 200) {imageFile = new File(resultInfo.data["lImageUrl"]);}}

4 打开一个弹框选择

 void openSystemAlert() async {/// 相册的选择返回结果/// 选择成功与取消都会回调CameraResultInfo resultInfo =await FlutterCustomCameraPugin.openSystemAlert();if (resultInfo.code == 200) {imageFile = new File(resultInfo.data["lImageUrl"]);}setState(() {});}

本公众号会首发系列专题文章,付费的视频课程会在公众号中免费刊登,在你上下班的路上或者是睡觉前的一刻,本公众号都是你浏览知识干货的一个小选择,收藏不如行动,在那一刻,公众号会提示你该学习了。

Flutter自定义相机,Flutter相册选择照片相关推荐

  1. 安卓开发———打开相机拍照或者打开相册选择照片并显示出来

    打开相机 布局代码 <Buttonandroid:id="@+id/take_photo"android:layout_width="match_parent&qu ...

  2. android打开相机拍照及打开相册选择照片

    照相机拍照 Intent intent = new Intent();intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);// 照相机拍照// 需要说明 ...

  3. Android系统相机拍照与选择照片

    拍照与选择照片 // 拍摄照片private val takePicturePreview =registerForActivityResult(ActivityResultContracts.Tak ...

  4. Android中使用相机和相册获取照片,模仿朋友圈发说说

    话不多说,直接上图,如图: 这个功能相信很多人都会用到,下面来一步一步的设置这个功能. 1:首先布局我们的主界面,这里我使用activity_edit_diary.xml文件来当布局文件: 文件内容如 ...

  5. iOS 仿微信相册选择照片imagePicker(Swift) 序号 预览缩略图

    序:微信最新版,选择照片控件细节有所改变,一般有轮子我是不会从新造的 .产品要求一模一样,无奈重新写.调查了一下,GitHub大部分仿微信imagePicker还是基于TZImagePicker,sw ...

  6. android 手机拍照、相册选择照片并显示

    关键代码: public class MainActivity extends AppCompatActivity implements View.OnClickListener {private B ...

  7. Flutter调用原生相机和相册选择并使用Dio3上传到服务器

    用到的组件 dio: ^3.0.2image_picker: ^0.6.0+9 ios需要在info.list加入 <key>NSPhotoLibraryUsageDescription& ...

  8. 解决Android自定义相机预览和照片分辨率差异的问题

    两种解决方式:1.找到和屏幕分辨率最匹配的PictureSize和PreviewSize(本文使用这种方式) 2.先取比屏幕分辨率大的PreviewSize和PictureSize最后生成图片的时候按 ...

  9. 在APP中的那些图片上传是如何做的?PictureSelector—一个强大的图片选择器。相机和相册选择分开

    文章目录

最新文章

  1. 分享一个基于 Shiro 的权限管理系统,亮点是支持 restful 风格 URL.
  2. 【福利】快来参与抽奖获得《C语言程序设计》
  3. 数据分析软件python 对电脑的要求-数据分析5大软件PK,你最爱哪个?
  4. java try嵌套
  5. 线程了解以及创建线程的Threading模块中的部分方法
  6. linux 定时任务
  7. 基于享元记忆的 Boost.Flyweight 示例
  8. codevs 1043 方格取数 2000年NOIP全国联赛提高组
  9. asp.net core的TagHelper简单使用
  10. Android:屏幕自适应
  11. c语言文件包含试题,C语言文件练习题含答案
  12. WordPress简约昼夜切换导航NDNAV主题模板
  13. 关于C语言从键盘输入内容到数组
  14. 分治策略-股票获取最大收益-最大子数组问题
  15. onfocus获取焦点事件与onblur失去焦点事件
  16. mybatis-plus乐观锁重试机制配置重置次数
  17. 如何检测计算机主板的好坏,主机电源怎么测试好坏
  18. PHP代码审计16—ThinkPHP代码审计入门
  19. java 日历工具_【Java】太强了,这款开源日历工具库堪称神器!
  20. c语言中哪个是错误的常量,以下所列的C语言常量中,错误的是__________ 。

热门文章

  1. 「附身」马云、恶搞特朗普,AI新应用助你上演「大咖模仿秀」
  2. 速度提升一倍,无需实例掩码预测即可实现全景分割
  3. 我对计算机网络的期待,表白对女朋友说的情话短句 我愿是你最期待的风景线...
  4. 0基础自学Python,有哪些避坑经验?
  5. 画手cv什么意思_lt;3招gt;助你搞定工科出国留学申请简历(CV)!
  6. 计算机视觉,凉了?!
  7. 收藏 | 深度学习不确定性量化: 技术、应用与挑战
  8. TensorFlow官方教程翻译:TensorFlow调试器
  9. kali linux中文乱码解决,kali-google-chrome中文乱码问题解决方法
  10. php极差平级,平行志愿有级差吗志愿极差是什么