@@ -143,14 +143,11 @@ class CameraPicker extends StatefulWidget {
143
143
ImageFormatGroup imageFormatGroup = ImageFormatGroup .unknown,
144
144
Widget Function (CameraValue )? foregroundBuilder,
145
145
EntitySaveCallback ? onEntitySaving,
146
- }) async {
146
+ }) {
147
147
if (enableRecording != true && onlyEnableRecording == true ) {
148
148
throw ArgumentError ('Recording mode error.' );
149
149
}
150
- final AssetEntity ? result = await Navigator .of (
151
- context,
152
- rootNavigator: true ,
153
- ).push <AssetEntity >(
150
+ return Navigator .of (context, rootNavigator: true ).push <AssetEntity >(
154
151
SlidePageTransitionBuilder <AssetEntity >(
155
152
builder: CameraPicker (
156
153
enableRecording: enableRecording,
@@ -174,7 +171,6 @@ class CameraPicker extends StatefulWidget {
174
171
transitionDuration: _kRouteDuration,
175
172
),
176
173
);
177
- return result;
178
174
}
179
175
180
176
/// Build a dark theme according to the theme color.
@@ -387,12 +383,7 @@ class CameraPickerState extends State<CameraPicker>
387
383
388
384
Future <void >.delayed (_kRouteDuration, () {
389
385
if (mounted) {
390
- try {
391
- initCameras ();
392
- } catch (e) {
393
- realDebugPrint ('Error when initializing: $e ' );
394
- Navigator .of (context).pop ();
395
- }
386
+ initCameras ();
396
387
}
397
388
});
398
389
}
@@ -511,8 +502,10 @@ class CameraPickerState extends State<CameraPicker>
511
502
// After cameras fetched, judge again with the list is empty or not to
512
503
// ensure there is at least an available camera for use.
513
504
if (cameraDescription == null && (cameras.isEmpty)) {
514
- realDebugPrint ('No cameras found.' );
515
- return ;
505
+ throw CameraException (
506
+ 'No CameraDescription found.' ,
507
+ 'No cameras are available in the controller.' ,
508
+ );
516
509
}
517
510
518
511
// Initialize the controller with the given resolution preset.
@@ -523,7 +516,10 @@ class CameraPickerState extends State<CameraPicker>
523
516
imageFormatGroup: widget.imageFormatGroup,
524
517
)..addListener (() {
525
518
if (controller.value.hasError) {
526
- realDebugPrint ('Camera error ${controller .value .errorDescription }' );
519
+ throw CameraException (
520
+ 'CameraController exception' ,
521
+ controller.value.errorDescription,
522
+ );
527
523
}
528
524
});
529
525
@@ -539,8 +535,8 @@ class CameraPickerState extends State<CameraPicker>
539
535
(() async =>
540
536
_minAvailableZoom = await controller.getMinZoomLevel ())(),
541
537
]);
542
- } on CameraException catch (e ) {
543
- realDebugPrint ( 'CameraException: $ e ' ) ;
538
+ } catch (_ ) {
539
+ rethrow ;
544
540
} finally {
545
541
safeSetState (() {});
546
542
}
@@ -564,21 +560,17 @@ class CameraPickerState extends State<CameraPicker>
564
560
/// The method to switch between flash modes.
565
561
/// 切换闪光灯模式的方法
566
562
Future <void > switchFlashesMode () async {
567
- try {
568
- switch (controller.value.flashMode) {
569
- case FlashMode .off:
570
- await controller.setFlashMode (FlashMode .auto);
571
- break ;
572
- case FlashMode .auto:
573
- await controller.setFlashMode (FlashMode .always);
574
- break ;
575
- case FlashMode .always:
576
- case FlashMode .torch:
577
- await controller.setFlashMode (FlashMode .off);
578
- break ;
579
- }
580
- } catch (e) {
581
- realDebugPrint ('Error when switch flash mode: $e ' );
563
+ switch (controller.value.flashMode) {
564
+ case FlashMode .off:
565
+ await controller.setFlashMode (FlashMode .auto);
566
+ break ;
567
+ case FlashMode .auto:
568
+ await controller.setFlashMode (FlashMode .always);
569
+ break ;
570
+ case FlashMode .always:
571
+ case FlashMode .torch:
572
+ await controller.setFlashMode (FlashMode .off);
573
+ break ;
582
574
}
583
575
}
584
576
@@ -731,23 +723,19 @@ class CameraPickerState extends State<CameraPicker>
731
723
/// 仅当初始化成功且相机未在拍照时拍照。
732
724
Future <void > takePicture () async {
733
725
if (controller.value.isInitialized && ! controller.value.isTakingPicture) {
734
- try {
735
- final AssetEntity ? entity = await CameraPickerViewer .pushToViewer (
736
- context,
737
- pickerState: this ,
738
- pickerType: CameraPickerViewType .image,
739
- previewXFile: await controller.takePicture (),
740
- theme: theme,
741
- shouldDeletePreviewFile: shouldDeletePreviewFile,
742
- onEntitySaving: widget.onEntitySaving,
743
- );
744
- if (entity != null ) {
745
- Navigator .of (context).pop (entity);
746
- } else {
747
- safeSetState (() {});
748
- }
749
- } catch (e) {
750
- realDebugPrint ('Error when taking pictures: $e ' );
726
+ final AssetEntity ? entity = await CameraPickerViewer .pushToViewer (
727
+ context,
728
+ pickerState: this ,
729
+ pickerType: CameraPickerViewType .image,
730
+ previewXFile: await controller.takePicture (),
731
+ theme: theme,
732
+ shouldDeletePreviewFile: shouldDeletePreviewFile,
733
+ onEntitySaving: widget.onEntitySaving,
734
+ );
735
+ if (entity != null ) {
736
+ Navigator .of (context).pop (entity);
737
+ } else {
738
+ safeSetState (() {});
751
739
}
752
740
}
753
741
}
@@ -798,13 +786,15 @@ class CameraPickerState extends State<CameraPicker>
798
786
stopRecordingVideo ();
799
787
});
800
788
}
801
- }).catchError ((dynamic e) {
802
- realDebugPrint ('Error when recording video: $e ' );
789
+ }).catchError ((Object e) {
790
+ realDebugPrint ('Error when start recording video: $e ' );
803
791
if (controller.value.isRecordingVideo) {
804
- controller.stopVideoRecording ().catchError ((dynamic e) {
792
+ controller.stopVideoRecording ().catchError ((Object e) {
805
793
realDebugPrint ('Error when stop recording video: $e ' );
794
+ throw e;
806
795
});
807
796
}
797
+ throw e;
808
798
});
809
799
}
810
800
}
@@ -827,8 +817,9 @@ class CameraPickerState extends State<CameraPicker>
827
817
} else {
828
818
safeSetState (() {});
829
819
}
830
- }).catchError ((dynamic e) {
820
+ }).catchError ((Object e) {
831
821
realDebugPrint ('Error when stop recording video: $e ' );
822
+ throw e;
832
823
}).whenComplete (() {
833
824
isShootingButtonAnimate = false ;
834
825
});
0 commit comments