flutter系列之:在flutter中使用相机拍摄照片-世界今亮点 - 综合 -

当前位置:首页  >  综合  > 正文

flutter系列之:在flutter中使用相机拍摄照片-世界今亮点

flutter系列之:在flutter中使用相机拍摄照片-世界今亮点
2023-04-04 19:36:33 来源:博客园
目录简介使用相机前的准备工作在flutter中使用camera总结简介

在app中使用相机肯定是再平常不过的一项事情了,相机肯定涉及到了底层原生代码的调用,那么在flutter中如何快速简单的使用上相机的功能呢?

一起来看看吧。

使用相机前的准备工作

flutter中为使用camera提供了一个叫做camera的插件,我们首先需要安装这个插件。


(资料图片)

安装插件的步骤很简单,如下所示:

flutter pub add camera  

该命令会在pubspec.xml中添加下面的内容:

dependencies:  flutter:    sdk: flutter  camera: ^0.10.0+1

除了camera之外,我们还需要对照相机拍摄的照片进行保存,这样我们还需要用到path_provider和path这两个plugin。

我们使用同样的方式对这两个插件进行安装。

安装好之后,我们就可以在flutter中的代码中愉快的使用camera了。

在使用camera之前,我们还需要获取相应的权限信息,比如在IOS中,我们需要在 ios/Runner/Info.plist中添加下面的权限信息:

NSCameraUsageDescriptionflutter需要用到你的照相机

在andorid中需要配合minSdkVersion>=21来使用。

在flutter中使用camera

camera插件为我们提供了一系列的功能来方便camera的使用。

camera的使用需要遵循下面的步骤,因为现在的手机可能会有多个摄像头,所以我们需要通过api获取到可以使用的摄像头列表。

接下来我们使用选中的摄像头,进行一些控制操作,然后需要使用相应的camera视图来展示相应的照相机图像.

最后调用摄像头相关的拍摄功能进行拍摄。

听起来好像挺复杂的,事实上只要遵照上面的顺序,一切都是非常简单的。

首先我们需要获取可用的摄像头列表,这个步骤是通过调用camera包中的availableCameras方法来实现的:

Future> availableCameras() async {  return CameraPlatform.instance.availableCameras();}

availableCameras是一个异步方法,返回的是一个Future对象,其中的值是CameraDescription列表。

CameraDescription是对camera的描述文件:

const CameraDescription({    required this.name,    required this.lensDirection,    required this.sensorOrientation,  });

name是摄像头的名称,lensDirection是摄像头面对的方向,sensorOrientation是传感器的方向,也就说你的手机是正常放置,还是选择90度放置。

因为availableCameras是一个异步方法,所以我们需要把它包裹在一个异步方法中进行调用:

