camera_awesome
Flutter 插件,用于在您的项目中添加相机支持。
CamerAwesome 包含许多有用的功能,例如
- ? 实时相机翻转(无需重建即可在后置和前置摄像头之间切换)。
- ⚡️ 无需初始化,只需添加 CameraAwesome 小部件!
- ⌛️ 即时对焦。
- ? 设备闪光灯支持。
- ? 变焦。
- ? 全屏或 SizedBox 预览支持。
- ? 完整示例。
- ?拍照(当然?)。
- ? 视频录制(目前仅限 iOS)。
? 实时示例
| 拍照 ? & 录制视频 ? | 分辨率更改 ? |
![]() |
![]() |
? 安装和使用
设置权限
- iOS 将这些添加到
ios/Runner/Info.plist文件中
<key>NSCameraUsageDescription</key>
<string>Your own description</string>
<key>NSMicrophoneUsageDescription</key>
<string>To enable microphone access when recording video</string>
-
Android
- 在
<application>之前设置权限
<uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />- 将
android/app/build.gradle中的最低 SDK 版本更改为 21(或更高)
minSdkVersion 21 - 在
导入包
import 'package:camerawesome/camerawesome_plugin.dart';
定义通知器(如果需要)和控制器
ValueNotifier 是 Flutter 框架中一个有用的更改通知器。当值更改时,它会向所有侦听器触发一个事件。
在此处查看 ValueNotifier 文档
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> with TickerProviderStateMixin {
// [...]
// Notifiers
ValueNotifier<CameraFlashes> _switchFlash = ValueNotifier(CameraFlashes.NONE);
ValueNotifier<Sensors> _sensor = ValueNotifier(Sensors.BACK);
ValueNotifier<CaptureModes> _captureMode = ValueNotifier(CaptureModes.PHOTO);
ValueNotifier<Size> _photoSize = ValueNotifier(null);
// Controllers
PictureController _pictureController = new PictureController();
VideoController _videoController = new VideoController();
// [...]
}
如果您想更改配置,只需设置值即可。CameraAwesome 将处理其余部分。
示例
_switchFlash.value = CameraFlashes.AUTO;
_captureMode.value = CaptureModes.VIDEO;
创建您的相机
// [...]
@override
Widget build(BuildContext context) {
return CameraAwesome(
testMode: false,
onPermissionsResult: (bool result) { },
selectDefaultSize: (List<Size> availableSizes) => Size(1920, 1080),
onCameraStarted: () { },
onOrientationChanged: (CameraOrientations newOrientation) { },
zoom: 0.64,
sensor: _sensor,
photoSize: _photoSize,
switchFlashMode: _switchFlash,
captureMode: _captureMode,
fitted: true,
);
};
// [...]
显示参数列表
| 参数 | 类型 | 描述 | 必需 |
|---|---|---|---|
| testMode | boolean |
true 以包裹纹理 | |
| onPermissionsResult | OnPermissionsResult |
实现此功能可在 CameraAwesome 请求权限后获得回调 | |
| selectDefaultSize | OnAvailableSizes |
实现此功能以从设备可用大小列表中选择默认大小 | ✅ |
| onCameraStarted | OnCameraStarted |
通知客户端相机已启动 | |
| onOrientationChanged | OnOrientationChanged |
通知客户端方向已更改 | |
| switchFlashMode | **ValueNotifier**<CameraFlashes> |
更改闪光灯模式 | |
| zoom | ValueNotifier<double> |
从原生侧缩放。必须在 0 和 1 之间 | |
| sensor | ValueNotifier<Sensors> |
要初始化的传感器后置或前置 | ✅ |
| photoSize | ValueNotifier<Size> |
从 [selectDefaultSize] 方法中选择您的照片尺寸 | |
| captureMode | ValueNotifier<CaptureModes> |
在照片或视频之间选择拍摄模式 | |
| fitted | 布尔值 |
相机预览是否应该尽可能大或裁剪以填满。默认值为 false | |
| imagesStreamBuilder | 功能 |
相机启动预览后返回图像流 |
照片 ?
拍照 ?
await _pictureController.takePicture('THE_IMAGE_PATH/myimage.jpg');
视频 ?
录制视频 ?
await _videoController.recordVideo('THE_IMAGE_PATH/myvideo.mp4');
停止录制视频 ?
await _videoController.stopRecordingVideo();
? 实时图像流
imagesStreamBuilder 属性允许您在相机准备就绪后获取图像流。
不要尝试在 Flutter UI 中显示所有这些图像,因为您将没有足够的时间来刷新 UI。
(每秒图像太多)。
CameraAwesome(
...
imagesStreamBuilder: (imageStream) {
/// listen for images preview stream
/// you can use it to process AI recognition or anything else...
print('-- init CamerAwesome images stream');
},
)
? 测试设备
CamerAwesome 的开发旨在支持市场上的大多数设备,但某些功能可能无法完全正常工作。您可以单击下方查看您的设备是否支持所有功能。
欢迎贡献以改进此兼容性列表。
显示网格
| 设备 | 闪光灯 | 对焦 | Zoom | 翻转 |
|---|---|---|---|---|
| iPhone 5s | ✅ | ✅ | ✅ | ✅ |
| iPhone X | ✅ | ✅ | ✅ | ✅ |
| iPhone 7 | ✅ | ✅ | ✅ | ✅ |
| iPhone 12 Pro | ✅ | ✅ | ✅ | ✅ |
| iPhone SE (第 2 代) | ✅ | ✅ | ✅ | ✅ |
| One Plus 6T | ✅ | ✅ | ✅ | ✅ |
| 小米红米 | ✅ | ✅ | ✅ | ✅ |
| 荣耀 7 | ✅ | ✅ | ✅ | ✅ |
| 索尼 Xperia XZ F8331 | ✅ | ✅ | ✅ | ✅ |
| Pixel 4 | ✅ | ✅ | ✅ | ✅ |
| Galaxy S7 | ✅ | ✅ | ✅ | ✅ |
| LG k50s | ✅ | ✅ | ✅ | ✅ |
? 我们的目标
欢迎通过提交 PR 来提供帮助!
- [ ] ? 录制视频(部分,仅限 iOS)
- [ ] ? 对准特定点
- [x]
? 广播实时图像流 - [x]
? 曝光级别 - [x]
✅ 添加端到端测试 - [x]
? 全屏/SizedBox 支持 - [x]
? 完整示例 - [x]
? 拍照 - [x]
? 缩放级别 - [x]
? 实时切换相机 - [x]
? 设备闪光灯支持 - [x]
⌛️ 自动对焦

