Flutter相机快速开发(拍照,录视频,扫描二维码)-代码量极少的开源库

最近在写纯净flutter的相机功能,但是发现flutter官方的相机库还是需要很多需要封装的东西,所以就写成了一个开源库。

PS:拍照加水印的功能正在筹备开发ing

首先引入依赖

flutter_camerax:
    git:
      url: https://github.com/cgztzero/FlutterCameraX.git

1.第一步创建一个相机Controller,之后相机所有的操作都是通过Controller来执行

final CameraXController _controller = CameraXController();

2.第二步在页面中创建相机预览widget,并和Controller绑定,相机预览的widget默认支持双指缩放

CameraPreviewWidget(
  cameraController: _controller,
  cameraOption: CameraOption(camera: CameraType.back),//相机参数,可以不设置
  width: 100,//预览的宽高,基本上可以不设置,规则跟Container一样
  height: 100,
  cameraCallBack: (int? code, String? message) {
     //相机错误的回调,可以不设置           
  },
  //切换摄像头,初始化等耗时操作的loading,可以自定义   
  loadingWidget: const SizedBox(
     width: 50,
     height: 50,
     child: CircularProgressIndicator(),
  ),   
)

3.之后就可以通过Controller进行相关操作了,Controller可以通过引用在任何widget中进行操作
拍照功能

_button(
 text: 'TakePicture',
 onTap: () async {
   final image = await _controller.takePicture();
   debugPrint('image file path:${image?.path}');
   },
)

录像功能

if (_controller.isRecording()) {
 _controller.stopRecording();
} else {
 _controller.startVideoRecording(
   max: 60,//视频录制最长时间,单位秒,不设置则没有限制 
   onRecordFinish: (file) => debugPrint('video file path:${file.path}'),
 );
}

切换摄像头

_button(text: 'switch', onTap: () => _controller.switchCamera()),

相机一些初始化参数,基础开发可以不传,可以使用默认的就行

CameraOption(
  camera: CameraType.back,//摄像头类型 默认back
  resolutionPresetType: ResolutionPresetType.veryHigh,//图片质量 默认high
  enableAudio: true,//是否可以录音 默认false
  flashType: FlashType.auto,//闪光灯 默认auto
)

扫描二维码功能只需要在widget中新增一个回调即可

CameraPreviewWidget(
  cameraController: _controller,
  onScanSuccess: (list) {
    //遍历List即可,因为一张图片里可能有多个二维码
    for (var barcode in list) {
      //value是二维码的内容,boundingBox是二维码图片的坐标
      debugPrint('barcode value:${barcode.value} - box:${barcode.boundingBox}');
    }
  },
)

也可以用Controller暂停/开启预览

_controller.pausePreview();
_controller.resumePreview();

封装后flutter相机开发的代码量瞬间下降了不少,而且Controller和Widget进行了拆分,使得功能和布局也解耦了。

最后是GitHub地址:https://github.com/cgztzero/FlutterCameraX

欢迎各位多多交流,多多提bug和需求~~

寒冬中抱团取暖,如果北京有合适的flutter或者Android岗位麻烦各位同学可以帮忙推荐~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容