tencent_wechat_camera_picker 3.6.5 tencent_wechat_camera_picker: ^3.6.5 copied to clipboard
A camera picker based on WeChat's UI which is a separate runnable extension to wechat_assets_picker.
Tencent WeChat Camera Picker #
This is a fork package of wechat_camera_picker, and added those following features:
-
Adjust the
resolutionPreset
automatically, according to the device performance. Aims to solve the issue that video recording may crashed on a mobile phone with relatively lower performance. -
Fix the issue that it might require for the storage permission twice after captured.
This forked package is maintained by Tencent Cloud Chat.
Thanks a lot to wechat_camera_picker, while their original README can be seen below.
腾讯微信摄像头拾取器 #
这是 wechat_camera_picker 的一个 fork 包,并添加了以下功能:
-
根据设备性能自动调整
resolutionPreset
。 旨在解决性能相对较低的手机录制视频可能会崩溃的问题。 -
修复捕获后可能需要两次存储权限的问题。
本fork包由腾讯云IM维护。
非常感谢wechat_camera_picker,他们的原始自述文件可以在下面看到。
Flutter WeChat Camera Picker #
Language: English | 中文简体
A camera picker based on WeChat's UI which is a separate runnable extension to
wechat_assets_picker.
The package based on camera
for camera functions
and photo_manager
for asset implementation.
Category 🗂 #
Features ✨ #
- ♻️ Fully implementable with
State
s override - 💚 99% similar to WeChat style
- 📷 Picture taking support
- 🎥 Video recording support
- ⏱ Duration limitation support
- 🔍 Scale when recording support
- ☀️ Exposure adjust support
- 🔍️ Scale with pinch support
- 💱 i18n support
- ⏪ RTL language support
- 🎏 Fully customizable theme
- 🖾 Foreground custom widget builder support
- 🕹️ Intercept saving with custom process
Screenshots 📸 #
Preparing for use 🍭 #
Version constraints #
Flutter SDK: >=2.2.0
.
Setup #
Android 13 (API 33) permissions
If you don't need to take photos or videos, consider removing relevant permission in your apps, more specifically:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.your.app">
<!-- Add this if you need to take photos. -->
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<!-- Add this if you need to take videos. -->
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
</manifest>
Usage 📖 #
Simple usage #
final AssetEntity? entity = await CameraPicker.pickFromCamera(context);
With configurations #
Use CameraPickerConfig
for more picking behaviors.
final AssetEntity? entity = await CameraPicker.pickFromCamera(
context,
pickerConfig: const CameraPickerConfig(),
);
Fields in CameraPickerConfig
:
Name | Type | Description | Default Value |
---|---|---|---|
enableRecording | bool |
Whether the picker can record video. | false |
onlyEnableRecording | bool |
Whether the picker can only record video. Only available when enableRecording is true . |
false |
enableTapRecording | bool |
Whether allow the record can start with single tap. Only available when enableRecording is true . |
false |
enableAudio | bool |
Whether Whether the picker should record audio. Only available with recording. | true |
enableSetExposure | bool |
Whether users can set the exposure point by tapping. | true |
enableExposureControlOnPoint | bool |
Whether users can adjust exposure according to the set point. | true |
enablePinchToZoom | bool |
Whether users can zoom the camera by pinch. | true |
enablePullToZoomInRecord | bool |
Whether users can zoom by pulling up when recording video. | true |
shouldDeletePreviewFile | bool |
Whether the preview file will be delete when pop. | false |
shouldAutoPreviewVideo | bool |
Whether the video should be played instantly in the preview. | false |
maximumRecordingDuration | Duration |
The maximum duration of the video recording process. | const Duration(seconds: 15) |
theme | ThemeData? |
Theme data for the picker. | CameraPicker.themeData(wechatThemeColor) |
textDelegate | CameraPickerTextDelegate? |
Text delegate that controls text in widgets. | CameraPickerTextDelegate |
resolutionPreset | ResolutionPreset |
Present resolution for the camera. | ResolutionPreset.max |
cameraQuarterTurns | int |
The number of clockwise quarter turns the camera view should be rotated. | 0 |
imageFormatGroup | ImageFormatGroup |
Describes the output of the raw image format. | ImageFormatGroup.unknown |
preferredLensDirection | CameraLensDirection |
Which lens direction is preferred when first using the camera. | CameraLensDirection.back |
lockCaptureOrientation | DeviceOrientation? |
Whether the camera should be locked to the specific orientation during captures. | null |
foregroundBuilder | ForegroundBuilder? |
The foreground widget builder which will cover the whole camera preview. | null |
previewTransformBuilder | PreviewTransformBuilder? |
The widget builder which will transform the camera preview. | null |
onEntitySaving | EntitySaveCallback? |
The callback type define for saving entity in the viewer. | null |
onError | CameraErrorHandler? |
The error handler when any error occurred during the picking process. | null |
onXFileCaptured | XFileCapturedCallback? |
The callback type definition when the XFile is captured by the camera. | null |
Using custom State
s #
All user interface can be customized through custom State
s, including:
CameraPickerState
CameraPickerViewerState
After override State
s, pass them through the picking method, more specifically:
CameraPicker.pickFromCamera(createPickerState: () => CustomCameraPickerState());
CameraPickerViewer.pushToViewer(..., createViewerState: () => CustomCameraPickerViewerState());
Frequently asked question 💭 #
Why the orientation behavior is strange on iOS? #
Currently, the preview is not correctly synced on the iOS. You can find more details in this issue: https://github.com/flutter/flutter/issues/89216 . Other than that, please submit issues to describe your question.
Contributors ✨ #
Thank goes to these wonderful people (emoji key):
Alex Li 💻 🎨 📖 💡 🤔 🚧 💬 👀 |
Caijinglong 💡 🤔 |
Lael 📖 |
mjl0602 💻 🤔 |
AliasWang 💻 🤔 |
leftcoding 🐛 |
Luong The Vinh 💻 |
luomo-pro ️️️️♿️ 🐛 |
LeonardoZhu 💻 |
This project follows the all-contributors specification. Contributions of any kind welcome!