@@ -11,6 +11,7 @@ import 'package:path/path.dart' as path;
11
11
import 'package:video_player/video_player.dart' ;
12
12
import 'package:wechat_picker_library/wechat_picker_library.dart' ;
13
13
14
+ import '../constants/config.dart' ;
14
15
import '../internals/singleton.dart' ;
15
16
import '../constants/enums.dart' ;
16
17
import '../constants/type_defs.dart' ;
@@ -19,12 +20,14 @@ import '../widgets/camera_picker.dart';
19
20
import '../widgets/camera_picker_viewer.dart' ;
20
21
21
22
class CameraPickerViewerState extends State <CameraPickerViewer > {
23
+ CameraPickerConfig get pickerConfig => widget.pickerConfig;
24
+
22
25
/// Whether the player is playing.
23
26
/// 播放器是否在播放
24
- final ValueNotifier < bool > isPlaying = ValueNotifier <bool >(false );
27
+ final isPlaying = ValueNotifier <bool >(false );
25
28
26
- late final ThemeData theme = widget.pickerConfig.theme ??
27
- CameraPicker .themeData (defaultThemeColorWeChat);
29
+ late final theme =
30
+ pickerConfig.theme ?? CameraPicker .themeData (defaultThemeColorWeChat);
28
31
29
32
/// Construct an [File] instance through [previewXFile] .
30
33
/// 通过 [previewXFile] 构建 [File] 实例。
@@ -49,7 +52,7 @@ class CameraPickerViewerState extends State<CameraPickerViewer> {
49
52
/// Whether the saving process is ongoing.
50
53
bool isSavingEntity = false ;
51
54
52
- CameraErrorHandler ? get onError => widget. pickerConfig.onError;
55
+ CameraErrorHandler ? get onError => pickerConfig.onError;
53
56
54
57
@override
55
58
void initState () {
@@ -73,7 +76,7 @@ class CameraPickerViewerState extends State<CameraPickerViewer> {
73
76
await videoController.initialize ();
74
77
videoController.addListener (videoControllerListener);
75
78
hasLoaded = true ;
76
- if (widget. pickerConfig.shouldAutoPreviewVideo) {
79
+ if (pickerConfig.shouldAutoPreviewVideo) {
77
80
videoController.play ();
78
81
videoController.setLooping (true );
79
82
}
@@ -129,9 +132,9 @@ class CameraPickerViewerState extends State<CameraPickerViewer> {
129
132
});
130
133
131
134
// Handle the explicitly entity saving method.
132
- if (widget. pickerConfig.onEntitySaving != null ) {
135
+ if (pickerConfig.onEntitySaving != null ) {
133
136
try {
134
- await widget. pickerConfig.onEntitySaving !(
137
+ await pickerConfig.onEntitySaving !(
135
138
context,
136
139
widget.viewType,
137
140
File (widget.previewXFile.path),
@@ -148,7 +151,23 @@ class CameraPickerViewerState extends State<CameraPickerViewer> {
148
151
149
152
AssetEntity ? entity;
150
153
try {
151
- final PermissionState ps = await PhotoManager .requestPermissionExtend ();
154
+ final ps = await PhotoManager .requestPermissionExtend (
155
+ requestOption: pickerConfig.permissionRequestOption ??
156
+ PermissionRequestOption (
157
+ iosAccessLevel: IosAccessLevel .addOnly,
158
+ androidPermission: AndroidPermission (
159
+ type: switch ((
160
+ pickerConfig.enableRecording,
161
+ pickerConfig.enableTapRecording
162
+ )) {
163
+ (true , false ) => RequestType .common,
164
+ (true , true ) => RequestType .video,
165
+ (false , _) => RequestType .image,
166
+ },
167
+ mediaLocation: false ,
168
+ ),
169
+ ),
170
+ );
152
171
if (ps == PermissionState .authorized || ps == PermissionState .limited) {
153
172
final filePath = previewFile.path;
154
173
switch (widget.viewType) {
@@ -165,8 +184,7 @@ class CameraPickerViewerState extends State<CameraPickerViewer> {
165
184
);
166
185
break ;
167
186
}
168
- if (widget.pickerConfig.shouldDeletePreviewFile &&
169
- previewFile.existsSync ()) {
187
+ if (pickerConfig.shouldDeletePreviewFile && previewFile.existsSync ()) {
170
188
previewFile.delete ().catchError ((e, s) {
171
189
handleErrorWithHandler (e, s, onError);
172
190
return previewFile;
0 commit comments