Future main() async {  // 保证所有的插件都加载完毕  WidgetsFlutterBinding.ensureInitialized();  //获取摄像头列表  final cameras = await availableCameras();  //拿到第一个摄像头  final firstCamera = cameras.first;  ....

这里我们拿到了第一个摄像头,注意,这里的firstCamera是一个CameraDescription对象。

因为模拟器上没有摄像头,如果你是在模拟器上运行上面的程序的话,将会抛出下面的异常:

[VERBOSE-2:dart_vm_initializer.cc(41)] Unhandled Exception: Bad state: No element#0      List.first (dart:core-patch/growable_array.dart:343:5)

为了对这个camra进行控制, 我们需要创建一个CameraController对象:

class CameraAppState extends State {  late CameraController _controller;  late Future _initializeControllerFuture;  @override  void initState() {    super.initState();    _controller = CameraController(      widget.camera,      ResolutionPreset.medium,    );    _initializeControllerFuture = _controller.initialize();  }

CameraController的构造函数需要一个CameraDescription对象和分辨率等信息,并且还需要进行初始化,这里我们调用了它的initialize方法。

这里的initialize方法也是一个异步方法。

为了在CameraController初始化之后再对Camera进行使用,我们需要在返回的widget中使用FutureBuilder来构建:

body: FutureBuilder(        future: _initializeControllerFuture,        builder: (context, snapshot) {          if (snapshot.connectionState == ConnectionState.done) {            return CameraPreview(_controller);          } else {            return const Center(child: CircularProgressIndicator());          }        },      )

具体要展示什么内容呢?这里使用的是camera包中自带的CameraPreview组件。

CameraPreview需要传入一个CameraController对象,也就是之前我们创建的对象。

最后就是调用CameraController的方法进行拍照了。我们把拍照的逻辑放在floatingActionButton中,如下所示:

floatingActionButton: FloatingActionButton(        onPressed: () async {          try {            await _initializeControllerFuture;            final image = await _controller.takePicture();            if (!mounted) return;            await Navigator.of(context).push(              MaterialPageRoute(                builder: (context) => DisplayPictureScreen(                  imagePath: image.path,                ),              ),            );          } catch (e) {            print(e);          }        },        child: const Icon(Icons.camera_alt),      )

具体的逻辑就是调用controller.takePicture方法进行拍照。将拍好照的image放在一个新的widget中展示。

总结

摄像头是app中常用的功能,flutter中的camera插件为我们提供了摄像头的控制功能,非常简单。

本文的例子:https://github.com/ddean2009/learn-flutter.git

标签:

(责任编辑:news01)
世界新消息丨民航局:加快国际化人才培养 推进民航高质量发展

世界新消息丨民航局:加快国际化人才培养 推进民航高质量发展

民航局:加快国际化人才培养推进民航高质量发展---人民网北京3月30日电(记者乔雪峰)“当前,面对民航...
03-30 15:57:57
天天看点:吸光度与浓度成比例吗_吸光度与浓度的关系是什么

天天看点:吸光度与浓度成比例吗_吸光度与浓度的关系是什么

1、吸光度与浓度的关系是线性关系。2、当一束光通过一个吸光物质(通常为溶液)时,溶质吸收了光能,光...
03-30 15:06:09
领袖气质!威少赛后与球员/教练组挨个击掌庆祝 还翩翩起舞|世界快看点

领袖气质!威少赛后与球员/教练组挨个击掌庆祝 还翩翩起舞|世界快看点

领袖气质!威少赛后与球员 教练组挨个击掌庆祝还翩翩起舞,威少,关键时刻
03-30 14:09:47
胜为八类网线7.5米到手23.9元:25Gbps高速传输 每日快看

胜为八类网线7.5米到手23.9元:25Gbps高速传输 每日快看

来源:快科技胜为八类网线促销,领券立减,7 5米长度实付到手价是23 9元。这款网线符合ANSI TIA-568-C 2
03-30 13:14:32
中国贸促会:去年大国引发全球经贸摩擦加剧

中国贸促会:去年大国引发全球经贸摩擦加剧

中国贸促会:去年大国引发全球经贸摩擦加剧,欧盟,中欧,赵萍,中资企业,经贸摩擦,中国贸促会,一带一路倡议
03-30 12:12:37
百事通!小米2023米粉节将于4月9日在北京小米科技园举办

百事通!小米2023米粉节将于4月9日在北京小米科技园举办

小米宣布2023米粉节将于4月9日在北京小米科技园召开。重启2023米粉节OPEN+DAY,全网招募500位米粉,获得...
03-30 11:05:10
德业股份3月30日快速上涨 环球速看

德业股份3月30日快速上涨 环球速看

以下是德业股份在北京时间3月30日10:45分盘口异动快照:3月30日,德业股份盘中快速上涨,5分钟内涨幅超...
03-30 10:37:10
湖南通报4起粮食购销领域违纪违法典型案例_世界球精选

湖南通报4起粮食购销领域违纪违法典型案例_世界球精选

中央纪委国家监委网站讯日前,湖南省纪委监委对4起粮食购销领域违纪违法典型案例进行公开通报。具体如下...
03-30 09:58:47
贝达药业董秘回复:公司对于前沿科技在新药研发中的运用保持密切的关注,将在可行的条件下引入科技创新工具

贝达药业董秘回复:公司对于前沿科技在新药研发中的运用保持密切的关注,将在可行的条件下引入科技创新工具

贝达药业(300558)03月30日在投资者关系平台上答复了投资者关心的问题。
03-30 09:14:31
灼口症是怎么引起的(什么叫灼口症) 环球资讯

灼口症是怎么引起的(什么叫灼口症) 环球资讯

导致灼口综合症的原因非常多,目前对这种疾病的发病机制并没有完全研究清楚,目前初步认为可能和免疫力...
03-30 08:20:29
1W字长文:K8S Ingress 原理和实操-世界最资讯

1W字长文:K8S Ingress 原理和实操-世界最资讯

文章很长,且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录博客园版为您奉上珍贵的学习资源:免费...
03-30 06:35:15
男士送什么礼物比较好,细数那些定制的 环球通讯

男士送什么礼物比较好,细数那些定制的 环球通讯

相信有好多人跟我一样,想知道送给男士的定制礼物有哪些。关于男士的定制礼物,礼物还不在少数。男士送...
03-30 06:27:38
全球微头条丨开业用花篮什么寓意_开业用花

全球微头条丨开业用花篮什么寓意_开业用花

1、红掌、洋兰泰国兰胸花胸花、香槟玫瑰胸花(1枝顶级香槟玫瑰+满天星)二三十一个,2、都比较适合商务3、...
03-30 03:14:21
心通医疗-B(02160)发布年度业绩,股东应占亏损4.54亿元,同比扩大147.95%

心通医疗-B(02160)发布年度业绩,股东应占亏损4.54亿元,同比扩大147.95%

智通财经APP讯,心通医疗-B(02160)发布2022年度全年业绩,收入2 51亿元(人民币,下同),同比增长25%;股...
03-29 23:11:45
大美中国 候鸟北归丨看白鹤归来 “熊猫鸟”捕食尽显霸气-消息

大美中国 候鸟北归丨看白鹤归来 “熊猫鸟”捕食尽显霸气-消息

>巡护足迹红外相机记录白鹤夜宿全世界95%以上的国家一级保护动物白鹤,都会在鄱阳湖越冬。目前,这些白...
03-29 21:58:26
安达臣道石矿场发展计划

安达臣道石矿场发展计划

1、达臣道石矿场发展计划》是香港政府正在研究的中长期土地发展计划,地点位于东九龙大上托西南面的山坡...
03-29 20:50:35
奇幻AROG《尘封大陆》延期至8.10 将支持德语配音

奇幻AROG《尘封大陆》延期至8.10 将支持德语配音

发行商FocusEntertainment发文宣布,奇幻动作RPG《尘封大陆》将延期至8月10日发售。本作原定于5月16日发...
03-29 19:47:13
今日快看!工信部副部长王江平:我国5G基站已超过240万个 大力发展人工智能、区块链、云计算

今日快看!工信部副部长王江平:我国5G基站已超过240万个 大力发展人工智能、区块链、云计算

3月29日,工业和信息化部副部长王江平在博鳌亚洲论坛2023年年会“推进数字经济”分论坛上表示,推进数字...
03-29 18:48:22
世界今热点:70岁过来人忠告:老人长期住养老院,不具备这3点,很可能被孤立

世界今热点:70岁过来人忠告:老人长期住养老院,不具备这3点,很可能被孤立

前言:在当今社会,老年人上了一定的年纪,大概率会选择在养老院里终老。现在的年轻人,生活压力都很大...
03-29 17:47:14
快看点丨小米Civi 3手机曝光:二代骁龙7+ 外观更好看

快看点丨小米Civi 3手机曝光:二代骁龙7+ 外观更好看

小米Civi3手机曝光,型号为23046PNC9C的小米Civi3现身IMEI产品库,代号yuechu(月初),目前的系统版本...
03-29 17:25:50
三月的尾巴 河南天气主打一个字“暖”! 全球快看

三月的尾巴 河南天气主打一个字“暖”! 全球快看

三月的尾巴河南天气主打一个字“暖”!,
03-29 16:04:31
发售日期定了!周董疯狂上脚的 PUMA 联名官图释出!-天天速看料

发售日期定了!周董疯狂上脚的 PUMA 联名官图释出!-天天速看料

在周杰伦自家品牌PHANTACi迎来16周年之际,周董也可谓是疯狂营业,推出的球鞋也是一双比一双亮眼。前段...
03-29 15:02:03
富裕县:大棚蔬菜助农增收

富裕县:大棚蔬菜助农增收

富裕县:大棚蔬菜助农增收
03-29 14:17:49
157克铜版纸多少丝_157克铜版纸 环球新视野

157克铜版纸多少丝_157克铜版纸 环球新视野

1、16开大度:210×285mm正度:185×260mm大度是国际尺寸,正度是国内尺寸,一般宣传单是用大度的。2、以大
03-29 12:59:54
中国太平2022年经营业绩:寿险新单保费同比增长20% “保险+生态圈”基本成型

中国太平2022年经营业绩:寿险新单保费同比增长20% “保险+生态圈”基本成型

中国太平另外一家子公司太平财险2022年实现保费收入329 21亿港元(不考虑汇率影响,太平财险的保费收入...
03-29 12:23:19
晨会纪要|全球简讯

晨会纪要|全球简讯

晨会纪要
03-29 11:34:44
要闻速递:新华锦:除股权方面外,双方未有其他业务的合作

要闻速递:新华锦:除股权方面外,双方未有其他业务的合作

新华锦(600735)03月29日在投资者关系平台上答复了投资者关心的问题。
03-29 10:56:56
天天即时:旧改推动逾20年!三元里,何时才能变?

天天即时:旧改推动逾20年!三元里,何时才能变?

2002年,三元里村被列入广州市首批城中村改造试点,改造方式基本是朝着全面改造的方向进行,规划和方案...
03-29 09:51:37
北京二手房成交量处于高位 价格相对平稳|世界热消息

北京二手房成交量处于高位 价格相对平稳|世界热消息

中国证券报记者日前对北京楼市进行实地调研发现,3月以来,北京楼市成交有所放大,二手房市场成交量处于...
03-29 09:11:14
3月29日重点数据和大事件前瞻

3月29日重点数据和大事件前瞻

3月29日,投资者需要关注的重点数据:澳大利亚2月CPI年率,澳大利亚2月CPI季率,澳大利亚2月CPI月率,德国4月G
03-29 07:20:34

为您推荐

精彩推送