Add document scanner
This commit is contained in:
		| @@ -9,6 +9,7 @@ import 'package:moneymgr_mobile/services/storage/prefs.dart'; | ||||
| import 'package:moneymgr_mobile/services/storage/secure_storage.dart'; | ||||
| import 'package:moneymgr_mobile/utils/provider_observer.dart'; | ||||
| import 'package:moneymgr_mobile/utils/theme_utils.dart'; | ||||
| import 'package:scanbot_sdk/scanbot_sdk.dart'; | ||||
|  | ||||
| // Inspired from https://github.com/dhafinrayhan/dummymart | ||||
|  | ||||
| @@ -27,6 +28,14 @@ Future<void> main() async { | ||||
|         print('${record.level.name}: ${record.time}: ${record.message}'), | ||||
|   ); | ||||
|  | ||||
|   // Initialize scanbot sdk | ||||
|   var config = ScanbotSdkConfig( | ||||
|     loggingEnabled: true, | ||||
|     allowGpuAcceleration: true, | ||||
|     allowXnnpackAcceleration: true, | ||||
|   ); | ||||
|   ScanbotSdk.initScanbotSdk(config); | ||||
|  | ||||
|   runApp( | ||||
|     ProviderScope( | ||||
|       observers: [AppProviderObserver()], | ||||
|   | ||||
							
								
								
									
										39
									
								
								moneymgr_mobile/lib/routes/scan/scan_screen.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								moneymgr_mobile/lib/routes/scan/scan_screen.dart
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,39 @@ | ||||
| import 'package:flutter/material.dart'; | ||||
| import 'package:hooks_riverpod/hooks_riverpod.dart'; | ||||
| import 'package:riverpod_annotation/riverpod_annotation.dart'; | ||||
| import 'package:scanbot_sdk/scanbot_sdk_ui_v2.dart'; | ||||
|  | ||||
| part 'scan_screen.g.dart'; | ||||
|  | ||||
| @riverpod | ||||
| Future<String> _scanDocument(Ref ref) async { | ||||
|   var configuration = DocumentScanningFlow( | ||||
|     appearance: DocumentFlowAppearanceConfiguration( | ||||
|       statusBarMode: StatusBarMode.DARK, | ||||
|     ), | ||||
|     cleanScanningSession: true, | ||||
|     outputSettings: DocumentScannerOutputSettings(pagesScanLimit: 1), | ||||
|     screens: DocumentScannerScreens( | ||||
|       review: ReviewScreenConfiguration(enabled: false), | ||||
|     ), | ||||
|   ); | ||||
|   var documentResult = await ScanbotSdkUiV2.startDocumentScanner(configuration); | ||||
|   print("@@@"); | ||||
|   print(documentResult); | ||||
|   print("####"); | ||||
|  | ||||
|   return "changeme"; | ||||
| } | ||||
|  | ||||
| class ScanScreen extends HookConsumerWidget { | ||||
|   @override | ||||
|   Widget build(BuildContext context, WidgetRef ref) { | ||||
|     final boredSuggestion = ref.watch(_scanDocumentProvider); | ||||
|     // Perform a switch-case on the result to handle loading/error states | ||||
|     return switch (boredSuggestion) { | ||||
|       AsyncData(:final value) => Text('data: $value'), | ||||
|       AsyncError(:final error) => Text('error: $error'), | ||||
|       _ => const Center(child: CircularProgressIndicator()), | ||||
|     }; | ||||
|   } | ||||
| } | ||||
| @@ -6,6 +6,7 @@ import 'package:moneymgr_mobile/routes/login/login_screen.dart'; | ||||
| import 'package:moneymgr_mobile/routes/login/manual_auth_screen.dart'; | ||||
| import 'package:moneymgr_mobile/routes/login/qr_auth_screen.dart'; | ||||
| import 'package:moneymgr_mobile/routes/profile/profile_screen.dart'; | ||||
| import 'package:moneymgr_mobile/routes/scan/scan_screen.dart'; | ||||
| import 'package:moneymgr_mobile/routes/settings/settings_screen.dart'; | ||||
| import 'package:moneymgr_mobile/services/router/routes_list.dart'; | ||||
| import 'package:moneymgr_mobile/widgets/load_startup_data.dart'; | ||||
| @@ -34,20 +35,11 @@ GoRouter router(Ref ref) { | ||||
|   // see [AuthState] enum. | ||||
|   final navigationItems = [ | ||||
|     NavigationItem( | ||||
|       path: '/products', | ||||
|       body: (_) => const Text("product screen"), | ||||
|       icon: Icons.widgets_outlined, | ||||
|       selectedIcon: Icons.widgets, | ||||
|       label: 'Products', | ||||
|       routes: [ | ||||
|         GoRoute( | ||||
|           path: ':id', | ||||
|           builder: (_, state) { | ||||
|             final id = int.parse(state.pathParameters['id']!); | ||||
|             return Text("product screen $id"); | ||||
|           }, | ||||
|         ), | ||||
|       ], | ||||
|       path: scanPage, | ||||
|       body: (_) => ScanScreen(), | ||||
|       icon: Icons.camera_alt_outlined, | ||||
|       selectedIcon: Icons.camera_alt, | ||||
|       label: "Scan", | ||||
|     ), | ||||
|     NavigationItem( | ||||
|       path: profilePage, | ||||
|   | ||||
| @@ -13,5 +13,8 @@ const manualAuthPage = "/login/manual"; | ||||
| /// Settings path | ||||
| const settingsPage = "/settings"; | ||||
|  | ||||
| // Profile path | ||||
| /// Scan URL path | ||||
| const scanPage = "/scan"; | ||||
|  | ||||
| /// Profile path | ||||
| const profilePage = "/profile"; | ||||
| @@ -32,8 +32,13 @@ class LoadStartupData extends HookConsumerWidget { | ||||
|   Widget build(BuildContext context, WidgetRef ref) { | ||||
|     final serverConfig = ref.watch(_loadStartupElementsProvider); | ||||
|  | ||||
|     tryAgain() { | ||||
|       ref.refresh(_loadStartupElementsProvider); | ||||
|     tryAgain() async { | ||||
|       try { | ||||
|         final val = ref.refresh(_loadStartupElementsProvider); | ||||
|         Logger.root.info("Load again startup result: $val"); | ||||
|       } catch (e, s) { | ||||
|         Logger.root.shout("Failed to try again startup loading! $e $s"); | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     handleSignOut() { | ||||
|   | ||||
| @@ -816,6 +816,14 @@ packages: | ||||
|       url: "https://pub.dev" | ||||
|     source: hosted | ||||
|     version: "2.6.5" | ||||
|   scanbot_sdk: | ||||
|     dependency: "direct main" | ||||
|     description: | ||||
|       name: scanbot_sdk | ||||
|       sha256: adbd24643e9d7ade1050a0ed4310ace76088cec258970488a7dbe08c3dc5a872 | ||||
|       url: "https://pub.dev" | ||||
|     source: hosted | ||||
|     version: "7.0.0" | ||||
|   shared_preferences: | ||||
|     dependency: "direct main" | ||||
|     description: | ||||
|   | ||||
| @@ -80,6 +80,11 @@ dependencies: | ||||
|   confirm_dialog: ^1.0.4 | ||||
|   alert_dialog: ^1.0.2 | ||||
|  | ||||
|   # Document scanner | ||||
|   # flutter_doc_scanner: ^0.0.16 # no bundled support yet | ||||
|   # https://developers.google.com/ml-kit/tips/installation-paths | ||||
|   scanbot_sdk: ^7.0.0 | ||||
|  | ||||
| dev_dependencies: | ||||
|   flutter_test: | ||||
|     sdk: flutter | ||||
|   | ||||
		Reference in New Issue
	
	Block a user