언어: 영어 | 중국어
WeChat UI를 기반으로 하는 Flutter 프로젝트용 카메라 선택기 입니다. 이는 wechat_assets_picker에 대한 별도의 실행 가능한 확장이기도 합니다.
UI가 기반으로 하는 현재 WeChat 버전: 8.0.49
. UI 디자인은 WeChat 업데이트 이후 언제든지 업데이트될 예정입니다.
주요 변경 사항 간 마이그레이션 방법을 알아보려면 마이그레이션 가이드를 참조하세요.
패키지는 Flutter의 안정적인 버전 에서만 작동함을 보장합니다. Flutter의 다른 채널과 맞추기 위해 실시간으로 업데이트하지 않습니다.
2.8.0 | 3.3.0 | 3.16.0 | |
---|---|---|---|
4.2.0+ | ✅ | ||
4.0.0+ | ✅ | ||
3.0.0+ | ✅ |
패키지는 이러한 멋진 패키지로 만들어졌습니다.
이름 | 특징 |
---|---|
사진_관리자 | 자산에 대한 기본 추상화 및 관리. |
카메라 | 이미지와 비디오를 캡처합니다. |
video_player | 이에 따라 비디오와 오디오를 재생합니다. |
해당 구현은 패키지에서 상대적으로 안정적이어야 합니다. 선택기를 사용할 때 이와 관련된 문제를 발견한 경우 먼저 문제 추적기에 문제를 제출하세요.
State
사용State
재정의로 완전히 구현 가능ThemeData
기반으로 완전히 사용자 정의 가능한 테마![]() | ![]() | ![]() | ![]() | ![]() |
---|
작업을 시작하기 전에 아래 주의사항을 숙지하세요.
AssetEntity
AssetPathEntity
관련 API 및 동작에 대한 질문이 있는 경우 photo_manager의 API 문서에서 자세한 내용을 확인하세요.
대부분의 사용법은 예시를 통해 자세히 설명되어 있습니다. 질문이 있기 전에 예를 주의 깊게 살펴보시기 바랍니다.
flutter pub get
실행 시 resolve conflict
오류가 발생하는 경우 dependency_overrides
사용하여 문제를 해결하세요.
flutter pub add wechat_camera_picker
실행하거나 wechat_camera_picker
pubspec.yaml
종속성에 수동으로 추가하세요.
dependencies :
wechat_camera_picker : ^latest_version
최신 안정 버전은 다음과 같습니다.
최신 개발 버전은 다음과 같습니다.
실행하기 전에 다음 세부 설정 가이드를 따르세요.
NSPhotoLibraryAddUsageDescription
사용하는 경우 onEntitySaving
또는 onXFileCaptured
사용하여 캡처된 파일을 처리해야 하며 이 상황에서는 AssetEntity
사용할 수 없으며 해당 ID로 해당 자산을 얻으면 충돌이 발생합니다.그런 다음 코드에서 패키지를 가져옵니다.
import 'package:wechat_camera_picker/wechat_camera_picker.dart' ;
자산을 선택할 때 패키지는 Locale?
BuildContext
에서 현재 언어의 해당 텍스트 대리자를 반환합니다. BuildContext
에서 접근할 수 있는 위젯 트리에 유효한 Locale
이 있는지 확인하세요. 그렇지 않으면 기본 중국어 대리인이 사용됩니다.
포함된 텍스트 대리자 언어는 다음과 같습니다.
사용자 정의/고정 텍스트 대리자를 사용하려면 CameraPickerConfig.textDelegate
를 통해 전달하세요.
final AssetEntity ? entity = await CameraPicker . pickFromCamera (context);
더 많은 선택 동작을 보려면 CameraPickerConfig
사용하세요.
final AssetEntity ? entity = await CameraPicker . pickFromCamera (
context,
pickerConfig : const CameraPickerConfig (),
);
CameraPickerConfig
의 필드:
이름 | 유형 | 설명 | 기본값 |
---|---|---|---|
녹음 활성화 | bool | 선택기가 비디오를 녹화할 수 있는지 여부입니다. | false |
녹음만 활성화 | bool | 선택기가 비디오만 녹화할 수 있는지 여부입니다. enableRecording 이 true 인 경우에만 사용할 수 있습니다. | false |
활성화Tap녹화 | bool | 한 번의 탭으로 녹음을 시작할 수 있는지 여부입니다. enableRecording 이 true 인 경우에만 사용할 수 있습니다. | false |
오디오 활성화 | bool | 선택기가 오디오를 녹음해야 하는지 여부입니다. 녹음 시에만 사용 가능합니다. | true |
활성화SetExposure | bool | 사용자가 탭하여 노출 지점을 설정할 수 있는지 여부. | true |
활성화ExposureControlOnPoint | bool | 사용자가 설정값에 따라 노출을 조정할 수 있는지 여부. | true |
PinchToZoom 활성화 | bool | 사용자가 핀치로 카메라를 확대/축소할 수 있는지 여부입니다. | true |
활성화PullToZoomInRecord | bool | 사용자가 동영상 녹화 시 위로 당겨 확대/축소할 수 있는지 여부입니다. | true |
스케일 미리보기 활성화 | bool | 캡처 중에 카메라 미리보기의 크기를 조정해야 하는지 여부입니다. | false |
삭제미리보기파일 | bool | 팝업 시 미리보기 파일을 삭제할지 여부입니다. | false |
자동미리보기비디오 | bool | 미리보기에서 비디오를 즉시 재생할지 여부입니다. | true |
maximumRecordingDuration | Duration? | 비디오 녹화 프로세스의 최대 기간입니다. | const Duration(seconds: 15) |
최소녹화기간 | Duration | 비디오 녹화 프로세스의 최소 기간입니다. | const Duration(seconds: 1) |
주제 | ThemeData? | 선택기의 테마 데이터입니다. | CameraPicker.themeData(wechatThemeColor) |
텍스트 위임 | CameraPickerTextDelegate? | 위젯의 텍스트를 제어하는 텍스트 대리자입니다. | CameraPickerTextDelegate |
해상도사전 설정 | ResolutionPreset | 카메라의 현재 해상도입니다. | ResolutionPreset.ultraHigh |
카메라분기 회전 | int | 카메라 뷰가 시계 방향으로 1/4만큼 회전해야 합니다. | 0 |
이미지형식그룹 | ImageFormatGroup | 원시 이미지 형식의 출력을 설명합니다. | ImageFormatGroup.unknown |
선호렌즈방향 | CameraLensDirection | 카메라를 처음 사용할 때 선호되는 렌즈 방향은 무엇입니까? | CameraLensDirection.back |
잠금캡처방향 | DeviceOrientation? | 캡처 중에 카메라를 특정 방향으로 잠가야 하는지 여부입니다. | null |
foregroundBuilder | ForegroundBuilder? | 전체 카메라 미리보기를 포괄하는 전경 위젯 빌더입니다. | null |
미리보기TransformBuilder | PreviewTransformBuilder? | 카메라 미리보기를 변환하는 위젯 빌더입니다. | null |
onEntitySaving | EntitySaveCallback? | 뷰어에 엔터티를 저장하기 위한 콜백 유형을 정의합니다. | null |
오류 시 | CameraErrorHandler? | 피킹 과정에서 오류가 발생한 경우 오류 처리기입니다. | null |
onXFileCaptured | XFileCapturedCallback? | 카메라가 XFile을 캡처할 때의 콜백 유형 정의입니다. | null |
onMinimumRecordDurationNotMet | VoidCallback? | 녹음이 최소 녹음 기간을 충족하지 못한 경우 콜백입니다. | null |
onPick확인됨 | void Function(AssetEntity)? | 사진 촬영이나 영상 확인 시 콜백입니다. | null |
허가요청옵션 | PermissionRequestOption? | photo_manager 패키지를 이용하여 캡쳐 파일 저장 시 권한 요청 옵션입니다. | null |
State
사용 모든 사용자 인터페이스는 다음을 포함하여 사용자 정의 State
를 통해 사용자 정의할 수 있습니다.
CameraPickerState
CameraPickerViewerState
State
를 재정의한 후 선택 방법을 통해 전달합니다. 구체적으로는 다음과 같습니다.
CameraPicker.pickFromCamera(createPickerState: () => CustomCameraPickerState());
CameraPickerViewer.pushToViewer(..., createViewerState: () => CustomCameraPickerViewerState());
현재 iOS에서는 미리보기가 올바르게 동기화되지 않습니다. 이 문제에서 자세한 내용을 확인할 수 있습니다: flutter/flutter#89216 . 그 외에 질문을 설명하는 문제를 제출해 주세요.
멋진 분들에게 감사드립니다(이모지 키):
알렉스 리 ? ? ? ? | 카이징롱 ? | 라엘 | mjl0602 ? | 별칭왕 ? | 왼쪽 코딩 ? | 루옹 더 빈 |
루오모프로 ️️️️♿️ ? | LeonardoZhu | 응우옌 푹 로이 ? | 아모스 ? | 티 유 준 |
이 프로젝트는 모든 기여자 사양을 따릅니다. 어떤 종류의 기여도 환영합니다!