flutter系列之:在flutter中使用相机拍摄照片
cac55 2024-09-20 12:52 31 浏览 0 评论
简介
在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中添加下面的权限信息:
<key>NSCameraUsageDescription</key>
<string>flutter需要用到你的照相机</string>
在andorid中需要配合minSdkVersion>=21来使用。
在flutter中使用camera
camera插件为我们提供了一系列的功能来方便camera的使用。
camera的使用需要遵循下面的步骤,因为现在的手机可能会有多个摄像头,所以我们需要通过api获取到可以使用的摄像头列表。
接下来我们使用选中的摄像头,进行一些控制操作,然后需要使用相应的camera视图来展示相应的照相机图像.
最后调用摄像头相关的拍摄功能进行拍摄。
听起来好像挺复杂的,事实上只要遵照上面的顺序,一切都是非常简单的。
首先我们需要获取可用的摄像头列表,这个步骤是通过调用camera包中的availableCameras方法来实现的:
Future<List<CameraDescription>> 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<void> 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<CameraApp> {
late CameraController _controller;
late Future<void> _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<void>(
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
相关推荐
- iphone6自定义铃声设置流程(iphone6怎么自定义来电铃声)
-
苹果iphone6自定义铃声如何设置,iphone6自定义铃声怎么设置,iphone6自定义铃声设置教程,下面小编给大家分享一下。设置自定义铃声首先要自己制作或者找到一个铃声音频。1、在电脑上面把已经...
- iphone手机三分钟更换铃声,无需电脑直接手机操作
-
iPhone怎么在手机上换铃声?无需电脑!1分钟教你给苹果手机换铃声众所周知,苹果手机的ios系统是比较封闭的,封闭系统就会给我们带来一些不便,这里要说的就是苹果手机更换个性化铃声就比较麻烦,因为io...
- iPhone手机个性铃声设置详细教程(iphone个性铃声怎么设置)
-
iPhone现在已成街机了。朋友聚在一起的时候,是不是总有种以为是自己手机响了的赶脚。那么,小编今天跟大家分享一下iPhone怎么换铃声?,让你轻松设置属于你的个性铃声。1:电脑端安装iTools,安...
- iPhone也能用自己喜欢的铃声了,2分钟包搞定!
-
听到超好听的铃声,怎样才能放进iPhone里?这貌似是一道千古难题。90%的iPhone小白:听到这么爽脆带感的iPhone铃声,我要用!我要用!我要用!视频然而打开iTunes发现,脑子一片空白……...
- 苹果iOS 26隐藏新铃声曝光:强调“玻璃质感”
-
IT之家6月20日消息,苹果在iOS26中隐藏了一个新的铃声,这是现有默认铃声“Reflection”的改版。“Reflection”自2017年iPhoneX问世以来一直是系...
- 苹果ios14充电提示音怎么设置 iPhone手机修改充电提示音教程
-
ios14充电提示音最近很火爆,大家都想要知道苹果设置充电提示音的方法,个性化的设置非常吸引大家,小编也会在这里教大家ios14苹果充电提示音的设置,操作的流程会直接分享在下方,各位玩家们都能一起来看...
- iPhone苹果16自定义来电铃声攻略(ios自定义铃声怎么设置)
-
在智能手机的个性化设置中,更改来电铃声是展现自我风格的一种方式。对于使用iPhone苹果16的用户来说,设置一个独特的来电铃声,不仅能提升接听体验,还能让日常生活更加多彩。以下是如何为iPhone苹果...
- 未越狱iPhone用户自定义来电铃声和短信铃声的教程
-
其实自定义来电铃声和短信铃声的过程没有什么区别,但要注意,来电铃声的播放时间不能超过40秒,短信铃声的播放时间不能超过30秒,这也就是说长度为30-40秒的仅在iPhone的来电铃声中出现,少于30秒...
- 苹果手机怎么设置闹钟铃声?更改为歌曲铃声,亲测有效
-
很不是有很多小伙伴每天早上都被苹果手机刺耳的“雷达”闹钟铃声给吵醒呢?想要更换一个舒缓的闹钟铃声,却发现自己鼓捣半天却无法更换喜欢的歌曲闹钟铃声。苹果手机怎么设置闹钟铃声?下面小编就来分享如何将苹果手...
- 独家教程:iPhone手机铃声制作与更换,一般人我不告诉他
-
今天刚好自己作铃声。。想到吧里好多人都会问怎么制作铃声。于是顺便截图发吧里。虽然百度一下铃声制作已经泛滥。但是还是会一直有小白问。所以这里会详细图文说明。先介绍小白式铃声制作。http://www....
- 苹果用户iTunes自制自定义铃声教程
-
怎么制作iphone6铃声,如何使用iTunes剪切音乐自制铃声,新版iTunes怎么自制铃声,相信很多苹果用户都想使用一些个性化铃声。那么就学习一下这个方法吧。1、在电脑上面打开iTunes,选择编...
- 轻松学会!苹果手机怎么设置铃声来电铃声(3个方法)
-
在日常生活中,手机的铃声扮演着非常重要的角色,不仅是接收来电的提示,更是展示个人品位和风格的方式之一。而对于苹果手机用户来说,定制来电铃声可以让手机更具个性化,并且让您在繁忙的环境中更容易识别重要的来...
- iPhone13怎么设置来电铃声?苹果13自定义铃声操作教程
-
我们知道,苹果iOS系统是相对封闭的,在很多功能设置上与安卓机大有不同。就如来电铃声,很多苹果用户就不喜欢使用默认的那些来电铃声,想要自定义铃声,却不知如何操作。最近,新购入iPhone13系列机型的...
- iPhone 免费铃声:iOS 26 终于让设置变得更简单
-
苹果终于开窍了——省去了最烦人的繁琐步骤。iOS26终结了多年来困扰iPhone用户的麻烦操作:现在无需通过GarageBand应用,仅需轻点几下就能设置自定义铃声。完全免费、直接操作且极...
你 发表评论:
欢迎- 一周热门
- 最近发表
-
- iphone6自定义铃声设置流程(iphone6怎么自定义来电铃声)
- iphone手机三分钟更换铃声,无需电脑直接手机操作
- iPhone手机个性铃声设置详细教程(iphone个性铃声怎么设置)
- iPhone也能用自己喜欢的铃声了,2分钟包搞定!
- 苹果iOS 26隐藏新铃声曝光:强调“玻璃质感”
- 苹果ios14充电提示音怎么设置 iPhone手机修改充电提示音教程
- 苹果iphone手机直接设置铃声教程(ios怎么直接设置铃声)
- iPhone苹果16自定义来电铃声攻略(ios自定义铃声怎么设置)
- 未越狱iPhone用户自定义来电铃声和短信铃声的教程
- 苹果手机怎么设置闹钟铃声?更改为歌曲铃声,亲测有效
- 标签列表
-
- 如何绘制折线图 (52)
- javaabstract (48)
- 新浪微博头像 (53)
- grub4dos (66)
- s扫描器 (51)
- httpfile dll (48)
- ps实例教程 (55)
- taskmgr (51)
- s spline (61)
- vnc远程控制 (47)
- 数据丢失 (47)
- wbem (57)
- flac文件 (72)
- 网页制作基础教程 (53)
- 镜像文件刻录 (61)
- ug5 0软件免费下载 (78)
- debian下载 (53)
- ubuntu10 04 (60)
- web qq登录 (59)
- 笔记本变成无线路由 (52)
- flash player 11 4 (50)
- 右键菜单清理 (78)
- cuteftp 注册码 (57)
- ospf协议 (53)
- ms17 010 下载 (60)