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