Flutter相机功能插件camera_camera的使用
Flutter相机功能插件camera_camera的使用
Camera_Camera 3.0
新特性
- 添加缩放功能!
- 添加闪光灯模式
- 支持Web平台!
- 添加切换摄像头功能,可以选择你偏好的摄像头侧(前置或后置)
- 回调函数用于返回照片文件
onFile(File yourFile)
- 移除使用
Navigator.pop(context, file)
返回文件的方式 - 重构内部结构
安装指南
Android
你需要在 app/build.gradle
中添加以下内容:
minSdkVersion 21
iOS
你需要在 info.plist
中添加以下内容:
<key>NSCameraUsageDescription</key>
<string>Can I use the camera please?</string>
<key>NSMicrophoneUsageDescription</key>
<string>Can I use the mic please?</string>
Flutter
在 pubspec.yaml
中添加包:
camera_camera: current_version
使用方法
Camera_Camera
是一个Widget,可以放在任何地方使用。
示例 01
return Scaffold(
body: CameraCamera(
onFile: (file) => print(file),
),
);
示例 02
return Scaffold(
body: CameraCamera(
onFile: (file) => print(file),
),
floatingActionButton: FloatingActionButton(
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (_) => CameraCamera(
onFile: (file) {
photos.add(file);
// 拍照后关闭相机
Navigator.pop(context);
setState(() {});
},
),
),
);
},
child: Icon(Icons.camera_alt),
),
);
3.0 版本路线图
特性 | 进度 |
---|---|
缩放 | ✅ |
闪光灯 | ✅ |
选择摄像头侧 | ✅ |
Null安全支持 | ✅ |
Web支持(测试版) | ✅ |
桌面支持 | |
自定义布局 | |
添加曝光控制 | |
添加简单视频模式 | |
添加图库 |
贡献
欢迎提交Pull请求。对于重大更改,请先创建一个issue讨论你希望进行的更改。
请确保适当更新测试。
许可证
示例代码
import 'dart:io';
import 'package:camera_camera/camera_camera.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Camera Camera 3.0',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(title: 'Camera Camera 3.0'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key? key, required this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
final photos = <File>[];
void openCamera() {
Navigator.push(
context,
MaterialPageRoute(
builder: (_) => CameraCamera(
onFile: (file) {
photos.add(file);
Navigator.pop(context);
setState(() {});
},
),
),
);
}
@override
Widget build(BuildContext context) {
final size = MediaQuery.of(context).size;
return Scaffold(
backgroundColor: Colors.black,
appBar: AppBar(
title: Text(widget.title),
),
body: GridView.builder(
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 2),
itemCount: photos.length,
itemBuilder: (_, index) => Padding(
padding: const EdgeInsets.all(8.0),
child: Container(
width: size.width,
child: kIsWeb
? Image.network(photos[index].path)
: Image.file(
photos[index],
fit: BoxFit.cover,
),
),
),
),
floatingActionButton: FloatingActionButton(
onPressed: openCamera,
child: Icon(Icons.camera_alt),
),
);
}
}
以上代码展示了如何在Flutter应用中使用 camera_camera
插件来实现拍照功能,并将拍摄的照片显示在一个网格视图中。希望对你有所帮助!
更多关于Flutter相机功能插件camera_camera的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter相机功能插件camera_camera的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,我可以为你提供一个关于如何在Flutter中使用camera
插件来实现相机功能的代码案例。首先,你需要确保已经在你的Flutter项目中添加了camera
插件。你可以在pubspec.yaml
文件中添加以下依赖项:
dependencies:
flutter:
sdk: flutter
camera: ^0.12.0+4 # 请检查最新版本号并替换
然后运行flutter pub get
来安装依赖。
接下来,你需要申请相机权限(在Android和iOS上分别进行配置)。
Android配置
在android/app/src/main/AndroidManifest.xml
中添加以下权限:
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" android:required="true" />
<uses-feature android:name="android.hardware.camera.autofocus" />
iOS配置
在ios/Runner/Info.plist
中添加以下权限:
<key>NSCameraUsageDescription</key>
<string>需要访问相机</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>需要访问相册</string>
<key>NSMicrophoneUsageDescription</key>
<string>需要访问麦克风</string>
Flutter代码实现
下面是一个简单的Flutter应用示例,展示了如何使用camera
插件来访问和显示相机预览:
import 'package:flutter/material.dart';
import 'package:camera/camera.dart';
List<CameraDescription> cameras;
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
cameras = await availableCameras();
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Camera App',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: CameraApp(),
);
}
}
class CameraApp extends StatefulWidget {
@override
_CameraAppState createState() => _CameraAppState();
}
class _CameraAppState extends State<CameraApp> {
CameraController? controller;
@override
void initState() {
super.initState();
if (cameras.isEmpty) {
return;
}
controller = new CameraController(cameras[0], ResolutionPreset.medium);
controller!.initialize().then((_) {
if (!mounted) {
return;
}
setState(() {});
});
}
@override
void dispose() {
controller?.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
if (controller == null || !controller!.value.isInitialized) {
return Container();
}
return Scaffold(
appBar: AppBar(
title: Text('Camera'),
),
body: CameraPreview(controller!),
floatingActionButton: FloatingActionButton(
onPressed: () async {
await controller!.takePicture();
},
child: Icon(Icons.camera_alt),
),
);
}
}
解释
- 依赖项:在
pubspec.yaml
中添加了camera
插件。 - 权限:在Android和iOS的配置文件中添加了必要的相机权限。
- 初始化相机:在
main
函数中,通过availableCameras()
获取可用的相机列表,并初始化CameraController
。 - UI显示:使用
CameraPreview
小部件显示相机预览,并添加了一个浮动操作按钮来拍照。
这个示例展示了基本的相机预览和拍照功能。你可以根据需要进一步扩展功能,比如处理拍照后的图片、添加滤镜等。确保在实际项目中检查和处理异常,以及请求用户权限。