forked from Cutlery/immich
		
	* refactor: autoroutex pushroute * refactor: autoroutex popRoute * refactor: autoroutex navigate and replace * chore: add doc comments for extension methods * refactor: Add LoggerMixin and refactor Album activities to use mixin * refactor: Activity page * chore: activity user from user constructor * fix: update current asset after build method * refactor: tests with similar structure as lib * chore: remove avoid-declaring-call-method rule from dcm analysis * test: fix proper expect order * test: activity_statistics_provider_test * test: activity_provider_test * test: use proper matchers * test: activity_text_field_test & dismissible_activity_test added * test: add http mock to return transparent image * test: download isar core libs during test * test: add widget tags to widget test cases * test: activity_tile_test * build: currentAlbumProvider to generator * movie add / remove like to activity input tile * test: activities_page_test.dart * chore: better error logs * chore: dismissibleactivity as statelesswidget --------- Co-authored-by: shalong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
		
			
				
	
	
		
			39 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
			
		
		
	
	
			39 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
| import 'package:hooks_riverpod/hooks_riverpod.dart';
 | |
| import 'package:logging/logging.dart';
 | |
| 
 | |
| typedef AsyncFuture<T> = Future<AsyncValue<T>>;
 | |
| 
 | |
| mixin ErrorLoggerMixin {
 | |
|   abstract final Logger logger;
 | |
| 
 | |
|   /// Returns an AsyncValue<T> if the future is successfully executed
 | |
|   /// Else, logs the error to the overrided logger and returns an AsyncError<>
 | |
|   AsyncFuture<T> guardError<T>(
 | |
|     Future<T> Function() fn, {
 | |
|     Level logLevel = Level.SEVERE,
 | |
|   }) async {
 | |
|     try {
 | |
|       final result = await fn();
 | |
|       return AsyncData(result);
 | |
|     } catch (error, stackTrace) {
 | |
|       logger.log(logLevel, "$error", error, stackTrace);
 | |
|       return AsyncError(error, stackTrace);
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   /// Returns the result of the future if success
 | |
|   /// Else, logs the error and returns the default value
 | |
|   Future<T> logError<T>(
 | |
|     Future<T> Function() fn, {
 | |
|     required T defaultValue,
 | |
|     Level logLevel = Level.SEVERE,
 | |
|   }) async {
 | |
|     try {
 | |
|       return await fn();
 | |
|     } catch (error, stackTrace) {
 | |
|       logger.log(logLevel, "$error", error, stackTrace);
 | |
|     }
 | |
|     return defaultValue;
 | |
|   }
 | |
| }
 |