Skip to content

Commit 092e244

Browse files
committed
🥅 Silents part of thumbnail request exceptions
1 parent 0fa4264 commit 092e244

File tree

9 files changed

+90
-58
lines changed

9 files changed

+90
-58
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@ that can be found in the LICENSE file. -->
1212
- Add Turkish language text delegate. (#331).
1313
- Allow to confirm 0 assets if there are selected assets previously. (#461)
1414

15+
### Improvements
16+
17+
- Silents part of thumbnail request exceptions.
18+
1519
### Fixes
1620

1721
- Fix semantics interactions for video preview. (#458)

lib/src/constants/constants.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
import 'package:flutter/painting.dart';
66
import 'package:photo_manager/photo_manager.dart';
77

8+
const String packageName = 'wechat_assets_picker';
9+
810
const int defaultAssetsPerPage = 80;
911
const int defaultMaxAssetsCount = 9;
1012

lib/src/delegates/asset_picker_delegate.dart

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import 'package:photo_manager/photo_manager.dart';
88

99
import '../constants/config.dart';
1010
import '../constants/constants.dart';
11-
import '../internal/methods.dart';
1211
import '../provider/asset_picker_provider.dart';
1312
import '../widget/asset_picker.dart';
1413
import '../widget/asset_picker_page_route.dart';
@@ -165,8 +164,15 @@ class AssetPickerDelegate {
165164
try {
166165
PhotoManager.addChangeCallback(callback);
167166
PhotoManager.startChangeNotify();
168-
} catch (e) {
169-
realDebugPrint('Error when registering assets callback: $e');
167+
} catch (e, s) {
168+
FlutterError.presentError(
169+
FlutterErrorDetails(
170+
exception: e,
171+
stack: s,
172+
library: packageName,
173+
silent: true,
174+
),
175+
);
170176
}
171177
}
172178

@@ -181,8 +187,15 @@ class AssetPickerDelegate {
181187
try {
182188
PhotoManager.removeChangeCallback(callback);
183189
PhotoManager.stopChangeNotify();
184-
} catch (e) {
185-
realDebugPrint('Error when unregistering assets callback: $e');
190+
} catch (e, s) {
191+
FlutterError.presentError(
192+
FlutterErrorDetails(
193+
exception: e,
194+
stack: s,
195+
library: packageName,
196+
silent: true,
197+
),
198+
);
186199
}
187200
}
188201

lib/src/internal/methods.dart

Lines changed: 0 additions & 15 deletions
This file was deleted.

lib/src/provider/asset_picker_provider.dart

Lines changed: 40 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -419,36 +419,48 @@ class DefaultAssetPickerProvider
419419
Future<Uint8List?> getThumbnailFromPath(
420420
PathWrapper<AssetPathEntity> path,
421421
) async {
422-
if (requestType == RequestType.audio) {
423-
return null;
424-
}
425-
final int assetCount = path.assetCount ?? await path.path.assetCountAsync;
426-
if (assetCount == 0) {
427-
return null;
428-
}
429-
final List<AssetEntity> assets = await path.path.getAssetListRange(
430-
start: 0,
431-
end: 1,
432-
);
433-
if (assets.isEmpty) {
434-
return null;
435-
}
436-
final AssetEntity asset = assets.single;
437-
// Obtain the thumbnail only when the asset is image or video.
438-
if (asset.type != AssetType.image && asset.type != AssetType.video) {
422+
try {
423+
if (requestType == RequestType.audio) {
424+
return null;
425+
}
426+
final int assetCount = path.assetCount ?? await path.path.assetCountAsync;
427+
if (assetCount == 0) {
428+
return null;
429+
}
430+
final List<AssetEntity> assets = await path.path.getAssetListRange(
431+
start: 0,
432+
end: 1,
433+
);
434+
if (assets.isEmpty) {
435+
return null;
436+
}
437+
final AssetEntity asset = assets.single;
438+
// Obtain the thumbnail only when the asset is image or video.
439+
if (asset.type != AssetType.image && asset.type != AssetType.video) {
440+
return null;
441+
}
442+
final Uint8List? data = await asset.thumbnailDataWithSize(
443+
pathThumbnailSize,
444+
);
445+
final int index = _paths.indexWhere(
446+
(PathWrapper<AssetPathEntity> p) => p.path == path.path,
447+
);
448+
if (index != -1) {
449+
_paths[index] = _paths[index].copyWith(thumbnailData: data);
450+
notifyListeners();
451+
}
452+
return data;
453+
} catch (e, s) {
454+
FlutterError.presentError(
455+
FlutterErrorDetails(
456+
exception: e,
457+
stack: s,
458+
library: packageName,
459+
silent: true,
460+
),
461+
);
439462
return null;
440463
}
441-
final Uint8List? data = await asset.thumbnailDataWithSize(
442-
pathThumbnailSize,
443-
);
444-
final int index = _paths.indexWhere(
445-
(PathWrapper<AssetPathEntity> p) => p.path == path.path,
446-
);
447-
if (index != -1) {
448-
_paths[index] = _paths[index].copyWith(thumbnailData: data);
449-
notifyListeners();
450-
}
451-
return data;
452464
}
453465

454466
Future<void> getAssetCountFromPath(PathWrapper<AssetPathEntity> path) async {

lib/src/widget/builder/audio_page_builder.dart

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ import 'package:flutter/material.dart';
88
import 'package:photo_manager/photo_manager.dart';
99
import 'package:video_player/video_player.dart';
1010

11+
import '../../constants/constants.dart';
1112
import '../../constants/extensions.dart';
12-
import '../../internal/methods.dart';
1313
import '../../internal/singleton.dart';
1414
import '../scale_text.dart';
1515

@@ -93,8 +93,15 @@ class _AudioPageBuilderState extends State<AudioPageBuilder> {
9393
_controller = VideoPlayerController.networkUrl(Uri.parse(url!));
9494
await controller.initialize();
9595
controller.addListener(audioPlayerListener);
96-
} catch (e) {
97-
realDebugPrint('Error when opening audio file: $e');
96+
} catch (e, s) {
97+
FlutterError.presentError(
98+
FlutterErrorDetails(
99+
exception: e,
100+
stack: s,
101+
library: packageName,
102+
silent: true,
103+
),
104+
);
98105
} finally {
99106
isLoaded = true;
100107
if (mounted) {

lib/src/widget/builder/locally_available_builder.dart

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@
22
// Use of this source code is governed by an Apache license that can be found
33
// in the LICENSE file.
44

5+
import 'dart:developer' as dev;
56
import 'dart:io';
67

78
import 'package:flutter/material.dart';
89
import 'package:photo_manager/photo_manager.dart';
910

1011
import '../../constants/extensions.dart';
11-
import '../../internal/methods.dart';
1212
import '../scale_text.dart';
1313

1414
class LocallyAvailableBuilder extends StatefulWidget {
@@ -65,7 +65,6 @@ class _LocallyAvailableBuilderState extends State<LocallyAvailableBuilder> {
6565
withSubtype: true,
6666
progressHandler: _progressHandler,
6767
);
68-
realDebugPrint('Produced file: $file.');
6968
if (file != null) {
7069
_isLocallyAvailable = true;
7170
if (mounted) {
@@ -75,7 +74,10 @@ class _LocallyAvailableBuilderState extends State<LocallyAvailableBuilder> {
7574
});
7675
}
7776
_progressHandler?.stream.listen((PMProgressState s) {
78-
realDebugPrint('Handling progress: $s.');
77+
assert(() {
78+
dev.log('Handling progress: $s.');
79+
return true;
80+
}());
7981
if (s.state == PMRequestState.success) {
8082
_isLocallyAvailable = true;
8183
if (mounted) {

lib/src/widget/builder/video_page_builder.dart

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ import 'package:flutter/material.dart';
88
import 'package:photo_manager/photo_manager.dart';
99
import 'package:video_player/video_player.dart';
1010

11+
import '../../constants/constants.dart';
1112
import '../../delegates/asset_picker_viewer_builder_delegate.dart';
12-
import '../../internal/methods.dart';
1313
import '../../internal/singleton.dart';
1414
import '../scale_text.dart';
1515
import 'locally_available_builder.dart';
@@ -117,8 +117,15 @@ class _VideoPageBuilderState extends State<VideoPageBuilder> {
117117
if (widget.hasOnlyOneVideoAndMoment) {
118118
controller.play();
119119
}
120-
} catch (e) {
121-
realDebugPrint('Error when initialize video controller: $e');
120+
} catch (e, s) {
121+
FlutterError.presentError(
122+
FlutterErrorDetails(
123+
exception: e,
124+
stack: s,
125+
library: packageName,
126+
silent: true,
127+
),
128+
);
122129
hasErrorWhenInitializing = true;
123130
} finally {
124131
if (mounted) {

lib/wechat_assets_picker.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ library wechat_assets_picker;
77
export 'package:photo_manager/photo_manager.dart';
88

99
export 'src/constants/config.dart';
10-
export 'src/constants/constants.dart';
10+
export 'src/constants/constants.dart' hide packageName;
1111
export 'src/constants/enums.dart';
1212
export 'src/constants/typedefs.dart';
1313

0 commit comments

Comments
 (0)