feat: Add receipt import functionality with file upload and parsing
- Implemented receipt file upload in ImportRepository with multipart request handling. - Created ParsedReceiptItem model for parsed receipt data. - Added ReceiptImportTab for user interface to upload and review receipts. - Updated ImportScreen to include the new ReceiptImportTab alongside RecipeImportTab. - Introduced flutter_bootstrap.js and index.html for web app initialization. - Added wimp.wasm and flutter.js for enhanced web performance and capabilities.
This commit is contained in:
@@ -6,9 +6,7 @@
|
||||
// @dart = 3.3
|
||||
|
||||
import 'dart:io'; // flutter_ignore: dart_io_import.
|
||||
import 'package:file_picker/file_picker.dart' as file_picker;
|
||||
import 'package:shared_preferences_android/shared_preferences_android.dart' as shared_preferences_android;
|
||||
import 'package:file_picker/file_picker.dart' as file_picker;
|
||||
import 'package:shared_preferences_foundation/shared_preferences_foundation.dart' as shared_preferences_foundation;
|
||||
import 'package:file_picker/file_picker.dart' as file_picker;
|
||||
import 'package:path_provider_linux/path_provider_linux.dart' as path_provider_linux;
|
||||
@@ -25,15 +23,6 @@ class _PluginRegistrant {
|
||||
@pragma('vm:entry-point')
|
||||
static void register() {
|
||||
if (Platform.isAndroid) {
|
||||
try {
|
||||
file_picker.FilePickerIO.registerWith();
|
||||
} catch (err) {
|
||||
print(
|
||||
'`file_picker` threw an error: $err. '
|
||||
'The app may not function as expected until you remove this plugin from pubspec.yaml'
|
||||
);
|
||||
}
|
||||
|
||||
try {
|
||||
shared_preferences_android.SharedPreferencesAndroid.registerWith();
|
||||
} catch (err) {
|
||||
@@ -44,15 +33,6 @@ class _PluginRegistrant {
|
||||
}
|
||||
|
||||
} else if (Platform.isIOS) {
|
||||
try {
|
||||
file_picker.FilePickerIO.registerWith();
|
||||
} catch (err) {
|
||||
print(
|
||||
'`file_picker` threw an error: $err. '
|
||||
'The app may not function as expected until you remove this plugin from pubspec.yaml'
|
||||
);
|
||||
}
|
||||
|
||||
try {
|
||||
shared_preferences_foundation.SharedPreferencesFoundation.registerWith();
|
||||
} catch (err) {
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
{"version":2,"files":[{"path":"C:\\Users\\Nils-JohanGynther\\dev\\recipe-app\\flutter\\lib\\l10n\\generated\\app_localizations_sv.dart","hash":"f1e13c0f9c90ec81955912c7df8a2430"},{"path":"C:\\Users\\Nils-JohanGynther\\dev\\recipe-app\\flutter\\l10n.yaml","hash":"3a6f56d787f3093703fe91c15fc15342"},{"path":"C:\\Users\\Nils-JohanGynther\\AppData\\Local\\Programs\\flutter\\packages\\flutter_tools\\lib\\src\\build_system\\targets\\web.dart","hash":"790d5e3c840d25a312d1b8a625f34500"},{"path":"C:\\Users\\Nils-JohanGynther\\AppData\\Local\\Programs\\flutter\\bin\\cache\\engine.stamp","hash":"44f9d05c1ceacb7f1911501881fdad84"},{"path":"C:\\Users\\Nils-JohanGynther\\dev\\recipe-app\\flutter\\lib\\l10n\\app_sv.arb","hash":"24892b1e0a97f7e262e95bec62340fad"},{"path":"C:\\Users\\Nils-JohanGynther\\AppData\\Local\\Programs\\flutter\\packages\\flutter_tools\\lib\\src\\build_system\\targets\\native_assets.dart","hash":"f78c405bcece3968277b212042da9ed6"},{"path":"C:\\Users\\Nils-JohanGynther\\dev\\recipe-app\\flutter\\.dart_tool\\flutter_build\\f8c96b9ba70d270e1df926aec2a1e154\\main.dart","hash":"a45a5a08a75f55e5a5f771de1ed16f41"},{"path":"C:\\Users\\Nils-JohanGynther\\AppData\\Local\\Programs\\flutter\\packages\\flutter_tools\\lib\\src\\build_system\\targets\\localizations.dart","hash":"33a276900ad78ff1cd267a3483f69235"},{"path":"C:\\Users\\Nils-JohanGynther\\dev\\recipe-app\\flutter\\lib\\l10n\\generated\\app_localizations_en.dart","hash":"e6e1e4bddc2ee4d8ee8385d6eea4e3c6"},{"path":"C:\\Users\\Nils-JohanGynther\\dev\\recipe-app\\flutter\\.dart_tool\\flutter_build\\f8c96b9ba70d270e1df926aec2a1e154\\dart_build_result.json","hash":"599fc661078b15e1e46c169dc3e2408a"},{"path":"C:\\Users\\Nils-JohanGynther\\dev\\recipe-app\\flutter\\build\\web\\flutter_bootstrap.js","hash":"d3d625dad1ff440d5b846a0c57755198"},{"path":"C:\\Users\\Nils-JohanGynther\\dev\\recipe-app\\flutter\\lib\\l10n\\app_en.arb","hash":"e6bd7c70391c9b7e84f8d1c6d59b6638"},{"path":"C:\\Users\\Nils-JohanGynther\\dev\\recipe-app\\flutter\\.dart_tool\\package_config.json","hash":"7502efdbbd009dd6f44e829774232f31"},{"path":"C:\\Users\\Nils-JohanGynther\\dev\\recipe-app\\flutter\\lib\\l10n\\generated\\app_localizations.dart","hash":"7110f582493fdc56442a8e9e76ccf71d"}]}
|
||||
@@ -0,0 +1 @@
|
||||
{"inputs":["C:\\Users\\Nils-JohanGynther\\AppData\\Local\\Programs\\flutter\\bin\\cache\\engine.stamp","C:\\Users\\Nils-JohanGynther\\AppData\\Local\\Programs\\flutter\\bin\\cache\\engine.stamp","C:\\Users\\Nils-JohanGynther\\dev\\recipe-app\\flutter\\.dart_tool\\flutter_build\\f8c96b9ba70d270e1df926aec2a1e154\\main.dart","C:\\Users\\Nils-JohanGynther\\dev\\recipe-app\\flutter\\.dart_tool\\package_config.json"],"outputs":[],"buildKey":"{\"optimizationLevel\":null,\"webRenderer\":\"skwasm\",\"StripWasm\":true,\"minify\":null,\"dryRun\":true,\"SourceMaps\":false}"}
|
||||
@@ -0,0 +1 @@
|
||||
C:\\Users\\Nils-JohanGynther\\dev\\recipe-app\\flutter\\.dart_tool\\flutter_build\\f8c96b9ba70d270e1df926aec2a1e154\\dart_build_result.json:
|
||||
@@ -0,0 +1 @@
|
||||
{"inputs":["C:\\Users\\Nils-JohanGynther\\AppData\\Local\\Programs\\flutter\\packages\\flutter_tools\\lib\\src\\build_system\\targets\\native_assets.dart","C:\\Users\\Nils-JohanGynther\\dev\\recipe-app\\flutter\\.dart_tool\\package_config.json"],"outputs":["C:\\Users\\Nils-JohanGynther\\dev\\recipe-app\\flutter\\.dart_tool\\flutter_build\\f8c96b9ba70d270e1df926aec2a1e154\\dart_build_result.json","C:\\Users\\Nils-JohanGynther\\dev\\recipe-app\\flutter\\.dart_tool\\flutter_build\\f8c96b9ba70d270e1df926aec2a1e154\\dart_build_result.json"]}
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"build_start":"2026-04-23T19:22:42.204321","build_end":"2026-04-23T19:22:42.204321","dependencies":[],"code_assets":[],"data_assets":[]}
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"inputs":["C:\\Users\\Nils-JohanGynther\\dev\\recipe-app\\flutter\\lib\\l10n\\app_en.arb","C:\\Users\\Nils-JohanGynther\\dev\\recipe-app\\flutter\\lib\\l10n\\app_sv.arb"],"outputs":["C:\\Users\\Nils-JohanGynther\\dev\\recipe-app\\flutter\\lib\\l10n\\generated\\app_localizations_en.dart","C:\\Users\\Nils-JohanGynther\\dev\\recipe-app\\flutter\\lib\\l10n\\generated\\app_localizations_sv.dart","C:\\Users\\Nils-JohanGynther\\dev\\recipe-app\\flutter\\lib\\l10n\\generated\\app_localizations.dart"]}
|
||||
@@ -0,0 +1 @@
|
||||
C:\\Users\\Nils-JohanGynther\\dev\\recipe-app\\flutter\\lib\\l10n\\generated\\app_localizations_en.dart C:\\Users\\Nils-JohanGynther\\dev\\recipe-app\\flutter\\lib\\l10n\\generated\\app_localizations_sv.dart C:\\Users\\Nils-JohanGynther\\dev\\recipe-app\\flutter\\lib\\l10n\\generated\\app_localizations.dart: C:\\Users\\Nils-JohanGynther\\dev\\recipe-app\\flutter\\l10n.yaml C:\\Users\\Nils-JohanGynther\\dev\\recipe-app\\flutter\\lib\\l10n\\app_en.arb C:\\Users\\Nils-JohanGynther\\dev\\recipe-app\\flutter\\lib\\l10n\\app_sv.arb
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"inputs":["C:\\Users\\Nils-JohanGynther\\AppData\\Local\\Programs\\flutter\\packages\\flutter_tools\\lib\\src\\build_system\\targets\\localizations.dart","C:\\Users\\Nils-JohanGynther\\dev\\recipe-app\\flutter\\l10n.yaml","C:\\Users\\Nils-JohanGynther\\dev\\recipe-app\\flutter\\lib\\l10n\\app_en.arb","C:\\Users\\Nils-JohanGynther\\dev\\recipe-app\\flutter\\lib\\l10n\\app_sv.arb"],"outputs":["C:\\Users\\Nils-JohanGynther\\dev\\recipe-app\\flutter\\lib\\l10n\\generated\\app_localizations_en.dart","C:\\Users\\Nils-JohanGynther\\dev\\recipe-app\\flutter\\lib\\l10n\\generated\\app_localizations_sv.dart","C:\\Users\\Nils-JohanGynther\\dev\\recipe-app\\flutter\\lib\\l10n\\generated\\app_localizations.dart"]}
|
||||
@@ -0,0 +1,30 @@
|
||||
// @dart=3.3
|
||||
// Flutter web bootstrap script for package:recipe_flutter/main.dart.
|
||||
//
|
||||
// Generated file. Do not edit.
|
||||
//
|
||||
|
||||
// ignore_for_file: type=lint
|
||||
|
||||
import 'dart:ui_web' as ui_web;
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:recipe_flutter/main.dart' as entrypoint;
|
||||
import 'web_plugin_registrant.dart' as pluginRegistrant;
|
||||
|
||||
typedef _UnaryFunction = dynamic Function(List<String> args);
|
||||
typedef _NullaryFunction = dynamic Function();
|
||||
|
||||
Future<void> main() async {
|
||||
await ui_web.bootstrapEngine(
|
||||
runApp: () {
|
||||
if (entrypoint.main is _UnaryFunction) {
|
||||
return (entrypoint.main as _UnaryFunction)(<String>[]);
|
||||
}
|
||||
return (entrypoint.main as _NullaryFunction)();
|
||||
},
|
||||
registerPlugins: () {
|
||||
pluginRegistrant.registerPlugins();
|
||||
},
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
["C:\\Users\\Nils-JohanGynther\\dev\\recipe-app\\flutter\\build\\web\\*\\index.html","C:\\Users\\Nils-JohanGynther\\dev\\recipe-app\\flutter\\build\\web\\flutter_bootstrap.js","C:\\Users\\Nils-JohanGynther\\dev\\recipe-app\\flutter\\lib\\l10n\\generated\\app_localizations_en.dart","C:\\Users\\Nils-JohanGynther\\dev\\recipe-app\\flutter\\lib\\l10n\\generated\\app_localizations_sv.dart","C:\\Users\\Nils-JohanGynther\\dev\\recipe-app\\flutter\\lib\\l10n\\generated\\app_localizations.dart"]
|
||||
@@ -0,0 +1 @@
|
||||
{"inputs":["C:\\Users\\Nils-JohanGynther\\AppData\\Local\\Programs\\flutter\\packages\\flutter_tools\\lib\\src\\build_system\\targets\\web.dart"],"outputs":["C:\\Users\\Nils-JohanGynther\\dev\\recipe-app\\flutter\\.dart_tool\\flutter_build\\f8c96b9ba70d270e1df926aec2a1e154\\main.dart"]}
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
// Flutter web plugin registrant file.
|
||||
//
|
||||
// Generated file. Do not edit.
|
||||
//
|
||||
|
||||
// @dart = 2.13
|
||||
// ignore_for_file: type=lint
|
||||
|
||||
import 'package:file_picker/src/platform/web/file_picker_web.dart';
|
||||
import 'package:shared_preferences_web/shared_preferences_web.dart';
|
||||
import 'package:flutter_web_plugins/flutter_web_plugins.dart';
|
||||
|
||||
void registerPlugins([final Registrar? pluginRegistrar]) {
|
||||
final Registrar registrar = pluginRegistrar ?? webPluginRegistrar;
|
||||
FilePickerWeb.registerWith(registrar);
|
||||
SharedPreferencesPlugin.registerWith(registrar);
|
||||
registrar.registerMessageHandler();
|
||||
}
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"inputs":["C:\\Users\\Nils-JohanGynther\\AppData\\Local\\Programs\\flutter\\bin\\cache\\engine.stamp"],"outputs":["C:\\Users\\Nils-JohanGynther\\dev\\recipe-app\\flutter\\.dart_tool\\flutter_build\\f8c96b9ba70d270e1df926aec2a1e154\\flutter.js","C:\\Users\\Nils-JohanGynther\\dev\\recipe-app\\flutter\\.dart_tool\\flutter_build\\f8c96b9ba70d270e1df926aec2a1e154\\canvaskit\\canvaskit.js","C:\\Users\\Nils-JohanGynther\\dev\\recipe-app\\flutter\\.dart_tool\\flutter_build\\f8c96b9ba70d270e1df926aec2a1e154\\canvaskit\\canvaskit.js.symbols","C:\\Users\\Nils-JohanGynther\\dev\\recipe-app\\flutter\\.dart_tool\\flutter_build\\f8c96b9ba70d270e1df926aec2a1e154\\canvaskit\\canvaskit.wasm","C:\\Users\\Nils-JohanGynther\\dev\\recipe-app\\flutter\\.dart_tool\\flutter_build\\f8c96b9ba70d270e1df926aec2a1e154\\canvaskit\\chromium\\canvaskit.js","C:\\Users\\Nils-JohanGynther\\dev\\recipe-app\\flutter\\.dart_tool\\flutter_build\\f8c96b9ba70d270e1df926aec2a1e154\\canvaskit\\chromium\\canvaskit.js.symbols","C:\\Users\\Nils-JohanGynther\\dev\\recipe-app\\flutter\\.dart_tool\\flutter_build\\f8c96b9ba70d270e1df926aec2a1e154\\canvaskit\\chromium\\canvaskit.wasm","C:\\Users\\Nils-JohanGynther\\dev\\recipe-app\\flutter\\.dart_tool\\flutter_build\\f8c96b9ba70d270e1df926aec2a1e154\\canvaskit\\skwasm.js","C:\\Users\\Nils-JohanGynther\\dev\\recipe-app\\flutter\\.dart_tool\\flutter_build\\f8c96b9ba70d270e1df926aec2a1e154\\canvaskit\\skwasm.js.symbols","C:\\Users\\Nils-JohanGynther\\dev\\recipe-app\\flutter\\.dart_tool\\flutter_build\\f8c96b9ba70d270e1df926aec2a1e154\\canvaskit\\skwasm.wasm","C:\\Users\\Nils-JohanGynther\\dev\\recipe-app\\flutter\\.dart_tool\\flutter_build\\f8c96b9ba70d270e1df926aec2a1e154\\canvaskit\\skwasm_heavy.js","C:\\Users\\Nils-JohanGynther\\dev\\recipe-app\\flutter\\.dart_tool\\flutter_build\\f8c96b9ba70d270e1df926aec2a1e154\\canvaskit\\skwasm_heavy.js.symbols","C:\\Users\\Nils-JohanGynther\\dev\\recipe-app\\flutter\\.dart_tool\\flutter_build\\f8c96b9ba70d270e1df926aec2a1e154\\canvaskit\\skwasm_heavy.wasm","C:\\Users\\Nils-JohanGynther\\dev\\recipe-app\\flutter\\.dart_tool\\flutter_build\\f8c96b9ba70d270e1df926aec2a1e154\\canvaskit\\wimp.js","C:\\Users\\Nils-JohanGynther\\dev\\recipe-app\\flutter\\.dart_tool\\flutter_build\\f8c96b9ba70d270e1df926aec2a1e154\\canvaskit\\wimp.js.symbols","C:\\Users\\Nils-JohanGynther\\dev\\recipe-app\\flutter\\.dart_tool\\flutter_build\\f8c96b9ba70d270e1df926aec2a1e154\\canvaskit\\wimp.wasm"]}
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"inputs":["C:\\Users\\Nils-JohanGynther\\dev\\recipe-app\\flutter\\web\\*\\index.html","C:\\Users\\Nils-JohanGynther\\dev\\recipe-app\\flutter\\web\\flutter_bootstrap.js","C:\\Users\\Nils-JohanGynther\\AppData\\Local\\Programs\\flutter\\bin\\cache\\engine.stamp"],"outputs":["C:\\Users\\Nils-JohanGynther\\dev\\recipe-app\\flutter\\build\\web\\*\\index.html","C:\\Users\\Nils-JohanGynther\\dev\\recipe-app\\flutter\\build\\web\\flutter_bootstrap.js"],"buildKey":"[{\"compileTarget\":\"dart2js\",\"renderer\":\"canvaskit\",\"mainJsPath\":\"main.dart.js\"},{}]"}
|
||||
Reference in New Issue
Block a user