Flutter相机功能增强插件camerax2的使用
CameraX2
一个为 Flutter 设计的相机插件,它在 Android 上使用 CameraX,在 iOS 上使用原生 API,支持相机预览、拍摄和面部检测分析。
注意:此插件受官方 camerax
项目的启发,但更易于使用,并且在原生端使用了 MLKit 进行图像分析。
功能
- ✅ CameraView 小部件。
- ✅ 控制手电筒。
- ✅ 访问面部流。
- ✅ 拍照能力。
开始使用
在 pubspec.yaml
文件中添加 camerax2
作为依赖项。
dependencies:
camerax2: ^<latest-version>
Android
确保在 android/app/build.gradle
文件中的 minSdkVersion
为 21 或更高版本,因为 CameraX 使用的 camera2 API 只支持 Android 5.0 或更高版本。
注意:可以在 Android 11 或更高版本的设备模拟器或物理设备上运行示例。在 Android 10 或更低版本的设备模拟器上无法运行 CameraX。详情见 CameraX 入门指南。
iOS
确保最低部署目标为 10.0,因为 MLKit 只支持 iOS 10.0 或更高版本。可以在 iOS 项目中的 Podfile
中取消注释第一行 platform :ios, '10.0'
。
问题
- 不支持横向方向。
- 目前没有测试。
示例代码
main.dart
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'views.dart';
void main() async {
// 确保 Flutter 绑定已经初始化
WidgetsFlutterBinding.ensureInitialized();
// 设置首选方向为竖屏
await SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
// 启动应用
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
// 设置状态栏样式
final style = SystemUiOverlayStyle.light.copyWith(statusBarColor: Colors.transparent);
SystemChrome.setSystemUIOverlayStyle(style);
// 返回 Material 应用程序
return MaterialApp(
// 主页面
home: HomeView(),
// 设置主题
theme: ThemeData.light().copyWith(platform: TargetPlatform.iOS),
// 路由表
routes: {
'analyze': (context) => AnalyzeView(),
'display': (context) => DisplayView(),
},
);
}
}
更多关于Flutter相机功能增强插件camerax2的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter相机功能增强插件camerax2的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中,camera
插件是用于访问设备相机功能的官方插件。然而,如果你需要更强大的功能和更好的兼容性,可以考虑使用 camera_x
插件,它是对 camera
插件的增强版本,基于 Android 的 CameraX API。camera_x
插件提供了更现代化的相机功能,并且更容易与最新的 Android 设备兼容。
1. 安装 camera_x
插件
首先,你需要在 pubspec.yaml
文件中添加 camera_x
插件的依赖:
dependencies:
flutter:
sdk: flutter
camera_x: ^0.0.1 # 请检查最新版本
然后运行 flutter pub get
来安装插件。
2. 配置 Android 项目
由于 camera_x
插件基于 CameraX API,因此你需要在 android/app/build.gradle
文件中添加 CameraX 的依赖:
dependencies {
implementation "androidx.camera:camera-core:1.0.0"
implementation "androidx.camera:camera-camera2:1.0.0"
implementation "androidx.camera:camera-lifecycle:1.0.0"
implementation "androidx.camera:camera-view:1.0.0"
}
3. 使用 camera_x
插件
以下是一个简单的示例,展示了如何使用 camera_x
插件来显示相机预览并拍照:
import 'package:flutter/material.dart';
import 'package:camera_x/camera_x.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
final cameras = await CameraX.getCameras();
runApp(MyApp(cameras: cameras));
}
class MyApp extends StatelessWidget {
final List<CameraDescription> cameras;
MyApp({required this.cameras});
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: CameraScreen(cameras: cameras),
);
}
}
class CameraScreen extends StatefulWidget {
final List<CameraDescription> cameras;
CameraScreen({required this.cameras});
[@override](/user/override)
_CameraScreenState createState() => _CameraScreenState();
}
class _CameraScreenState extends State<CameraScreen> {
late CameraXController _controller;
[@override](/user/override)
void initState() {
super.initState();
_initializeCamera();
}
Future<void> _initializeCamera() async {
_controller = CameraXController(
widget.cameras.first,
ResolutionPreset.medium,
);
await _controller.initialize();
if (!mounted) return;
setState(() {});
}
[@override](/user/override)
void dispose() {
_controller.dispose();
super.dispose();
}
Future<void> _takePicture() async {
try {
final image = await _controller.takePicture();
// 处理拍摄的照片
print('Picture saved to ${image.path}');
} catch (e) {
print(e);
}
}
[@override](/user/override)
Widget build(BuildContext context) {
if (!_controller.value.isInitialized) {
return Container();
}
return Scaffold(
appBar: AppBar(title: Text('CameraX Example')),
body: CameraPreview(_controller),
floatingActionButton: FloatingActionButton(
onPressed: _takePicture,
child: Icon(Icons.camera),
),
);
}
}