This commit is contained in:
JMARyA 2024-10-08 10:11:18 +02:00
parent b13b385cb7
commit fcecb5aad5
Signed by: jmarya
GPG key ID: 901B2ADDF27C2263
11 changed files with 186 additions and 129 deletions

View file

@ -39,9 +39,10 @@ class API {
flowInfos = flowResp.map((key, value) => MapEntry(key, FlowInfo(value))); flowInfos = flowResp.map((key, value) => MapEntry(key, FlowInfo(value)));
} }
Future<void> init() async { Future<void> init(Function refresh) async {
pref = await SharedPreferences.getInstance(); pref = await SharedPreferences.getInstance();
instance = pref!.getString("instance") ?? ""; instance = pref!.getString("instance") ?? "";
refresh();
} }
bool isInit() { bool isInit() {

View file

@ -20,11 +20,15 @@ class MyApp extends StatefulWidget {
class _MyAppState extends State<MyApp> { class _MyAppState extends State<MyApp> {
bool init = false; bool init = false;
refresh() {
setState(() {});
}
@override @override
void initState() { void initState() {
super.initState(); super.initState();
() async { () async {
await API().init(); await API().init(refresh);
if (API().isInit()) { if (API().isInit()) {
await API().prefetch(); await API().prefetch();
setState(() { setState(() {
@ -47,7 +51,7 @@ class _MyAppState extends State<MyApp> {
? (API().isPrefetched() ? (API().isPrefetched()
? const MyHomePage() ? const MyHomePage()
: const Scaffold( : const Scaffold(
body: CircularProgressIndicator(), body: Center(child: CircularProgressIndicator()),
)) ))
: const SetupPage()); : const SetupPage());
} }

View file

@ -2,9 +2,8 @@ import 'package:cdb_ui/api.dart' as API;
import 'package:cdb_ui/pages/expandable_list.dart'; import 'package:cdb_ui/pages/expandable_list.dart';
import 'package:cdb_ui/pages/flow/active_flow_page.dart'; import 'package:cdb_ui/pages/flow/active_flow_page.dart';
import 'package:cdb_ui/pages/flow/flow_info_page.dart'; import 'package:cdb_ui/pages/flow/flow_info_page.dart';
import 'package:cdb_ui/pages/transaction.dart'; import 'package:cdb_ui/pages/supply.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:qr_bar_code_scanner_dialog/qr_bar_code_scanner_dialog.dart';
class FlowsPage extends StatefulWidget { class FlowsPage extends StatefulWidget {
const FlowsPage({super.key}); const FlowsPage({super.key});
@ -156,24 +155,18 @@ class _FlowsPageState extends State<FlowsPage> {
_ => const Text("..."), _ => const Text("..."),
}, },
floatingActionButton: FloatingActionButton( floatingActionButton: FloatingActionButton(
onPressed: () { onPressed: () async {
// scan flow code // scan flow code
QrBarCodeScannerDialog().getScannedQrBarCode( var code = await scanQRCode(context, title: "Scan Flow Code");
context: context,
onCode: (code) {
// library is retarded
code = code!.replaceFirst("Code scanned = ", "");
API.API().getFlow(code).then((flow) { API.API().getFlow(code!).then((flow) {
var info = API.API().getFlowInfo(flow.kind); var info = API.API().getFlowInfo(flow.kind);
Navigator.of(context).push(MaterialPageRoute( Navigator.of(context).push(MaterialPageRoute(
builder: (context) { builder: (context) {
return ActiveFlowPage(flow, info); return ActiveFlowPage(flow, info);
}, },
)); ));
}); });
},
);
}, },
child: const Icon(Icons.qr_code), child: const Icon(Icons.qr_code),
), ),

View file

@ -1,8 +1,8 @@
import 'package:cdb_ui/api.dart'; import 'package:cdb_ui/api.dart';
import 'package:cdb_ui/pages/itemview.dart'; import 'package:cdb_ui/pages/itemview.dart';
import 'package:cdb_ui/pages/supply.dart';
import 'package:cdb_ui/pages/transaction.dart'; import 'package:cdb_ui/pages/transaction.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:qr_bar_code_scanner_dialog/qr_bar_code_scanner_dialog.dart';
class ItemsPage extends StatelessWidget { class ItemsPage extends StatelessWidget {
const ItemsPage({super.key}); const ItemsPage({super.key});
@ -18,21 +18,15 @@ class ItemsPage extends StatelessWidget {
return ItemTile(x); return ItemTile(x);
}).toList()), }).toList()),
floatingActionButton: FloatingActionButton( floatingActionButton: FloatingActionButton(
onPressed: () { onPressed: () async {
// scan transaction code // scan transaction code
QrBarCodeScannerDialog().getScannedQrBarCode( var code = await scanQRCode(context, title: "Scan Transaction Code");
context: context,
onCode: (code) {
// library is retarded
code = code!.replaceFirst("Code scanned = ", "");
API().getTransaction(code).then((t) { API().getTransaction(code!).then((t) {
Navigator.of(context).push(MaterialPageRoute( Navigator.of(context).push(MaterialPageRoute(
builder: (context) => TransactionPage(t), builder: (context) => TransactionPage(t),
)); ));
}); });
},
);
}, },
child: const Icon(Icons.qr_code), child: const Icon(Icons.qr_code),
), ),

View file

@ -1,8 +1,8 @@
import 'package:cdb_ui/api.dart'; import 'package:cdb_ui/api.dart';
import 'package:cdb_ui/pages/supply.dart';
import 'package:cdb_ui/pages/transaction.dart'; import 'package:cdb_ui/pages/transaction.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_simple_treeview/flutter_simple_treeview.dart'; import 'package:flutter_simple_treeview/flutter_simple_treeview.dart';
import 'package:qr_bar_code_scanner_dialog/qr_bar_code_scanner_dialog.dart';
class LocationsPage extends StatefulWidget { class LocationsPage extends StatefulWidget {
const LocationsPage({super.key}); const LocationsPage({super.key});
@ -63,25 +63,20 @@ class _LocationsPageState extends State<LocationsPage> {
return buildTree(context, key); return buildTree(context, key);
}).toList()), }).toList()),
floatingActionButton: FloatingActionButton( floatingActionButton: FloatingActionButton(
onPressed: () { onPressed: () async {
// scan location code // scan location code
QrBarCodeScannerDialog().getScannedQrBarCode( var code = await scanQRCode(context, title: "Scan Location Code");
context: context,
onCode: (code) {
// library is retarded
code = code!.replaceFirst("Code scanned = ", "");
if (!locations!.containsKey(code)) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('The location $code does not exist.')),
);
return;
}
Navigator.of(context).push(MaterialPageRoute( if (!locations!.containsKey(code)) {
builder: (context) => LocationView(locations![code]!), ScaffoldMessenger.of(context).showSnackBar(
)); SnackBar(content: Text('The location $code does not exist.')),
}, );
); return;
}
Navigator.of(context).push(MaterialPageRoute(
builder: (context) => LocationView(locations![code]!),
));
}, },
child: const Icon(Icons.qr_code), child: const Icon(Icons.qr_code),
), ),

View file

@ -1,6 +1,21 @@
import 'package:cdb_ui/api.dart'; import 'package:cdb_ui/api.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:qr_bar_code_scanner_dialog/qr_bar_code_scanner_dialog.dart'; import 'package:simple_barcode_scanner/enum.dart';
import 'package:simple_barcode_scanner/simple_barcode_scanner.dart';
Future<String?> scanQRCode(BuildContext context,
{String title = "Scan QR Code"}) async {
var res = await Navigator.push(
context,
MaterialPageRoute(
builder: (context) => SimpleBarcodeScannerPage(
scanType: ScanType.qr,
appBarTitle: title,
),
));
return res;
}
class SupplyPage extends StatefulWidget { class SupplyPage extends StatefulWidget {
final Item item; final Item item;
@ -202,15 +217,13 @@ class _SupplyPageState extends State<SupplyPage> {
width: 12, width: 12,
), ),
IconButton( IconButton(
onPressed: () { onPressed: () async {
QrBarCodeScannerDialog().getScannedQrBarCode( var code = await scanQRCode(context);
context: context, setState(() {
onCode: (code) { if (API().getLocations().keys.contains(code)) {
setState(() { _selectedLocation = code!;
_selectedLocation = code!; }
}); });
},
);
}, },
icon: const Icon(Icons.qr_code), icon: const Icon(Icons.qr_code),
), ),
@ -240,7 +253,7 @@ class _SupplyPageState extends State<SupplyPage> {
} }
Future<Map<String, dynamic>> _fetchData() async { Future<Map<String, dynamic>> _fetchData() async {
var locations = await API().getLocations(); var locations = API().getLocations();
var origins = await API().getUniqueField(widget.item.id, variant, "origin"); var origins = await API().getUniqueField(widget.item.id, variant, "origin");
origins.insert(0, ""); origins.insert(0, "");
locations[""] = Location.zero(); locations[""] = Location.zero();

View file

@ -1,9 +1,9 @@
import 'package:cdb_ui/api.dart'; import 'package:cdb_ui/api.dart';
import 'package:cdb_ui/pages/consume.dart'; import 'package:cdb_ui/pages/consume.dart';
import 'package:cdb_ui/pages/supply.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:intl/intl.dart'; import 'package:intl/intl.dart';
import 'package:qr_bar_code/qr/qr.dart'; import 'package:qr_bar_code/qr/qr.dart';
import 'package:qr_bar_code_scanner_dialog/qr_bar_code_scanner_dialog.dart';
class TransactionPage extends StatefulWidget { class TransactionPage extends StatefulWidget {
final Transaction transaction; final Transaction transaction;
@ -78,34 +78,27 @@ class _TransactionPageState extends State<TransactionPage> {
}).toList(), }).toList(),
), ),
IconButton( IconButton(
onPressed: () { onPressed: () async {
var locations = API().getLocations(); var locations = API().getLocations();
QrBarCodeScannerDialog().getScannedQrBarCode( var code = await scanQRCode(context,
context: context, title: "Scan Location Code");
onCode: (code) { if (!locations.containsKey(code)) {
// library is retarded ScaffoldMessenger.of(context).showSnackBar(
code = code! SnackBar(
.replaceFirst("Code scanned = ", ""); content: Text(
if (!locations.containsKey(code)) { 'The location $code does not exist.')),
ScaffoldMessenger.of(context) );
.showSnackBar( return;
SnackBar( }
content: Text(
'The location $code does not exist.')),
);
return;
}
API() API()
.moveTransaction( .moveTransaction(widget.transaction.uuid,
widget.transaction.uuid, selectedLocationID!)
selectedLocationID!) .then(
.then( (x) {
(x) { Navigator.of(context).pop();
Navigator.of(context).pop(); },
}, );
);
});
setState(() {}); setState(() {});
}, },
icon: const Icon(Icons.qr_code)) icon: const Icon(Icons.qr_code))

View file

@ -94,6 +94,14 @@ packages:
description: flutter description: flutter
source: sdk source: sdk
version: "0.0.0" version: "0.0.0"
flutter_barcode_scanner:
dependency: transitive
description:
name: flutter_barcode_scanner
sha256: a4ba37daf9933f451a5e812c753ddd045d6354e4a3280342d895b07fecaab3fa
url: "https://pub.dev"
source: hosted
version: "2.0.0"
flutter_lints: flutter_lints:
dependency: "direct dev" dependency: "direct dev"
description: description:
@ -102,6 +110,14 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.0.3" version: "2.0.3"
flutter_plugin_android_lifecycle:
dependency: transitive
description:
name: flutter_plugin_android_lifecycle
sha256: "9ee02950848f61c4129af3d6ec84a1cfc0e47931abc746b03e7a3bc3e8ff6eda"
url: "https://pub.dev"
source: hosted
version: "2.0.22"
flutter_simple_treeview: flutter_simple_treeview:
dependency: "direct main" dependency: "direct main"
description: description:
@ -144,30 +160,22 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.18.1" version: "0.18.1"
js:
dependency: transitive
description:
name: js
sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3
url: "https://pub.dev"
source: hosted
version: "0.6.7"
leak_tracker: leak_tracker:
dependency: transitive dependency: transitive
description: description:
name: leak_tracker name: leak_tracker
sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" sha256: "3f87a60e8c63aecc975dda1ceedbc8f24de75f09e4856ea27daf8958f2f0ce05"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "10.0.4" version: "10.0.5"
leak_tracker_flutter_testing: leak_tracker_flutter_testing:
dependency: transitive dependency: transitive
description: description:
name: leak_tracker_flutter_testing name: leak_tracker_flutter_testing
sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" sha256: "932549fb305594d82d7183ecd9fa93463e9914e1b67cacc34bc40906594a1806"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.0.3" version: "3.0.5"
leak_tracker_testing: leak_tracker_testing:
dependency: transitive dependency: transitive
description: description:
@ -196,18 +204,18 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: material_color_utilities name: material_color_utilities
sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.8.0" version: "0.11.1"
meta: meta:
dependency: transitive dependency: transitive
description: description:
name: meta name: meta
sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.12.0" version: "1.15.0"
path: path:
dependency: transitive dependency: transitive
description: description:
@ -240,6 +248,54 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.3.0" version: "2.3.0"
permission_handler:
dependency: transitive
description:
name: permission_handler
sha256: "18bf33f7fefbd812f37e72091a15575e72d5318854877e0e4035a24ac1113ecb"
url: "https://pub.dev"
source: hosted
version: "11.3.1"
permission_handler_android:
dependency: transitive
description:
name: permission_handler_android
sha256: "76e4ab092c1b240d31177bb64d2b0bea43f43d0e23541ec866151b9f7b2490fa"
url: "https://pub.dev"
source: hosted
version: "12.0.12"
permission_handler_apple:
dependency: transitive
description:
name: permission_handler_apple
sha256: e6f6d73b12438ef13e648c4ae56bd106ec60d17e90a59c4545db6781229082a0
url: "https://pub.dev"
source: hosted
version: "9.4.5"
permission_handler_html:
dependency: transitive
description:
name: permission_handler_html
sha256: af26edbbb1f2674af65a8f4b56e1a6f526156bc273d0e65dd8075fab51c78851
url: "https://pub.dev"
source: hosted
version: "0.1.3+2"
permission_handler_platform_interface:
dependency: transitive
description:
name: permission_handler_platform_interface
sha256: e9c8eadee926c4532d0305dff94b85bf961f16759c3af791486613152af4b4f9
url: "https://pub.dev"
source: hosted
version: "4.2.3"
permission_handler_windows:
dependency: transitive
description:
name: permission_handler_windows
sha256: "1a790728016f79a41216d88672dbc5df30e686e811ad4e698bfc51f76ad91f1e"
url: "https://pub.dev"
source: hosted
version: "0.2.1"
platform: platform:
dependency: transitive dependency: transitive
description: description:
@ -264,22 +320,6 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.3.0" version: "1.3.0"
qr_bar_code_scanner_dialog:
dependency: "direct main"
description:
name: qr_bar_code_scanner_dialog
sha256: dcb937816d4e562141530265bd1ca39fe00f57000fd79e26c163c957d443e9e4
url: "https://pub.dev"
source: hosted
version: "0.0.5"
qr_code_scanner:
dependency: transitive
description:
name: qr_code_scanner
sha256: f23b68d893505a424f0bd2e324ebea71ed88465d572d26bb8d2e78a4749591fd
url: "https://pub.dev"
source: hosted
version: "1.0.1"
shared_preferences: shared_preferences:
dependency: "direct main" dependency: "direct main"
description: description:
@ -336,6 +376,14 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.4.1" version: "2.4.1"
simple_barcode_scanner:
dependency: "direct main"
description:
name: simple_barcode_scanner
sha256: "52b30082ebd6fab1e6314cb9bfc1aca5372890616dcb89d0e254edf7b7ef4951"
url: "https://pub.dev"
source: hosted
version: "0.1.2"
sky_engine: sky_engine:
dependency: transitive dependency: transitive
description: flutter description: flutter
@ -385,10 +433,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: test_api name: test_api
sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" sha256: "5b8a98dafc4d5c4c9c72d8b31ab2b23fc13422348d2997120294d3bac86b4ddb"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.7.0" version: "0.7.2"
typed_data: typed_data:
dependency: transitive dependency: transitive
description: description:
@ -409,10 +457,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: vm_service name: vm_service
sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" sha256: "5c5f338a667b4c644744b661f309fb8080bb94b18a7e91ef1dbd343bed00ed6d"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "14.2.1" version: "14.2.5"
web: web:
dependency: transitive dependency: transitive
description: description:
@ -421,6 +469,14 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.1.0" version: "1.1.0"
webview_windows:
dependency: transitive
description:
name: webview_windows
sha256: "47fcad5875a45db29dbb5c9e6709bf5c88dcc429049872701343f91ed7255730"
url: "https://pub.dev"
source: hosted
version: "0.4.0"
xdg_directories: xdg_directories:
dependency: transitive dependency: transitive
description: description:
@ -430,5 +486,5 @@ packages:
source: hosted source: hosted
version: "1.0.4" version: "1.0.4"
sdks: sdks:
dart: ">=3.4.0 <4.0.0" dart: ">=3.5.3 <4.0.0"
flutter: ">=3.22.0" flutter: ">=3.22.0"

View file

@ -32,7 +32,7 @@ dependencies:
sdk: flutter sdk: flutter
flutter_simple_treeview: ^3.0.2 flutter_simple_treeview: ^3.0.2
qr_bar_code: ^1.3.0 qr_bar_code: ^1.3.0
qr_bar_code_scanner_dialog: ^0.0.5 simple_barcode_scanner: ^0.1.2
intl: ^0.18.0 intl: ^0.18.0
shared_preferences: ^2.1.0 shared_preferences: ^2.1.0
fl_chart: ^0.69.0 fl_chart: ^0.69.0

View file

@ -6,9 +6,15 @@
#include "generated_plugin_registrant.h" #include "generated_plugin_registrant.h"
#include <permission_handler_windows/permission_handler_windows_plugin.h>
#include <qr_bar_code/qr_bar_code_plugin_c_api.h> #include <qr_bar_code/qr_bar_code_plugin_c_api.h>
#include <webview_windows/webview_windows_plugin.h>
void RegisterPlugins(flutter::PluginRegistry* registry) { void RegisterPlugins(flutter::PluginRegistry* registry) {
PermissionHandlerWindowsPluginRegisterWithRegistrar(
registry->GetRegistrarForPlugin("PermissionHandlerWindowsPlugin"));
QrBarCodePluginCApiRegisterWithRegistrar( QrBarCodePluginCApiRegisterWithRegistrar(
registry->GetRegistrarForPlugin("QrBarCodePluginCApi")); registry->GetRegistrarForPlugin("QrBarCodePluginCApi"));
WebviewWindowsPluginRegisterWithRegistrar(
registry->GetRegistrarForPlugin("WebviewWindowsPlugin"));
} }

View file

@ -3,7 +3,9 @@
# #
list(APPEND FLUTTER_PLUGIN_LIST list(APPEND FLUTTER_PLUGIN_LIST
permission_handler_windows
qr_bar_code qr_bar_code
webview_windows
) )
list(APPEND FLUTTER_FFI_PLUGIN_LIST list(APPEND FLUTTER_FFI_PLUGIN_LIST