Skip to content

Commit d935c56

Browse files
committed
🚀 Export CameraPickerPageRoute
1 parent 3a315f4 commit d935c56

File tree

3 files changed

+54
-41
lines changed

3 files changed

+54
-41
lines changed

lib/src/widgets/camera_picker.dart

Lines changed: 27 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import '../internals/methods.dart';
2222
import '../internals/type_defs.dart';
2323
import '../widgets/circular_progress_bar.dart';
2424

25-
import 'builder/slide_page_transition_builder.dart';
25+
import 'camera_picker_page_route.dart';
2626
import 'camera_picker_viewer.dart';
2727
import 'exposure_point_widget.dart';
2828

@@ -193,41 +193,40 @@ class CameraPicker extends StatefulWidget {
193193
EntitySaveCallback? onEntitySaving,
194194
CameraErrorHandler? onError,
195195
bool useRootNavigator = true,
196+
CameraPickerPageRouteBuilder<AssetEntity>? pageRouteBuilder,
196197
}) {
197198
if (enableRecording != true && onlyEnableRecording == true) {
198199
throw ArgumentError('Recording mode error.');
199200
}
201+
final Widget picker = CameraPicker(
202+
enableRecording: enableRecording,
203+
onlyEnableRecording: onlyEnableRecording,
204+
enableTapRecording: enableTapRecording,
205+
enableAudio: enableAudio,
206+
enableSetExposure: enableSetExposure,
207+
enableExposureControlOnPoint: enableExposureControlOnPoint,
208+
enablePinchToZoom: enablePinchToZoom,
209+
enablePullToZoomInRecord: enablePullToZoomInRecord,
210+
shouldDeletePreviewFile: shouldDeletePreviewFile,
211+
shouldAutoPreviewVideo: shouldAutoPreviewVideo,
212+
maximumRecordingDuration: maximumRecordingDuration,
213+
theme: theme,
214+
cameraQuarterTurns: cameraQuarterTurns,
215+
textDelegate: textDelegate,
216+
resolutionPreset: resolutionPreset,
217+
imageFormatGroup: imageFormatGroup,
218+
preferredLensDirection: preferredLensDirection,
219+
lockCaptureOrientation: lockCaptureOrientation,
220+
foregroundBuilder: foregroundBuilder,
221+
onEntitySaving: onEntitySaving,
222+
onError: onError,
223+
);
200224
return Navigator.of(
201225
context,
202226
rootNavigator: useRootNavigator,
203227
).push<AssetEntity>(
204-
SlidePageTransitionBuilder<AssetEntity>(
205-
builder: CameraPicker(
206-
enableRecording: enableRecording,
207-
onlyEnableRecording: onlyEnableRecording,
208-
enableTapRecording: enableTapRecording,
209-
enableAudio: enableAudio,
210-
enableSetExposure: enableSetExposure,
211-
enableExposureControlOnPoint: enableExposureControlOnPoint,
212-
enablePinchToZoom: enablePinchToZoom,
213-
enablePullToZoomInRecord: enablePullToZoomInRecord,
214-
shouldDeletePreviewFile: shouldDeletePreviewFile,
215-
shouldAutoPreviewVideo: shouldAutoPreviewVideo,
216-
maximumRecordingDuration: maximumRecordingDuration,
217-
theme: theme,
218-
cameraQuarterTurns: cameraQuarterTurns,
219-
textDelegate: textDelegate,
220-
resolutionPreset: resolutionPreset,
221-
imageFormatGroup: imageFormatGroup,
222-
preferredLensDirection: preferredLensDirection,
223-
lockCaptureOrientation: lockCaptureOrientation,
224-
foregroundBuilder: foregroundBuilder,
225-
onEntitySaving: onEntitySaving,
226-
onError: onError,
227-
),
228-
transitionCurve: Curves.easeIn,
229-
transitionDuration: _kRouteDuration,
230-
),
228+
pageRouteBuilder?.call(picker) ??
229+
CameraPickerPageRoute<AssetEntity>(builder: (_) => picker),
231230
);
232231
}
233232

lib/src/widgets/builder/slide_page_transition_builder.dart renamed to lib/src/widgets/camera_picker_page_route.dart

Lines changed: 26 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,44 +4,57 @@
44
///
55
import 'package:flutter/material.dart';
66

7+
/// Build [AssetPickerPageRoute] with the given generic type.
8+
/// 构建匹配泛型的 [AssetPickerPageRoute]
9+
typedef CameraPickerPageRouteBuilder<T> = CameraPickerPageRoute<T> Function(
10+
Widget picker,
11+
);
12+
713
/// Built a slide page transition for the picker.
814
/// 为选择器构造一个上下进出的页面过渡动画
9-
class SlidePageTransitionBuilder<T> extends PageRoute<T> {
10-
SlidePageTransitionBuilder({
15+
class CameraPickerPageRoute<T> extends PageRoute<T> {
16+
CameraPickerPageRoute({
1117
required this.builder,
1218
this.transitionCurve = Curves.easeIn,
1319
this.transitionDuration = const Duration(milliseconds: 500),
20+
this.barrierColor,
21+
this.barrierDismissible = false,
22+
this.barrierLabel,
23+
this.maintainState = true,
24+
this.opaque = true,
25+
this.canTransitionFromPredicate,
1426
});
1527

16-
final Widget builder;
28+
final WidgetBuilder builder;
1729

1830
final Curve transitionCurve;
19-
2031
@override
2132
final Duration transitionDuration;
2233

2334
@override
24-
final bool opaque = true;
25-
35+
final Color? barrierColor;
2636
@override
27-
final bool barrierDismissible = false;
28-
37+
final bool barrierDismissible;
2938
@override
30-
final bool maintainState = true;
31-
39+
final String? barrierLabel;
40+
@override
41+
final bool opaque;
3242
@override
33-
Color? get barrierColor => null;
43+
final bool maintainState;
44+
45+
final bool Function(TransitionRoute<dynamic>)? canTransitionFromPredicate;
3446

3547
@override
36-
String? get barrierLabel => null;
48+
bool canTransitionFrom(TransitionRoute<dynamic> previousRoute) =>
49+
canTransitionFromPredicate?.call(previousRoute) ?? false;
3750

3851
@override
3952
Widget buildPage(
4053
BuildContext context,
4154
Animation<double> animation,
4255
Animation<double> secondaryAnimation,
4356
) {
44-
return builder;
57+
return builder(context);
4558
}
4659

4760
@override

lib/wechat_camera_picker.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,4 @@ export 'package:photo_manager/photo_manager.dart';
55

66
export 'src/delegates/camera_picker_text_delegate.dart';
77
export 'src/widgets/camera_picker.dart';
8+
export 'src/widgets/camera_picker_page_route.dart';

0 commit comments

Comments
 (0)