diff --git a/.github/workflows/android.yaml b/.github/workflows/android.yaml
index 06992242..16c06b74 100644
--- a/.github/workflows/android.yaml
+++ b/.github/workflows/android.yaml
@@ -23,7 +23,7 @@ jobs:
- name: Setup Flutter
uses: subosito/flutter-action@v2
with:
- flutter-version: '3.13.0'
+ flutter-version: '3.24.3'
channel: 'stable'
- run: flutter --version
- name: Setup Gradle
diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml
index 889cad02..f5e5bcf8 100644
--- a/.github/workflows/ci.yaml
+++ b/.github/workflows/ci.yaml
@@ -36,7 +36,7 @@ jobs:
- name: Setup Flutter
uses: subosito/flutter-action@v2
with:
- flutter-version: '3.13.0'
+ flutter-version: '3.24.3'
- name: Collect Translation Files
run: |
cd lib/l10n
diff --git a/.github/workflows/ios.yaml b/.github/workflows/ios.yaml
index f6bf24b2..fc96cf0a 100644
--- a/.github/workflows/ios.yaml
+++ b/.github/workflows/ios.yaml
@@ -25,7 +25,7 @@ jobs:
- name: Setup Flutter
uses: subosito/flutter-action@v2
with:
- flutter-version: '3.13.0'
+ flutter-version: '3.24.3'
channel: 'stable'
- name: Collect Translation Files
run: |
diff --git a/android/app/build.gradle b/android/app/build.gradle
index c43c9bfc..a20b12b5 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -1,3 +1,9 @@
+plugins {
+ id "com.android.application"
+ id "kotlin-android"
+ id "dev.flutter.flutter-gradle-plugin"
+}
+
def localProperties = new Properties()
def localPropertiesFile = rootProject.file('local.properties')
if (localPropertiesFile.exists()) {
@@ -6,11 +12,6 @@ if (localPropertiesFile.exists()) {
}
}
-def flutterRoot = localProperties.getProperty('flutter.sdk')
-if (flutterRoot == null) {
- throw new FileNotFoundException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
-}
-
def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
if (flutterVersionCode == null) {
flutterVersionCode = '1'
@@ -21,10 +22,6 @@ if (flutterVersionName == null) {
flutterVersionName = '1.0'
}
-apply plugin: 'com.android.application'
-apply plugin: 'kotlin-android'
-apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
-
def keystoreProperties = new Properties()
def keystorePropertiesFile = rootProject.file('key.properties')
if (keystorePropertiesFile.exists()) {
@@ -85,5 +82,4 @@ dependencies {
androidTestImplementation 'com.android.support:multidex:2.0.1'
implementation "androidx.core:core:1.9.0"
implementation 'androidx.appcompat:appcompat:1.6.0'
- implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
}
diff --git a/android/build.gradle b/android/build.gradle
index 5ace0515..346e5522 100644
--- a/android/build.gradle
+++ b/android/build.gradle
@@ -1,17 +1,3 @@
-buildscript {
-
- ext.kotlin_version = '1.8.10'
-
- repositories {
- google()
- mavenCentral()
- }
-
- dependencies {
- classpath 'com.android.tools.build:gradle:7.4.1'
- classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
- }
-}
allprojects {
repositories {
diff --git a/android/settings.gradle b/android/settings.gradle
index 5a2f14fb..16ce3591 100644
--- a/android/settings.gradle
+++ b/android/settings.gradle
@@ -1,15 +1,25 @@
-include ':app'
+pluginManagement {
+ def flutterSdkPath = {
+ def properties = new Properties()
+ file("local.properties").withInputStream { properties.load(it) }
+ def flutterSdkPath = properties.getProperty("flutter.sdk")
+ assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
+ return flutterSdkPath
+ }()
-def flutterProjectRoot = rootProject.projectDir.parentFile.toPath()
+ includeBuild("$flutterSdkPath/packages/flutter_tools/gradle")
-def plugins = new Properties()
-def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins')
-if (pluginsFile.exists()) {
- pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) }
+ repositories {
+ google()
+ mavenCentral()
+ gradlePluginPortal()
+ }
}
-plugins.each { name, path ->
- def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile()
- include ":$name"
- project(":$name").projectDir = pluginDirectory
+plugins {
+ id "dev.flutter.flutter-plugin-loader" version "1.0.0"
+ id "com.android.application" version "7.4.1" apply false
+ id "org.jetbrains.kotlin.android" version "1.8.10" apply false
}
+
+include ":app"
\ No newline at end of file
diff --git a/ios/Flutter/AppFrameworkInfo.plist b/ios/Flutter/AppFrameworkInfo.plist
index 9625e105..7c569640 100644
--- a/ios/Flutter/AppFrameworkInfo.plist
+++ b/ios/Flutter/AppFrameworkInfo.plist
@@ -21,6 +21,6 @@
CFBundleVersion
1.0
MinimumOSVersion
- 11.0
+ 12.0
diff --git a/ios/Podfile b/ios/Podfile
index 74fd5d31..1c050856 100644
--- a/ios/Podfile
+++ b/ios/Podfile
@@ -1,5 +1,5 @@
# Uncomment this line to define a global platform for your projects
-platform :ios, '11.0'
+platform :ios, '12.0'
# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
ENV['COCOAPODS_DISABLE_STATS'] = 'true'
@@ -39,7 +39,7 @@ post_install do |installer|
installer.pods_project.targets.each do |target|
flutter_additional_ios_build_settings(target)
target.build_configurations.each do |config|
- config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '11.0'
+ config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '12.0'
end
end
end
diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj
index fbc94f10..3a6f42d2 100644
--- a/ios/Runner.xcodeproj/project.pbxproj
+++ b/ios/Runner.xcodeproj/project.pbxproj
@@ -92,6 +92,7 @@
3B8B22940C363C2F0DDB698A /* Frameworks */,
);
sourceTree = "";
+ tabWidth = 5;
};
97C146EF1CF9000F007C117D /* Products */ = {
isa = PBXGroup;
@@ -167,7 +168,7 @@
isa = PBXProject;
attributes = {
BuildIndependentTargetsInParallel = YES;
- LastUpgradeCheck = 1430;
+ LastUpgradeCheck = 1510;
ORGANIZATIONNAME = "The Chromium Authors";
TargetAttributes = {
97C146ED1CF9000F007C117D = {
@@ -271,11 +272,9 @@
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh",
"${BUILT_PRODUCTS_DIR}/DKImagePickerController/DKImagePickerController.framework",
"${BUILT_PRODUCTS_DIR}/DKPhotoGallery/DKPhotoGallery.framework",
- "${BUILT_PRODUCTS_DIR}/FMDB/FMDB.framework",
"${BUILT_PRODUCTS_DIR}/MTBBarcodeScanner/MTBBarcodeScanner.framework",
"${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework",
"${BUILT_PRODUCTS_DIR}/Sentry/Sentry.framework",
- "${BUILT_PRODUCTS_DIR}/SentryPrivate/SentryPrivate.framework",
"${BUILT_PRODUCTS_DIR}/SwiftyGif/SwiftyGif.framework",
"${BUILT_PRODUCTS_DIR}/audioplayers_darwin/audioplayers_darwin.framework",
"${BUILT_PRODUCTS_DIR}/camera_avfoundation/camera_avfoundation.framework",
@@ -295,11 +294,9 @@
outputPaths = (
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/DKImagePickerController.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/DKPhotoGallery.framework",
- "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FMDB.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MTBBarcodeScanner.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImage.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Sentry.framework",
- "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SentryPrivate.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftyGif.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/audioplayers_darwin.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/camera_avfoundation.framework",
diff --git a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
index a6b826db..5e31d3d3 100644
--- a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
+++ b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
@@ -1,6 +1,6 @@
barcodeFailure(String msg, dynamic extra) async {
msg,
success: false,
onAction: () {
- OneContext().showDialog(
- builder: (BuildContext context) => SimpleDialog(
- title: Text(L10().barcodeError),
- children: [
- ListTile(
- title: Text(L10().responseData),
- subtitle: Text(extra.toString())
- )
- ]
- )
- );
+ if (hasContext()) {
+ OneContext().showDialog(
+ builder: (BuildContext context) =>
+ SimpleDialog(
+ title: Text(L10().barcodeError),
+ children: [
+ ListTile(
+ title: Text(L10().responseData),
+ subtitle: Text(extra.toString())
+ )
+ ]
+ )
+ );
+ }
}
);
}
@@ -277,17 +281,20 @@ class BarcodeScanHandler extends BarcodeHandler {
success: false,
onAction: () {
- OneContext().showDialog(
- builder: (BuildContext context) => SimpleDialog(
- title: Text(L10().unknownResponse),
- children: [
- ListTile(
- title: Text(L10().responseData),
- subtitle: Text(data.toString()),
- )
- ],
- )
- );
+ if (hasContext()) {
+ OneContext().showDialog(
+ builder: (BuildContext context) =>
+ SimpleDialog(
+ title: Text(L10().unknownResponse),
+ children: [
+ ListTile(
+ title: Text(L10().responseData),
+ subtitle: Text(data.toString()),
+ )
+ ],
+ )
+ );
+ }
}
);
}
diff --git a/lib/barcode/controller.dart b/lib/barcode/controller.dart
index ad17aa65..559bac9a 100644
--- a/lib/barcode/controller.dart
+++ b/lib/barcode/controller.dart
@@ -1,4 +1,5 @@
import "package:flutter/material.dart";
+import "package:inventree/helpers.dart";
import "package:one_context/one_context.dart";
import "package:inventree/preferences.dart";
@@ -43,7 +44,7 @@ class InvenTreeBarcodeControllerState extends State
* Barcode data should be passed as a string
*/
Future handleBarcodeData(String? data) async {
-
+
// Check that the data is valid, and this view is still mounted
if (!mounted || data == null || data.isEmpty) {
return;
@@ -58,7 +59,11 @@ class InvenTreeBarcodeControllerState extends State
processingBarcode = true;
});
- BuildContext? context = OneContext.hasContext ? OneContext().context : null;
+ BuildContext? context;
+
+ if (hasContext()) {
+ context = OneContext.hasContext ? OneContext().context : null;
+ }
showLoadingOverlay(context);
await pauseScan();
diff --git a/lib/barcode/flutter_barcode_listener.dart b/lib/barcode/flutter_barcode_listener.dart
deleted file mode 100644
index c2b28450..00000000
--- a/lib/barcode/flutter_barcode_listener.dart
+++ /dev/null
@@ -1,175 +0,0 @@
-
-/*
- * Custom keyboard listener which allows the app to act as a keyboard "wedge",
- * and intercept barcodes from any compatible scanner.
- *
- * Note: This code was copied from https://github.com/fuadreza/flutter_barcode_listener/blob/master/lib/flutter_barcode_listener.dart
- *
- * If that code becomes available on pub.dev, we can remove this file and reference that library
- */
-
-import "dart:async";
-
-import "package:flutter/material.dart";
-import "package:flutter/services.dart";
-
-typedef BarcodeScannedCallback = void Function(String barcode);
-
-/// This widget will listen for raw PHYSICAL keyboard events
-/// even when other controls have primary focus.
-/// It will buffer all characters coming in specifed `bufferDuration` time frame
-/// that end with line feed character and call callback function with result.
-/// Keep in mind this widget will listen for events even when not visible.
-/// Windows seems to be using the [RawKeyDownEvent] instead of the
-/// [RawKeyUpEvent], this behaviour can be managed by setting [useKeyDownEvent].
-class BarcodeKeyboardListener extends StatefulWidget {
-
- /// This widget will listen for raw PHYSICAL keyboard events
- /// even when other controls have primary focus.
- /// It will buffer all characters coming in specifed `bufferDuration` time frame
- /// that end with line feed character and call callback function with result.
- /// Keep in mind this widget will listen for events even when not visible.
- const BarcodeKeyboardListener(
- {Key? key,
-
- /// Child widget to be displayed.
- required this.child,
-
- /// Callback to be called when barcode is scanned.
- required Function(String) onBarcodeScanned,
-
- /// When experiencing issueswith empty barcodes on Windows,
- /// set this value to true. Default value is `false`.
- this.useKeyDownEvent = false,
-
- /// Maximum time between two key events.
- /// If time between two key events is longer than this value
- /// previous keys will be ignored.
- Duration bufferDuration = hundredMs})
- : _onBarcodeScanned = onBarcodeScanned,
- _bufferDuration = bufferDuration,
- super(key: key);
-
- final Widget child;
- final BarcodeScannedCallback _onBarcodeScanned;
- final Duration _bufferDuration;
- final bool useKeyDownEvent;
-
- @override
- _BarcodeKeyboardListenerState createState() => _BarcodeKeyboardListenerState(
- _onBarcodeScanned, _bufferDuration, useKeyDownEvent);
-}
-
-const Duration aSecond = Duration(seconds: 1);
-const Duration hundredMs = Duration(milliseconds: 100);
-const String lineFeed = "\n";
-
-class _BarcodeKeyboardListenerState extends State {
-
- _BarcodeKeyboardListenerState(this._onBarcodeScannedCallback,
- this._bufferDuration, this._useKeyDownEvent) {
- RawKeyboard.instance.addListener(_keyBoardCallback);
- _keyboardSubscription =
- _controller.stream.where((char) => char != null).listen(onKeyEvent);
- }
-
- List _scannedChars = [];
- DateTime? _lastScannedCharCodeTime;
- late StreamSubscription _keyboardSubscription;
-
- final BarcodeScannedCallback _onBarcodeScannedCallback;
- final Duration _bufferDuration;
-
- final _controller = StreamController();
-
- final bool _useKeyDownEvent;
-
- bool _isShiftPressed = false;
- void onKeyEvent(String? char) {
- //remove any pending characters older than bufferDuration value
- checkPendingCharCodesToClear();
- _lastScannedCharCodeTime = DateTime.now();
- if (char == lineFeed) {
- _onBarcodeScannedCallback.call(_scannedChars.join());
- resetScannedCharCodes();
- } else {
- //add character to list of scanned characters;
- _scannedChars.add(char!);
- }
- }
-
- void checkPendingCharCodesToClear() {
- if (_lastScannedCharCodeTime != null) {
- if (_lastScannedCharCodeTime!
- .isBefore(DateTime.now().subtract(_bufferDuration))) {
- resetScannedCharCodes();
- }
- }
- }
-
- void resetScannedCharCodes() {
- _lastScannedCharCodeTime = null;
- _scannedChars = [];
- }
-
- void addScannedCharCode(String charCode) {
- _scannedChars.add(charCode);
- }
-
- void _keyBoardCallback(RawKeyEvent keyEvent) {
- if (keyEvent.logicalKey.keyId > 255 &&
- keyEvent.data.logicalKey != LogicalKeyboardKey.enter &&
- keyEvent.data.logicalKey != LogicalKeyboardKey.shiftLeft) return;
- if ((!_useKeyDownEvent && keyEvent is RawKeyUpEvent) ||
- (_useKeyDownEvent && keyEvent is RawKeyDownEvent)) {
- if (keyEvent.data is RawKeyEventDataAndroid) {
- if (keyEvent.data.logicalKey == LogicalKeyboardKey.shiftLeft) {
- _isShiftPressed = true;
- } else {
- if (_isShiftPressed) {
- _isShiftPressed = false;
- _controller.sink.add(String.fromCharCode(
- ((keyEvent.data) as RawKeyEventDataAndroid).codePoint).toUpperCase());
- } else {
- _controller.sink.add(String.fromCharCode(
- ((keyEvent.data) as RawKeyEventDataAndroid).codePoint));
- }
- }
- } else if (keyEvent.data is RawKeyEventDataFuchsia) {
- _controller.sink.add(String.fromCharCode(
- ((keyEvent.data) as RawKeyEventDataFuchsia).codePoint));
- } else if (keyEvent.data.logicalKey == LogicalKeyboardKey.enter) {
- _controller.sink.add(lineFeed);
- } else if (keyEvent.data is RawKeyEventDataWeb) {
- _controller.sink.add(((keyEvent.data) as RawKeyEventDataWeb).keyLabel);
- } else if (keyEvent.data is RawKeyEventDataLinux) {
- _controller.sink
- .add(((keyEvent.data) as RawKeyEventDataLinux).keyLabel);
- } else if (keyEvent.data is RawKeyEventDataWindows) {
- _controller.sink.add(String.fromCharCode(
- ((keyEvent.data) as RawKeyEventDataWindows).keyCode));
- } else if (keyEvent.data is RawKeyEventDataMacOs) {
- _controller.sink
- .add(((keyEvent.data) as RawKeyEventDataMacOs).characters);
- } else if (keyEvent.data is RawKeyEventDataIos) {
- _controller.sink
- .add(((keyEvent.data) as RawKeyEventDataIos).characters);
- } else {
- _controller.sink.add(keyEvent.character);
- }
- }
- }
-
- @override
- Widget build(BuildContext context) {
- return widget.child;
- }
-
- @override
- void dispose() {
- _keyboardSubscription.cancel();
- _controller.close();
- RawKeyboard.instance.removeListener(_keyBoardCallback);
- super.dispose();
- }
-}
\ No newline at end of file
diff --git a/lib/barcode/stock.dart b/lib/barcode/stock.dart
index b084759f..d2309010 100644
--- a/lib/barcode/stock.dart
+++ b/lib/barcode/stock.dart
@@ -42,7 +42,7 @@ class BarcodeScanStockLocationHandler extends BarcodeHandler {
final bool result = await onLocationScanned(_loc);
- if (result && OneContext.hasContext) {
+ if (result && hasContext()) {
OneContext().pop();
}
return;
diff --git a/lib/barcode/wedge_controller.dart b/lib/barcode/wedge_controller.dart
index b239c398..741cec16 100644
--- a/lib/barcode/wedge_controller.dart
+++ b/lib/barcode/wedge_controller.dart
@@ -1,11 +1,12 @@
import "package:flutter/material.dart";
+import "package:flutter/services.dart";
import "package:flutter_tabler_icons/flutter_tabler_icons.dart";
import "package:inventree/app_colors.dart";
import "package:inventree/barcode/controller.dart";
import "package:inventree/barcode/handler.dart";
-import "package:inventree/barcode/flutter_barcode_listener.dart";
+
import "package:inventree/l10.dart";
import "package:inventree/helpers.dart";
@@ -31,6 +32,12 @@ class _WedgeBarcodeControllerState extends InvenTreeBarcodeControllerState {
bool get scanning => mounted && canScan;
+ final FocusNode _focusNode = FocusNode();
+
+ List _scannedCharacters = [];
+
+ DateTime? _lastScanTime;
+
@override
Future pauseScan() async {
@@ -51,6 +58,45 @@ class _WedgeBarcodeControllerState extends InvenTreeBarcodeControllerState {
}
}
+ // Callback for a single key press / scan
+ void handleKeyEvent(KeyEvent event) {
+
+ if (!scanning) {
+ return;
+ }
+
+ // Look only for key-down events
+ if (event is! KeyDownEvent) {
+ return;
+ }
+
+ // Ignore events without a character code
+ if (event.character == null) {
+ return;
+ }
+
+ DateTime now = DateTime.now();
+
+ // Throw away old characters
+ if (_lastScanTime == null || _lastScanTime!.isBefore(now.subtract(Duration(milliseconds: 250)))) {
+ _scannedCharacters.clear();
+ }
+
+ _lastScanTime = now;
+
+ if (event.character == "\n") {
+ if (_scannedCharacters.isNotEmpty) {
+ // Debug output required for unit testing
+ debug("scanned: ${_scannedCharacters.join()}");
+ handleBarcodeData(_scannedCharacters.join());
+ }
+
+ _scannedCharacters.clear();
+ } else {
+ _scannedCharacters.add(event.character!);
+ }
+ }
+
@override
Widget build(BuildContext context) {
@@ -66,8 +112,9 @@ class _WedgeBarcodeControllerState extends InvenTreeBarcodeControllerState {
Spacer(flex: 5),
Icon(TablerIcons.barcode, size: 64),
Spacer(flex: 5),
- BarcodeKeyboardListener(
- useKeyDownEvent: true,
+ KeyboardListener(
+ autofocus: true,
+ focusNode: _focusNode,
child: SizedBox(
child: CircularProgressIndicator(
color: scanning ? COLOR_ACTION : COLOR_PROGRESS
@@ -75,13 +122,16 @@ class _WedgeBarcodeControllerState extends InvenTreeBarcodeControllerState {
width: 64,
height: 64,
),
- onBarcodeScanned: (String barcode) {
- debug("scanned: ${barcode}");
- if (scanning) {
- // Process the barcode data
- handleBarcodeData(barcode);
- }
+ onKeyEvent: (event) {
+ handleKeyEvent(event);
},
+ // onBarcodeScanned: (String barcode) {
+ // debug("scanned: ${barcode}");
+ // if (scanning) {
+ // // Process the barcode data
+ // handleBarcodeData(barcode);
+ // }
+ // },
),
Spacer(flex: 5),
Padding(
diff --git a/lib/helpers.dart b/lib/helpers.dart
index 49a880d1..993814f1 100644
--- a/lib/helpers.dart
+++ b/lib/helpers.dart
@@ -39,13 +39,32 @@ bool debugContains(String msg, {bool raiseAssert = true}) {
}
}
+ if (!result) {
+ print("Debug does not contain expected string: '${msg}'");
+ }
+
if (raiseAssert) {
+
assert(result);
}
return result;
}
+
+bool isTesting() {
+ return Platform.environment.containsKey("FLUTTER_TEST");
+}
+
+bool hasContext() {
+ try {
+ return !isTesting() && OneContext.hasContext;
+ } catch (error) {
+ return false;
+ }
+}
+
+
/*
* Display a debug message if we are in testing mode, or running in debug mode
*/
@@ -83,7 +102,7 @@ Future playAudioFile(String path) async {
// Debug message for unit testing
debug("Playing audio file: '${path}'");
- if (!OneContext.hasContext) {
+ if (!hasContext()) {
return;
}
@@ -117,21 +136,13 @@ String renderCurrency(double? amount, String currency, {int decimals = 2}) {
if (currency.isEmpty) return "-";
- CurrencyFormatterSettings backupSettings = CurrencyFormatterSettings(
- symbol: "\$",
- symbolSide: SymbolSide.left,
- );
+ CurrencyFormat fmt = CurrencyFormat.fromCode(currency.toLowerCase()) ?? CurrencyFormat.usd;
String value = CurrencyFormatter.format(
amount,
- CurrencyFormatter.majors[currency.toLowerCase()] ?? backupSettings
+ fmt
);
- // If we were not able to determine the currency
- if (!CurrencyFormatter.majors.containsKey(currency.toLowerCase())) {
- value += " ${currency}";
- }
-
return value;
}
diff --git a/lib/inventree/sentry.dart b/lib/inventree/sentry.dart
index 7484d71a..34894ff4 100644
--- a/lib/inventree/sentry.dart
+++ b/lib/inventree/sentry.dart
@@ -1,6 +1,7 @@
import "dart:io";
import "package:device_info_plus/device_info_plus.dart";
+import "package:inventree/helpers.dart";
import "package:one_context/one_context.dart";
import "package:package_info_plus/package_info_plus.dart";
import "package:sentry_flutter/sentry_flutter.dart";
@@ -129,16 +130,16 @@ Future sentryReportMessage(String message, {Map? context})
}
Sentry.configureScope((scope) {
- scope.setExtra("server", server_info);
- scope.setExtra("app", app_info);
- scope.setExtra("device", device_info);
+ scope.setContexts("server", server_info);
+ scope.setContexts("app", app_info);
+ scope.setContexts("device", device_info);
if (context != null) {
- scope.setExtra("context", context);
+ scope.setContexts("context", context);
}
// Catch stacktrace data if possible
- scope.setExtra("stacktrace", StackTrace.current.toString());
+ scope.setContexts("stacktrace", StackTrace.current.toString());
});
try {
@@ -203,7 +204,7 @@ Future sentryReportError(String source, dynamic error, StackTrace? stackTr
// Ensure we pass the 'source' of the error
context["source"] = source;
- if (OneContext.hasContext) {
+ if (hasContext()) {
final ctx = OneContext().context;
if (ctx != null) {
@@ -213,10 +214,10 @@ Future sentryReportError(String source, dynamic error, StackTrace? stackTr
}
Sentry.configureScope((scope) {
- scope.setExtra("server", server_info);
- scope.setExtra("app", app_info);
- scope.setExtra("device", device_info);
- scope.setExtra("context", context);
+ scope.setContexts("server", server_info);
+ scope.setContexts("app", app_info);
+ scope.setContexts("device", device_info);
+ scope.setContexts("context", context);
});
Sentry.captureException(error, stackTrace: stackTrace).catchError((error) {
diff --git a/lib/l10.dart b/lib/l10.dart
index 2b44f962..f5f6eece 100644
--- a/lib/l10.dart
+++ b/lib/l10.dart
@@ -4,18 +4,23 @@ import "package:flutter_gen/gen_l10n/app_localizations_en.dart";
import "package:one_context/one_context.dart";
import "package:flutter/material.dart";
+import "package:inventree/helpers.dart";
+
// Shortcut function to reduce boilerplate!
I18N L10()
{
- if (OneContext.hasContext) {
- BuildContext? _ctx = OneContext().context;
+ // Testing mode - ignore context
+ if (!hasContext()) {
+ return I18NEn();
+ }
- if (_ctx != null) {
- I18N? i18n = I18N.of(_ctx);
+ BuildContext? _ctx = OneContext().context;
- if (i18n != null) {
- return i18n;
- }
+ if (_ctx != null) {
+ I18N? i18n = I18N.of(_ctx);
+
+ if (i18n != null) {
+ return i18n;
}
}
diff --git a/lib/main.dart b/lib/main.dart
index 9359449e..545c8cdf 100644
--- a/lib/main.dart
+++ b/lib/main.dart
@@ -162,13 +162,13 @@ class InvenTreeAppState extends State {
return AdaptiveTheme(
light: ThemeData(
brightness: Brightness.light,
- primarySwatch: Colors.lightBlue,
- secondaryHeaderColor: Colors.blueGrey
+ colorSchemeSeed: Colors.lightBlueAccent,
+ useMaterial3: true,
),
dark: ThemeData(
brightness: Brightness.dark,
- primarySwatch: Colors.lightBlue,
- secondaryHeaderColor: Colors.blueGrey,
+ colorSchemeSeed: Colors.blue,
+ useMaterial3: true,
),
initial: savedThemeMode ?? AdaptiveThemeMode.light,
builder: (light, dark) => MaterialApp(
diff --git a/lib/preferences.dart b/lib/preferences.dart
index 4828a7a8..2611418f 100644
--- a/lib/preferences.dart
+++ b/lib/preferences.dart
@@ -3,7 +3,6 @@ import "dart:ui";
import "package:inventree/l10n/supported_locales.dart";
import "package:path_provider/path_provider.dart";
-import "package:sembast/sembast.dart";
import "package:sembast/sembast_io.dart";
import "package:path/path.dart";
diff --git a/lib/widget/dialogs.dart b/lib/widget/dialogs.dart
index a06609da..b4cb5a2f 100644
--- a/lib/widget/dialogs.dart
+++ b/lib/widget/dialogs.dart
@@ -31,6 +31,10 @@ Future choiceDialog(String title, List items, {Function? onSelecte
);
}
+ if (!hasContext()) {
+ return;
+ }
+
OneContext().showDialog(
builder: (BuildContext context) {
return AlertDialog(
@@ -63,6 +67,10 @@ Future confirmationDialog(String title, String text, {Color? color, IconDa
String _accept = acceptText ?? L10().ok;
String _reject = rejectText ?? L10().cancel;
+ if (!hasContext()) {
+ return;
+ }
+
OneContext().showDialog(
builder: (BuildContext context) {
return AlertDialog(
@@ -176,6 +184,10 @@ Future showErrorDialog(String title, {String description = "", APIResponse
}
}
+ if (!hasContext()) {
+ return;
+ }
+
OneContext().showDialog(
builder: (context) => SimpleDialog(
title: ListTile(
@@ -196,7 +208,7 @@ Future showErrorDialog(String title, {String description = "", APIResponse
*/
Future showServerError(String url, String title, String description) async {
- if (!OneContext.hasContext) {
+ if (!hasContext()) {
return;
}
diff --git a/lib/widget/snacks.dart b/lib/widget/snacks.dart
index 66f5f152..c5a1aba8 100644
--- a/lib/widget/snacks.dart
+++ b/lib/widget/snacks.dart
@@ -13,7 +13,7 @@ void showSnackIcon(String text, {IconData? icon, Function()? onAction, bool? suc
debug("showSnackIcon: '${text}'");
// Escape quickly if we do not have context
- if (!OneContext.hasContext) {
+ if (!hasContext()) {
// Debug message for unit testing
return;
}
diff --git a/lib/widget/stock/location_display.dart b/lib/widget/stock/location_display.dart
index 377325fe..df294739 100644
--- a/lib/widget/stock/location_display.dart
+++ b/lib/widget/stock/location_display.dart
@@ -301,12 +301,16 @@ class _LocationDisplayState extends RefreshableState {
// Serial number field is not required here
fields.remove("serial");
+ Map data = {};
+
+ if (location != null) {
+ data["location"] = location!.pk;
+ }
+
InvenTreeStockItem().createForm(
context,
L10().stockItemCreate,
- data: {
- "location": location != null ? location!.pk : null,
- },
+ data: data,
fields: fields,
onSuccess: (result) async {
Map data = result as Map;
diff --git a/pubspec.lock b/pubspec.lock
index 66a55bde..6cd6d6f9 100644
--- a/pubspec.lock
+++ b/pubspec.lock
@@ -5,42 +5,47 @@ packages:
dependency: transitive
description:
name: _fe_analyzer_shared
- sha256: "0c80aeab9bc807ab10022cd3b2f4cf2ecdf231949dc1ddd9442406a003f19201"
+ sha256: f256b0c0ba6c7577c15e2e4e114755640a875e885099367bf6e012b19314c834
url: "https://pub.dev"
source: hosted
- version: "52.0.0"
+ version: "72.0.0"
+ _macros:
+ dependency: transitive
+ description: dart
+ source: sdk
+ version: "0.3.2"
adaptive_theme:
dependency: "direct main"
description:
name: adaptive_theme
- sha256: "2d9bfee4240cdfad1b169cb43ac38fb49487e7fe1cc845e2973d4cef1780c0f6"
+ sha256: f4ee609b464e5efc68131d9d15ba9aa1de4e3b5ede64be17781c6e19a52d637d
url: "https://pub.dev"
source: hosted
- version: "3.3.0"
+ version: "3.6.0"
analyzer:
dependency: transitive
description:
name: analyzer
- sha256: cd8ee83568a77f3ae6b913a36093a1c9b1264e7cb7f834d9ddd2311dade9c1f4
+ sha256: b652861553cd3990d8ed361f7979dc6d7053a9ac8843fa73820ab68ce5410139
url: "https://pub.dev"
source: hosted
- version: "5.4.0"
+ version: "6.7.0"
archive:
dependency: transitive
description:
name: archive
- sha256: d6347d54a2d8028e0437e3c099f66fdb8ae02c4720c1e7534c9f24c10351f85d
+ sha256: cb6a278ef2dbb298455e1a713bda08524a175630ec643a242c399c932a0a1f7d
url: "https://pub.dev"
source: hosted
- version: "3.3.6"
+ version: "3.6.1"
args:
dependency: transitive
description:
name: args
- sha256: "139d809800a412ebb26a3892da228b2d0ba36f0ef5d9a82166e5e52ec8d61611"
+ sha256: "7cf60b9f0cc88203c5a190b4cd62a99feea42759a7fa695010eb5de1c0b2252a"
url: "https://pub.dev"
source: hosted
- version: "2.3.2"
+ version: "2.5.0"
async:
dependency: transitive
description:
@@ -53,66 +58,66 @@ packages:
dependency: "direct main"
description:
name: audioplayers
- sha256: "61583554386721772f9309f509e17712865b38565a903c761f96b1115a979282"
+ sha256: c346ba5a39dc208f1bab55fc239855f573d69b0e832402114bf0b793622adc4d
url: "https://pub.dev"
source: hosted
- version: "4.1.0"
+ version: "6.1.0"
audioplayers_android:
dependency: transitive
description:
name: audioplayers_android
- sha256: dbdc9b7f2aa2440314c638aa55aadd45c7705e8340d5eddf2e3fb8da32d4ae2c
+ sha256: de576b890befe27175c2f511ba8b742bec83765fa97c3ce4282bba46212f58e4
url: "https://pub.dev"
source: hosted
- version: "3.0.2"
+ version: "5.0.0"
audioplayers_darwin:
dependency: transitive
description:
name: audioplayers_darwin
- sha256: "6aea96df1d12f7ad5a71d88c6d1b22a216211a9564219920124c16768e456e9d"
+ sha256: e507887f3ff18d8e5a10a668d7bedc28206b12e10b98347797257c6ae1019c3b
url: "https://pub.dev"
source: hosted
- version: "4.1.0"
+ version: "6.0.0"
audioplayers_linux:
dependency: transitive
description:
name: audioplayers_linux
- sha256: "396b62ac62c92dd26c3bc5106583747f57a8b325ebd2b41e5576f840cfc61338"
+ sha256: "3d3d244c90436115417f170426ce768856d8fe4dfc5ed66a049d2890acfa82f9"
url: "https://pub.dev"
source: hosted
- version: "2.1.0"
+ version: "4.0.0"
audioplayers_platform_interface:
dependency: transitive
description:
name: audioplayers_platform_interface
- sha256: f7daaed4659143094151ecf6bacd927d29ab8acffba98c110c59f0b81ae51143
+ sha256: "6834dd48dfb7bc6c2404998ebdd161f79cd3774a7e6779e1348d54a3bfdcfaa5"
url: "https://pub.dev"
source: hosted
- version: "5.0.1"
+ version: "7.0.0"
audioplayers_web:
dependency: transitive
description:
name: audioplayers_web
- sha256: ec84fd46eed1577148ed4113f5998a36a18da4fce7170c37ce3e21b631393339
+ sha256: "3609bdf0e05e66a3d9750ee40b1e37f2a622c4edb796cc600b53a90a30a2ace4"
url: "https://pub.dev"
source: hosted
- version: "3.1.0"
+ version: "5.0.1"
audioplayers_windows:
dependency: transitive
description:
name: audioplayers_windows
- sha256: "1d3aaac98a192b8488167711ba1e67d8b96333e8d0572ede4e2912e5bbce69a3"
+ sha256: "8605762dddba992138d476f6a0c3afd9df30ac5b96039929063eceed416795c2"
url: "https://pub.dev"
source: hosted
- version: "2.0.2"
+ version: "4.0.0"
back_button_interceptor:
dependency: transitive
description:
name: back_button_interceptor
- sha256: e47660f2178a4392eb72001f9594d3fdcb5efde93e59d2819d61fda499e781c8
+ sha256: "8354b03320043db546e3f446af171faaa71384100486444113628f7db1e7fe9b"
url: "https://pub.dev"
source: hosted
- version: "6.0.2"
+ version: "7.0.3"
boolean_selector:
dependency: transitive
description:
@@ -141,50 +146,50 @@ packages:
dependency: transitive
description:
name: cached_network_image_web
- sha256: "42a835caa27c220d1294311ac409a43361088625a4f23c820b006dd9bffb3316"
+ sha256: "205d6a9f1862de34b93184f22b9d2d94586b2f05c581d546695e3d8f6a805cd7"
url: "https://pub.dev"
source: hosted
- version: "1.1.1"
+ version: "1.2.0"
camera:
dependency: "direct main"
description:
name: camera
- sha256: e7ac55af24a890d20276821eb3c95857074d03b7de6f9892b99a205ee30bd179
+ sha256: dfa8fc5a1adaeb95e7a54d86a5bd56f4bb0e035515354c8ac6d262e35cec2ec8
url: "https://pub.dev"
source: hosted
- version: "0.10.3"
+ version: "0.10.6"
camera_android:
dependency: transitive
description:
name: camera_android
- sha256: e491c836147f60dd8a54cf3895fd2960e13b21b78a9d15b563a1b6c70894f142
+ sha256: "32f04948a284b71d938fe275616faf4957d07f9b3aab8021bfc8c418301a289e"
url: "https://pub.dev"
source: hosted
- version: "0.10.4"
+ version: "0.10.9+11"
camera_avfoundation:
dependency: transitive
description:
name: camera_avfoundation
- sha256: "6a68c20593d4cd58974d555f74a48b244f9db28cc9156de57781122d11b8754b"
+ sha256: "7c28969a975a7eb2349bc2cb2dfe3ad218a33dba9968ecfb181ce08c87486655"
url: "https://pub.dev"
source: hosted
- version: "0.9.11"
+ version: "0.9.17+3"
camera_platform_interface:
dependency: transitive
description:
name: camera_platform_interface
- sha256: b632be28e61d00a233f67d98ea90fd7041956f27a1c65500188ee459be60e15f
+ sha256: b3ede1f171532e0d83111fe0980b46d17f1aa9788a07a2fbed07366bbdbb9061
url: "https://pub.dev"
source: hosted
- version: "2.4.0"
+ version: "2.8.0"
camera_web:
dependency: transitive
description:
name: camera_web
- sha256: "496de93c5d462738ce991dbfe91fb19026f115ed36406700a20a380fb0018299"
+ sha256: "595f28c89d1fb62d77c73c633193755b781c6d2e0ebcd8dc25b763b514e6ba8f"
url: "https://pub.dev"
source: hosted
- version: "0.3.1+1"
+ version: "0.3.5"
characters:
dependency: transitive
description:
@@ -197,10 +202,10 @@ packages:
dependency: transitive
description:
name: checked_yaml
- sha256: "3d1505d91afa809d177efd4eed5bb0eb65805097a1463abdd2add076effae311"
+ sha256: feb6bed21949061731a7a75fc5d2aa727cf160b91af9a3e464c5e3a32e28b5ff
url: "https://pub.dev"
source: hosted
- version: "2.0.2"
+ version: "2.0.3"
cli_util:
dependency: transitive
description:
@@ -221,10 +226,10 @@ packages:
dependency: transitive
description:
name: collection
- sha256: f092b211a4319e98e5ff58223576de6c2803db36221657b46c82574721240687
+ sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a
url: "https://pub.dev"
source: hosted
- version: "1.17.2"
+ version: "1.18.0"
convert:
dependency: transitive
description:
@@ -237,26 +242,26 @@ packages:
dependency: transitive
description:
name: coverage
- sha256: "2fb815080e44a09b85e0f2ca8a820b15053982b2e714b59267719e8a9ff17097"
+ sha256: c1fb2dce3c0085f39dc72668e85f8e0210ec7de05345821ff58530567df345a5
url: "https://pub.dev"
source: hosted
- version: "1.6.3"
+ version: "1.9.2"
cross_file:
dependency: transitive
description:
name: cross_file
- sha256: "0b0036e8cccbfbe0555fd83c1d31a6f30b77a96b598b35a5d36dd41f718695e9"
+ sha256: "7caf6a750a0c04effbb52a676dce9a4a592e10ad35c34d6d2d0e4811160d5670"
url: "https://pub.dev"
source: hosted
- version: "0.3.3+4"
+ version: "0.3.4+2"
crypto:
dependency: transitive
description:
name: crypto
- sha256: aa274aa7774f8964e4f4f38cc994db7b6158dd36e9187aaceaddc994b35c6c67
+ sha256: ec30d999af904f33454ba22ed9a86162b35e52b44ac4807d1d93c288041d7d27
url: "https://pub.dev"
source: hosted
- version: "3.0.2"
+ version: "3.0.5"
cupertino_icons:
dependency: "direct main"
description:
@@ -269,10 +274,10 @@ packages:
dependency: "direct main"
description:
name: currency_formatter
- sha256: "8fc2b612e465a4e886f5d8d3a7cec03cc3cabab617ef96bf54c70886c907f2c3"
+ sha256: "8d4e1762e226289e4abe902075d167029617553c913309b34a227c52c61dd063"
url: "https://pub.dev"
source: hosted
- version: "2.0.1"
+ version: "2.2.1"
datetime_picker_formfield:
dependency: "direct main"
description:
@@ -285,18 +290,18 @@ packages:
dependency: "direct main"
description:
name: device_info_plus
- sha256: f52ab3b76b36ede4d135aab80194df8925b553686f0fa12226b4e2d658e45903
+ sha256: a7fd703482b391a87d60b6061d04dfdeab07826b96f9abd8f5ed98068acc0074
url: "https://pub.dev"
source: hosted
- version: "8.2.2"
+ version: "10.1.2"
device_info_plus_platform_interface:
dependency: transitive
description:
name: device_info_plus_platform_interface
- sha256: d3b01d5868b50ae571cd1dc6e502fc94d956b665756180f7b16ead09e836fd64
+ sha256: "282d3cf731045a2feb66abfe61bbc40870ae50a3ed10a4d3d217556c35c8c2ba"
url: "https://pub.dev"
source: hosted
- version: "7.0.0"
+ version: "7.0.1"
dropdown_search:
dependency: "direct main"
description:
@@ -317,10 +322,10 @@ packages:
dependency: transitive
description:
name: ffi
- sha256: a38574032c5f1dd06c4aee541789906c12ccaab8ba01446e800d9c5b79c4a978
+ sha256: "16ed7b077ef01ad6170a3d0c57caa4a112a38d7a2ed5602e0aca9ca6f3d98da6"
url: "https://pub.dev"
source: hosted
- version: "2.0.1"
+ version: "2.1.3"
file:
dependency: transitive
description:
@@ -333,42 +338,42 @@ packages:
dependency: "direct main"
description:
name: file_picker
- sha256: "9d6e95ec73abbd31ec54d0e0df8a961017e165aba1395e462e5b31ea0c165daf"
+ sha256: "167bb619cdddaa10ef2907609feb8a79c16dfa479d3afaf960f8e223f754bf12"
url: "https://pub.dev"
source: hosted
- version: "5.3.1"
+ version: "8.1.2"
file_selector_linux:
dependency: transitive
description:
name: file_selector_linux
- sha256: "770eb1ab057b5ae4326d1c24cc57710758b9a46026349d021d6311bd27580046"
+ sha256: "045d372bf19b02aeb69cacf8b4009555fb5f6f0b7ad8016e5f46dd1387ddd492"
url: "https://pub.dev"
source: hosted
- version: "0.9.2"
+ version: "0.9.2+1"
file_selector_macos:
dependency: transitive
description:
name: file_selector_macos
- sha256: "4ada532862917bf16e3adb3891fe3a5917a58bae03293e497082203a80909412"
+ sha256: cb284e267f8e2a45a904b5c094d2ba51d0aabfc20b1538ab786d9ef7dc2bf75c
url: "https://pub.dev"
source: hosted
- version: "0.9.3+1"
+ version: "0.9.4+1"
file_selector_platform_interface:
dependency: transitive
description:
name: file_selector_platform_interface
- sha256: "412705a646a0ae90f33f37acfae6a0f7cbc02222d6cd34e479421c3e74d3853c"
+ sha256: a3994c26f10378a039faa11de174d7b78eb8f79e4dd0af2a451410c1a5c3f66b
url: "https://pub.dev"
source: hosted
- version: "2.6.0"
+ version: "2.6.2"
file_selector_windows:
dependency: transitive
description:
name: file_selector_windows
- sha256: "1372760c6b389842b77156203308940558a2817360154084368608413835fc26"
+ sha256: "2ad726953f6e8affbc4df8dc78b77c3b4a060967a291e528ef72ae846c60fb69"
url: "https://pub.dev"
source: hosted
- version: "0.9.3"
+ version: "0.9.3+2"
flutter:
dependency: "direct main"
description: flutter
@@ -399,18 +404,18 @@ packages:
dependency: "direct main"
description:
name: flutter_localized_locales
- sha256: f219350dffcfd56692b4e41953710c2975888dd9c507d977ec6853d7ea140336
+ sha256: "478d10535edf07292e34cb4c757882edeeaf96d5e3dbb04b42733038bd41dd3f"
url: "https://pub.dev"
source: hosted
- version: "2.0.4"
+ version: "2.0.5"
flutter_markdown:
dependency: "direct main"
description:
name: flutter_markdown
- sha256: "21b085a1c185e46701373866144ced56cfb7a0c33f63c916bb8fe2d0c1491278"
+ sha256: "04c4722cc36ec5af38acc38ece70d22d3c2123c61305d555750a091517bbe504"
url: "https://pub.dev"
source: hosted
- version: "0.6.19"
+ version: "0.6.23"
flutter_overlay_loader:
dependency: "direct main"
description:
@@ -423,10 +428,10 @@ packages:
dependency: transitive
description:
name: flutter_plugin_android_lifecycle
- sha256: "8ffe990dac54a4a5492747added38571a5ab474c8e5d196809ea08849c69b1bb"
+ sha256: "9ee02950848f61c4129af3d6ec84a1cfc0e47931abc746b03e7a3bc3e8ff6eda"
url: "https://pub.dev"
source: hosted
- version: "2.0.13"
+ version: "2.0.22"
flutter_speed_dial:
dependency: "direct main"
description:
@@ -447,10 +452,10 @@ packages:
dependency: "direct main"
description:
name: flutter_tabler_icons
- sha256: a1dd0221ab8c77ee15046b8da8feac5ba129b5efd2b667e199c110cf930693b3
+ sha256: "657c2201e12fa9121a12ddb4edb74d69290f803868eb6526f04102e6d49ec882"
url: "https://pub.dev"
source: hosted
- version: "1.35.0"
+ version: "1.43.0"
flutter_test:
dependency: "direct dev"
description: flutter
@@ -465,26 +470,26 @@ packages:
dependency: transitive
description:
name: frontend_server_client
- sha256: "408e3ca148b31c20282ad6f37ebfa6f4bdc8fede5b74bc2f08d9d92b55db3612"
+ sha256: f64a0333a82f30b0cca061bc3d143813a486dc086b574bfb233b7c1372427694
url: "https://pub.dev"
source: hosted
- version: "3.2.0"
+ version: "4.0.0"
glob:
dependency: transitive
description:
name: glob
- sha256: "4515b5b6ddb505ebdd242a5f2cc5d22d3d6a80013789debfbda7777f47ea308c"
+ sha256: "0e7014b3b7d4dac1ca4d6114f82bf1782ee86745b9b42a92c9289c23d8a0ab63"
url: "https://pub.dev"
source: hosted
- version: "2.1.1"
+ version: "2.1.2"
http:
dependency: "direct main"
description:
name: http
- sha256: "5895291c13fa8a3bd82e76d5627f69e0d85ca6a30dcac95c4ea19a5d555879c2"
+ sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010
url: "https://pub.dev"
source: hosted
- version: "0.13.6"
+ version: "1.2.2"
http_multi_server:
dependency: transitive
description:
@@ -513,66 +518,66 @@ packages:
dependency: "direct main"
description:
name: image_picker
- sha256: "1f498d086203360cca099d20ffea2963f48c39ce91bdd8a3b6d4a045786b02c8"
+ sha256: "021834d9c0c3de46bf0fe40341fa07168407f694d9b2bb18d532dc1261867f7a"
url: "https://pub.dev"
source: hosted
- version: "1.0.8"
+ version: "1.1.2"
image_picker_android:
dependency: transitive
description:
name: image_picker_android
- sha256: "8179b54039b50eee561676232304f487602e2950ffb3e8995ed9034d6505ca34"
+ sha256: c0a6763d50b354793d0192afd0a12560b823147d3ded7c6b77daf658fa05cc85
url: "https://pub.dev"
source: hosted
- version: "0.8.7+4"
+ version: "0.8.12+13"
image_picker_for_web:
dependency: transitive
description:
name: image_picker_for_web
- sha256: "8b6c160cdbe572199103a091c783685b236110e4a0fd7a4947f32ff5b7da8765"
+ sha256: "65d94623e15372c5c51bebbcb820848d7bcb323836e12dfdba60b5d3a8b39e50"
url: "https://pub.dev"
source: hosted
- version: "3.0.0"
+ version: "3.0.5"
image_picker_ios:
dependency: transitive
description:
name: image_picker_ios
- sha256: fadafce49e8569257a0cad56d24438a6fa1f0cbd7ee0af9b631f7492818a4ca3
+ sha256: "6703696ad49f5c3c8356d576d7ace84d1faf459afb07accbb0fae780753ff447"
url: "https://pub.dev"
source: hosted
- version: "0.8.9+1"
+ version: "0.8.12"
image_picker_linux:
dependency: transitive
description:
name: image_picker_linux
- sha256: "02cbc21fe1706b97942b575966e5fbbeaac535e76deef70d3a242e4afb857831"
+ sha256: "4ed1d9bb36f7cd60aa6e6cd479779cc56a4cb4e4de8f49d487b1aaad831300fa"
url: "https://pub.dev"
source: hosted
- version: "0.2.1"
+ version: "0.2.1+1"
image_picker_macos:
dependency: transitive
description:
name: image_picker_macos
- sha256: cee2aa86c56780c13af2c77b5f2f72973464db204569e1ba2dd744459a065af4
+ sha256: "3f5ad1e8112a9a6111c46d0b57a7be2286a9a07fc6e1976fdf5be2bd31d4ff62"
url: "https://pub.dev"
source: hosted
- version: "0.2.1"
+ version: "0.2.1+1"
image_picker_platform_interface:
dependency: transitive
description:
name: image_picker_platform_interface
- sha256: c1134543ae2187e85299996d21c526b2f403854994026d575ae4cf30d7bb2a32
+ sha256: "9ec26d410ff46f483c5519c29c02ef0e02e13a543f882b152d4bfd2f06802f80"
url: "https://pub.dev"
source: hosted
- version: "2.9.0"
+ version: "2.10.0"
image_picker_windows:
dependency: transitive
description:
name: image_picker_windows
- sha256: c3066601ea42113922232c7b7b3330a2d86f029f685bba99d82c30e799914952
+ sha256: "6ad07afc4eb1bc25f3a01084d28520496c4a3bb0cb13685435838167c9dcedeb"
url: "https://pub.dev"
source: hosted
- version: "0.2.1"
+ version: "0.2.1+1"
infinite_scroll_pagination:
dependency: "direct main"
description:
@@ -585,10 +590,10 @@ packages:
dependency: "direct main"
description:
name: intl
- sha256: "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d"
+ sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf
url: "https://pub.dev"
source: hosted
- version: "0.18.1"
+ version: "0.19.0"
io:
dependency: transitive
description:
@@ -609,98 +614,130 @@ packages:
dependency: transitive
description:
name: json_annotation
- sha256: c33da08e136c3df0190bd5bbe51ae1df4a7d96e7954d1d7249fea2968a72d317
+ sha256: "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1"
url: "https://pub.dev"
source: hosted
- version: "4.8.0"
+ version: "4.9.0"
+ leak_tracker:
+ dependency: transitive
+ description:
+ name: leak_tracker
+ sha256: "3f87a60e8c63aecc975dda1ceedbc8f24de75f09e4856ea27daf8958f2f0ce05"
+ url: "https://pub.dev"
+ source: hosted
+ version: "10.0.5"
+ leak_tracker_flutter_testing:
+ dependency: transitive
+ description:
+ name: leak_tracker_flutter_testing
+ sha256: "932549fb305594d82d7183ecd9fa93463e9914e1b67cacc34bc40906594a1806"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.0.5"
+ leak_tracker_testing:
+ dependency: transitive
+ description:
+ name: leak_tracker_testing
+ sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.0.1"
lint:
dependency: "direct dev"
description:
name: lint
- sha256: f4bd4dbaa39f4ae8836f2d1275f2f32bc68b3a8cce0a0735dd1f7a601f06682a
+ sha256: d758a5211fce7fd3f5e316f804daefecdc34c7e53559716125e6da7388ae8565
url: "https://pub.dev"
source: hosted
- version: "2.1.2"
+ version: "2.3.0"
logging:
dependency: transitive
description:
name: logging
- sha256: "04094f2eb032cbb06c6f6e8d3607edcfcb0455e2bb6cbc010cb01171dcb64e6d"
+ sha256: "623a88c9594aa774443aa3eb2d41807a48486b5613e67599fb4c41c0ad47c340"
url: "https://pub.dev"
source: hosted
- version: "1.1.1"
+ version: "1.2.0"
+ macros:
+ dependency: transitive
+ description:
+ name: macros
+ sha256: "0acaed5d6b7eab89f63350bccd82119e6c602df0f391260d0e32b5e23db79536"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.1.2-main.4"
markdown:
dependency: transitive
description:
name: markdown
- sha256: "1b134d9f8ff2da15cb298efe6cd8b7d2a78958c1b00384ebcbdf13fe340a6c90"
+ sha256: ef2a1298144e3f985cc736b22e0ccdaf188b5b3970648f2d9dc13efd1d9df051
url: "https://pub.dev"
source: hosted
- version: "7.2.1"
+ version: "7.2.2"
matcher:
dependency: transitive
description:
name: matcher
- sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e"
+ sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb
url: "https://pub.dev"
source: hosted
- version: "0.12.16"
+ version: "0.12.16+1"
material_color_utilities:
dependency: transitive
description:
name: material_color_utilities
- sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41"
+ sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec
url: "https://pub.dev"
source: hosted
- version: "0.5.0"
+ version: "0.11.1"
meta:
dependency: transitive
description:
name: meta
- sha256: "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3"
+ sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7
url: "https://pub.dev"
source: hosted
- version: "1.9.1"
+ version: "1.15.0"
mime:
dependency: transitive
description:
name: mime
- sha256: e4ff8e8564c03f255408decd16e7899da1733852a9110a58fe6d1b817684a63e
+ sha256: "801fd0b26f14a4a58ccb09d5892c3fbdeff209594300a542492cf13fba9d247a"
url: "https://pub.dev"
source: hosted
- version: "1.0.4"
+ version: "1.0.6"
node_preamble:
dependency: transitive
description:
name: node_preamble
- sha256: "8ebdbaa3b96d5285d068f80772390d27c21e1fa10fb2df6627b1b9415043608d"
+ sha256: "6e7eac89047ab8a8d26cf16127b5ed26de65209847630400f9aefd7cd5c730db"
url: "https://pub.dev"
source: hosted
- version: "2.0.1"
+ version: "2.0.2"
octo_image:
dependency: transitive
description:
name: octo_image
- sha256: "45b40f99622f11901238e18d48f5f12ea36426d8eced9f4cbf58479c7aa2430d"
+ sha256: "34faa6639a78c7e3cbe79be6f9f96535867e879748ade7d17c9b1ae7536293bd"
url: "https://pub.dev"
source: hosted
- version: "2.0.0"
+ version: "2.1.0"
one_context:
dependency: "direct main"
description:
name: one_context
- sha256: db39c05e68a0f8dabb68072eab31e21912a5f4933db24eabc2b1af8a02d221e2
+ sha256: "40607e6cf85d95dc81ee037788857a943784d37dfc04a40904a140328745e0af"
url: "https://pub.dev"
source: hosted
- version: "2.1.0"
+ version: "4.0.0"
open_filex:
dependency: "direct main"
description:
name: open_filex
- sha256: "74e2280754cf8161e860746c3181db2c996d6c1909c7057b738ede4a469816b8"
+ sha256: ba425ea49affd0a98a234aa9344b9ea5d4c4f7625a1377961eae9fe194c3d523
url: "https://pub.dev"
source: hosted
- version: "4.4.0"
+ version: "4.5.0"
package_config:
dependency: transitive
description:
@@ -713,50 +750,50 @@ packages:
dependency: "direct main"
description:
name: package_info_plus
- sha256: "10259b111176fba5c505b102e3a5b022b51dd97e30522e906d6922c745584745"
+ sha256: a75164ade98cb7d24cfd0a13c6408927c6b217fa60dee5a7ff5c116a58f28918
url: "https://pub.dev"
source: hosted
- version: "3.1.2"
+ version: "8.0.2"
package_info_plus_platform_interface:
dependency: transitive
description:
name: package_info_plus_platform_interface
- sha256: "9bc8ba46813a4cc42c66ab781470711781940780fd8beddd0c3da62506d3a6c6"
+ sha256: ac1f4a4847f1ade8e6a87d1f39f5d7c67490738642e2542f559ec38c37489a66
url: "https://pub.dev"
source: hosted
- version: "2.0.1"
+ version: "3.0.1"
path:
dependency: "direct main"
description:
name: path
- sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917"
+ sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af"
url: "https://pub.dev"
source: hosted
- version: "1.8.3"
+ version: "1.9.0"
path_provider:
dependency: "direct main"
description:
name: path_provider
- sha256: c9e7d3a4cd1410877472158bee69963a4579f78b68c65a2b7d40d1a7a88bb161
+ sha256: fec0d61223fba3154d87759e3cc27fe2c8dc498f6386c6d6fc80d1afdd1bf378
url: "https://pub.dev"
source: hosted
- version: "2.1.3"
+ version: "2.1.4"
path_provider_android:
dependency: transitive
description:
name: path_provider_android
- sha256: "51f0d2c554cfbc9d6a312ab35152fc77e2f0b758ce9f1a444a3a1e5b8f3c6b7f"
+ sha256: "6f01f8e37ec30b07bc424b4deabac37cacb1bc7e2e515ad74486039918a37eb7"
url: "https://pub.dev"
source: hosted
- version: "2.2.3"
+ version: "2.2.10"
path_provider_foundation:
dependency: transitive
description:
name: path_provider_foundation
- sha256: "5a7999be66e000916500be4f15a3633ebceb8302719b47b9cc49ce924125350f"
+ sha256: f234384a3fdd67f989b4d54a5d73ca2a6c422fa55ae694381ae0f4375cd1ea16
url: "https://pub.dev"
source: hosted
- version: "2.3.2"
+ version: "2.4.0"
path_provider_linux:
dependency: transitive
description:
@@ -769,50 +806,42 @@ packages:
dependency: transitive
description:
name: path_provider_platform_interface
- sha256: "94b1e0dd80970c1ce43d5d4e050a9918fce4f4a775e6142424c30a29a363265c"
+ sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334"
url: "https://pub.dev"
source: hosted
- version: "2.1.1"
+ version: "2.1.2"
path_provider_windows:
dependency: transitive
description:
name: path_provider_windows
- sha256: "8bc9f22eee8690981c22aa7fc602f5c85b497a6fb2ceb35ee5a5e5ed85ad8170"
+ sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7
url: "https://pub.dev"
source: hosted
- version: "2.2.1"
+ version: "2.3.0"
petitparser:
dependency: transitive
description:
name: petitparser
- sha256: "49392a45ced973e8d94a85fdb21293fbb40ba805fc49f2965101ae748a3683b4"
+ sha256: c15605cd28af66339f8eb6fbe0e541bfe2d1b72d5825efc6598f3e0a31b9ad27
url: "https://pub.dev"
source: hosted
- version: "5.1.0"
+ version: "6.0.2"
platform:
dependency: transitive
description:
name: platform
- sha256: "4a451831508d7d6ca779f7ac6e212b4023dd5a7d08a27a63da33756410e32b76"
+ sha256: "9b71283fc13df574056616011fb138fd3b793ea47cc509c189a6c3fa5f8a1a65"
url: "https://pub.dev"
source: hosted
- version: "3.1.0"
+ version: "3.1.5"
plugin_platform_interface:
dependency: transitive
description:
name: plugin_platform_interface
- sha256: "6a2128648c854906c53fa8e33986fc0247a1116122f9534dd20e3ab9e16a32bc"
+ sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02"
url: "https://pub.dev"
source: hosted
- version: "2.1.4"
- pointycastle:
- dependency: transitive
- description:
- name: pointycastle
- sha256: db7306cf0249f838d1a24af52b5a5887c5bf7f31d8bb4e827d071dc0939ad346
- url: "https://pub.dev"
- source: hosted
- version: "3.6.2"
+ version: "2.1.8"
pool:
dependency: transitive
description:
@@ -821,22 +850,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.5.1"
- process:
- dependency: transitive
- description:
- name: process
- sha256: "53fd8db9cec1d37b0574e12f07520d582019cb6c44abf5479a01505099a34a09"
- url: "https://pub.dev"
- source: hosted
- version: "4.2.4"
pub_semver:
dependency: transitive
description:
name: pub_semver
- sha256: "307de764d305289ff24ad257ad5c5793ce56d04947599ad68b3baa124105fc17"
+ sha256: "40d3ab1bbd474c4c2328c91e3a7df8c6dd629b79ece4c4bd04bee496a224fb0c"
url: "https://pub.dev"
source: hosted
- version: "2.1.3"
+ version: "2.1.4"
qr_code_scanner:
dependency: "direct main"
description:
@@ -845,14 +866,6 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.0.1"
- quiver:
- dependency: transitive
- description:
- name: quiver
- sha256: b1c1ac5ce6688d77f65f3375a9abb9319b3cb32486bdc7a1e0fdf004d7ba4e47
- url: "https://pub.dev"
- source: hosted
- version: "3.2.1"
rxdart:
dependency: transitive
description:
@@ -865,114 +878,114 @@ packages:
dependency: "direct main"
description:
name: sembast
- sha256: "9a9f0c7aca07043fef857b8b365f41592e48832b61462292699b57978e241c11"
+ sha256: "934a7b99297fb4f0b6e69fb1465286737b3b47b1a5149bf8dfc85667fbbdd21d"
url: "https://pub.dev"
source: hosted
- version: "3.6.0"
+ version: "3.7.4+3"
sentry:
dependency: transitive
description:
name: sentry
- sha256: "39c23342fc96105da449914f7774139a17a0ca8a4e70d9ad5200171f7e47d6ba"
+ sha256: "033287044a6644a93498969449d57c37907e56f5cedb17b88a3ff20a882261dd"
url: "https://pub.dev"
source: hosted
- version: "7.9.0"
+ version: "8.9.0"
sentry_flutter:
dependency: "direct main"
description:
name: sentry_flutter
- sha256: ff68ab31918690da004a42e20204242a3ad9ad57da7e2712da8487060ac9767f
+ sha256: "3780b5a0bb6afd476857cfbc6c7444d969c29a4d9bd1aa5b6960aa76c65b737a"
url: "https://pub.dev"
source: hosted
- version: "7.9.0"
+ version: "8.9.0"
shared_preferences:
dependency: transitive
description:
name: shared_preferences
- sha256: d3bbe5553a986e83980916ded2f0b435ef2e1893dfaa29d5a7a790d0eca12180
+ sha256: "746e5369a43170c25816cc472ee016d3a66bc13fcf430c0bc41ad7b4b2922051"
url: "https://pub.dev"
source: hosted
- version: "2.2.3"
+ version: "2.3.2"
shared_preferences_android:
dependency: transitive
description:
name: shared_preferences_android
- sha256: "8568a389334b6e83415b6aae55378e158fbc2314e074983362d20c562780fb06"
+ sha256: "480ba4345773f56acda9abf5f50bd966f581dac5d514e5fc4a18c62976bbba7e"
url: "https://pub.dev"
source: hosted
- version: "2.2.1"
+ version: "2.3.2"
shared_preferences_foundation:
dependency: transitive
description:
name: shared_preferences_foundation
- sha256: "7708d83064f38060c7b39db12aefe449cb8cdc031d6062280087bc4cdb988f5c"
+ sha256: c4b35f6cb8f63c147312c054ce7c2254c8066745125264f0c88739c417fc9d9f
url: "https://pub.dev"
source: hosted
- version: "2.3.5"
+ version: "2.5.2"
shared_preferences_linux:
dependency: transitive
description:
name: shared_preferences_linux
- sha256: "9f2cbcf46d4270ea8be39fa156d86379077c8a5228d9dfdb1164ae0bb93f1faa"
+ sha256: "580abfd40f415611503cae30adf626e6656dfb2f0cee8f465ece7b6defb40f2f"
url: "https://pub.dev"
source: hosted
- version: "2.3.2"
+ version: "2.4.1"
shared_preferences_platform_interface:
dependency: transitive
description:
name: shared_preferences_platform_interface
- sha256: d4ec5fc9ebb2f2e056c617112aa75dcf92fc2e4faaf2ae999caa297473f75d8a
+ sha256: "57cbf196c486bc2cf1f02b85784932c6094376284b3ad5779d1b1c6c6a816b80"
url: "https://pub.dev"
source: hosted
- version: "2.3.1"
+ version: "2.4.1"
shared_preferences_web:
dependency: transitive
description:
name: shared_preferences_web
- sha256: d762709c2bbe80626ecc819143013cc820fa49ca5e363620ee20a8b15a3e3daf
+ sha256: d2ca4132d3946fec2184261726b355836a82c33d7d5b67af32692aff18a4684e
url: "https://pub.dev"
source: hosted
- version: "2.2.1"
+ version: "2.4.2"
shared_preferences_windows:
dependency: transitive
description:
name: shared_preferences_windows
- sha256: "841ad54f3c8381c480d0c9b508b89a34036f512482c407e6df7a9c4aa2ef8f59"
+ sha256: "94ef0f72b2d71bc3e700e025db3710911bd51a71cefb65cc609dd0d9a982e3c1"
url: "https://pub.dev"
source: hosted
- version: "2.3.2"
+ version: "2.4.1"
shelf:
dependency: transitive
description:
name: shelf
- sha256: c24a96135a2ccd62c64b69315a14adc5c3419df63b4d7c05832a346fdb73682c
+ sha256: ad29c505aee705f41a4d8963641f91ac4cee3c8fad5947e033390a7bd8180fa4
url: "https://pub.dev"
source: hosted
- version: "1.4.0"
+ version: "1.4.1"
shelf_packages_handler:
dependency: transitive
description:
name: shelf_packages_handler
- sha256: aef74dc9195746a384843102142ab65b6a4735bb3beea791e63527b88cc83306
+ sha256: "89f967eca29607c933ba9571d838be31d67f53f6e4ee15147d5dc2934fee1b1e"
url: "https://pub.dev"
source: hosted
- version: "3.0.1"
+ version: "3.0.2"
shelf_static:
dependency: transitive
description:
name: shelf_static
- sha256: e792b76b96a36d4a41b819da593aff4bdd413576b3ba6150df5d8d9996d2e74c
+ sha256: c87c3875f91262785dade62d135760c2c69cb217ac759485334c5857ad89f6e3
url: "https://pub.dev"
source: hosted
- version: "1.1.1"
+ version: "1.1.3"
shelf_web_socket:
dependency: transitive
description:
name: shelf_web_socket
- sha256: a988c0e8d8ffbdb8a28aa7ec8e449c260f3deb808781fe1284d22c5bba7156e8
+ sha256: "073c147238594ecd0d193f3456a5fe91c4b0abbcc68bf5cd95b36c4e194ac611"
url: "https://pub.dev"
source: hosted
- version: "1.0.3"
+ version: "2.0.0"
sky_engine:
dependency: transitive
description: flutter
@@ -990,18 +1003,18 @@ packages:
dependency: transitive
description:
name: source_map_stack_trace
- sha256: "84cf769ad83aa6bb61e0aa5a18e53aea683395f196a6f39c4c881fb90ed4f7ae"
+ sha256: c0713a43e323c3302c2abe2a1cc89aa057a387101ebd280371d6a6c9fa68516b
url: "https://pub.dev"
source: hosted
- version: "2.1.1"
+ version: "2.1.2"
source_maps:
dependency: transitive
description:
name: source_maps
- sha256: "490098075234dcedb83c5d949b4c93dad5e6b7702748de000be2b57b8e6b2427"
+ sha256: "708b3f6b97248e5781f493b765c3337db11c5d2c81c3094f10904bfa8004c703"
url: "https://pub.dev"
source: hosted
- version: "0.10.11"
+ version: "0.10.12"
source_span:
dependency: transitive
description:
@@ -1014,34 +1027,34 @@ packages:
dependency: transitive
description:
name: sqflite
- sha256: "78324387dc81df14f78df06019175a86a2ee0437624166c382e145d0a7fd9a4f"
+ sha256: ff5a2436ef8ebdfda748fbfe957f9981524cb5ff11e7bafa8c42771840e8a788
url: "https://pub.dev"
source: hosted
- version: "2.2.4+1"
+ version: "2.3.3+2"
sqflite_common:
dependency: transitive
description:
name: sqflite_common
- sha256: bfd6973aaeeb93475bc0d875ac9aefddf7965ef22ce09790eb963992ffc5183f
+ sha256: "2d8e607db72e9cb7748c9c6e739e2c9618320a5517de693d5a24609c4671b1a4"
url: "https://pub.dev"
source: hosted
- version: "2.4.2+2"
+ version: "2.5.4+4"
stack_trace:
dependency: transitive
description:
name: stack_trace
- sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5
+ sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b"
url: "https://pub.dev"
source: hosted
- version: "1.11.0"
+ version: "1.11.1"
stream_channel:
dependency: transitive
description:
name: stream_channel
- sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8"
+ sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7
url: "https://pub.dev"
source: hosted
- version: "2.1.1"
+ version: "2.1.2"
stream_transform:
dependency: transitive
description:
@@ -1062,10 +1075,10 @@ packages:
dependency: transitive
description:
name: synchronized
- sha256: "33b31b6beb98100bf9add464a36a8dd03eb10c7a8cf15aeec535e9b054aaf04b"
+ sha256: "69fe30f3a8b04a0be0c15ae6490fc859a78ef4c43ae2dd5e8a623d45bfcf9225"
url: "https://pub.dev"
source: hosted
- version: "3.0.1"
+ version: "3.3.0+3"
term_glyph:
dependency: transitive
description:
@@ -1078,106 +1091,98 @@ packages:
dependency: "direct dev"
description:
name: test
- sha256: "13b41f318e2a5751c3169137103b60c584297353d4b1761b66029bae6411fe46"
+ sha256: "7ee44229615f8f642b68120165ae4c2a75fe77ae2065b1e55ae4711f6cf0899e"
url: "https://pub.dev"
source: hosted
- version: "1.24.3"
+ version: "1.25.7"
test_api:
dependency: transitive
description:
name: test_api
- sha256: "75760ffd7786fffdfb9597c35c5b27eaeec82be8edfb6d71d32651128ed7aab8"
+ sha256: "5b8a98dafc4d5c4c9c72d8b31ab2b23fc13422348d2997120294d3bac86b4ddb"
url: "https://pub.dev"
source: hosted
- version: "0.6.0"
+ version: "0.7.2"
test_core:
dependency: transitive
description:
name: test_core
- sha256: "99806e9e6d95c7b059b7a0fc08f07fc53fabe54a829497f0d9676299f1e8637e"
+ sha256: "55ea5a652e38a1dfb32943a7973f3681a60f872f8c3a05a14664ad54ef9c6696"
url: "https://pub.dev"
source: hosted
- version: "0.5.3"
+ version: "0.6.4"
typed_data:
dependency: transitive
description:
name: typed_data
- sha256: "26f87ade979c47a150c9eaab93ccd2bebe70a27dc0b4b29517f2904f04eb11a5"
+ sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c
url: "https://pub.dev"
source: hosted
- version: "1.3.1"
- universal_io:
- dependency: transitive
- description:
- name: universal_io
- sha256: "06866290206d196064fd61df4c7aea1ffe9a4e7c4ccaa8fcded42dd41948005d"
- url: "https://pub.dev"
- source: hosted
- version: "2.2.0"
+ version: "1.3.2"
url_launcher:
dependency: "direct main"
description:
name: url_launcher
- sha256: c512655380d241a337521703af62d2c122bf7b77a46ff7dd750092aa9433499c
+ sha256: "21b704ce5fa560ea9f3b525b43601c678728ba46725bab9b01187b4831377ed3"
url: "https://pub.dev"
source: hosted
- version: "6.2.4"
+ version: "6.3.0"
url_launcher_android:
dependency: transitive
description:
name: url_launcher_android
- sha256: "507dc655b1d9cb5ebc756032eb785f114e415f91557b73bf60b7e201dfedeb2f"
+ sha256: e35a698ac302dd68e41f73250bd9517fe3ab5fa4f18fe4647a0872db61bacbab
url: "https://pub.dev"
source: hosted
- version: "6.2.2"
+ version: "6.3.10"
url_launcher_ios:
dependency: transitive
description:
name: url_launcher_ios
- sha256: "75bb6fe3f60070407704282a2d295630cab232991eb52542b18347a8a941df03"
+ sha256: e43b677296fadce447e987a2f519dcf5f6d1e527dc35d01ffab4fff5b8a7063e
url: "https://pub.dev"
source: hosted
- version: "6.2.4"
+ version: "6.3.1"
url_launcher_linux:
dependency: transitive
description:
name: url_launcher_linux
- sha256: ab360eb661f8879369acac07b6bb3ff09d9471155357da8443fd5d3cf7363811
+ sha256: e2b9622b4007f97f504cd64c0128309dfb978ae66adbe944125ed9e1750f06af
url: "https://pub.dev"
source: hosted
- version: "3.1.1"
+ version: "3.2.0"
url_launcher_macos:
dependency: transitive
description:
name: url_launcher_macos
- sha256: "9a1a42d5d2d95400c795b2914c36fdcb525870c752569438e4ebb09a2b5d90de"
+ sha256: "769549c999acdb42b8bcfa7c43d72bf79a382ca7441ab18a808e101149daf672"
url: "https://pub.dev"
source: hosted
- version: "3.2.0"
+ version: "3.2.1"
url_launcher_platform_interface:
dependency: transitive
description:
name: url_launcher_platform_interface
- sha256: "4aca1e060978e19b2998ee28503f40b5ba6226819c2b5e3e4d1821e8ccd92198"
+ sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029"
url: "https://pub.dev"
source: hosted
- version: "2.3.0"
+ version: "2.3.2"
url_launcher_web:
dependency: transitive
description:
name: url_launcher_web
- sha256: "7fd2f55fe86cea2897b963e864dc01a7eb0719ecc65fcef4c1cc3d686d718bb2"
+ sha256: "772638d3b34c779ede05ba3d38af34657a05ac55b06279ea6edd409e323dca8e"
url: "https://pub.dev"
source: hosted
- version: "2.2.0"
+ version: "2.3.3"
url_launcher_windows:
dependency: transitive
description:
name: url_launcher_windows
- sha256: ecf9725510600aa2bb6d7ddabe16357691b6d2805f66216a97d1b881e21beff7
+ sha256: "49c10f879746271804767cb45551ec5592cdab00ee105c06dddde1a98f73b185"
url: "https://pub.dev"
source: hosted
- version: "3.1.1"
+ version: "3.1.2"
uuid:
dependency: transitive
description:
@@ -1198,74 +1203,90 @@ packages:
dependency: transitive
description:
name: vm_service
- sha256: e7fb6c2282f7631712b69c19d1bff82f3767eea33a2321c14fa59ad67ea391c7
+ sha256: "5c5f338a667b4c644744b661f309fb8080bb94b18a7e91ef1dbd343bed00ed6d"
url: "https://pub.dev"
source: hosted
- version: "9.4.0"
+ version: "14.2.5"
watcher:
dependency: transitive
description:
name: watcher
- sha256: "6a7f46926b01ce81bfc339da6a7f20afbe7733eff9846f6d6a5466aa4c6667c0"
+ sha256: "3d2ad6751b3c16cf07c7fca317a1413b3f26530319181b37e3b9039b84fc01d8"
url: "https://pub.dev"
source: hosted
- version: "1.0.2"
+ version: "1.1.0"
web:
dependency: transitive
description:
name: web
- sha256: dc8ccd225a2005c1be616fe02951e2e342092edf968cf0844220383757ef8f10
+ sha256: cd3543bd5798f6ad290ea73d210f423502e71900302dde696f8bff84bf89a1cb
url: "https://pub.dev"
source: hosted
- version: "0.1.4-beta"
+ version: "1.1.0"
+ web_socket:
+ dependency: transitive
+ description:
+ name: web_socket
+ sha256: "3c12d96c0c9a4eec095246debcea7b86c0324f22df69893d538fcc6f1b8cce83"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.1.6"
web_socket_channel:
dependency: transitive
description:
name: web_socket_channel
- sha256: ca49c0bc209c687b887f30527fb6a9d80040b072cc2990f34b9bec3e7663101b
+ sha256: "9f187088ed104edd8662ca07af4b124465893caf063ba29758f97af57e61da8f"
url: "https://pub.dev"
source: hosted
- version: "2.3.0"
+ version: "3.0.1"
webkit_inspection_protocol:
dependency: transitive
description:
name: webkit_inspection_protocol
- sha256: "67d3a8b6c79e1987d19d848b0892e582dbb0c66c57cc1fef58a177dd2aa2823d"
+ sha256: "87d3f2333bb240704cd3f1c6b5b7acd8a10e7f0bc28c28dcf14e782014f4a572"
url: "https://pub.dev"
source: hosted
- version: "1.2.0"
+ version: "1.2.1"
win32:
dependency: transitive
description:
name: win32
- sha256: dd8f9344bc305ae2923e3d11a2a911d9a4e2c7dd6fe0ed10626d63211a69676e
+ sha256: "68d1e89a91ed61ad9c370f9f8b6effed9ae5e0ede22a270bdfa6daf79fc2290a"
url: "https://pub.dev"
source: hosted
- version: "4.1.3"
+ version: "5.5.4"
+ win32_registry:
+ dependency: transitive
+ description:
+ name: win32_registry
+ sha256: "21ec76dfc731550fd3e2ce7a33a9ea90b828fdf19a5c3bcf556fa992cfa99852"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.1.5"
xdg_directories:
dependency: transitive
description:
name: xdg_directories
- sha256: bd512f03919aac5f1313eb8249f223bacf4927031bf60b02601f81f687689e86
+ sha256: faea9dee56b520b55a566385b84f2e8de55e7496104adada9962e0bd11bcff1d
url: "https://pub.dev"
source: hosted
- version: "0.2.0+3"
+ version: "1.0.4"
xml:
dependency: transitive
description:
name: xml
- sha256: "979ee37d622dec6365e2efa4d906c37470995871fe9ae080d967e192d88286b5"
+ sha256: b015a8ad1c488f66851d762d3090a21c600e479dc75e68328c52774040cf9226
url: "https://pub.dev"
source: hosted
- version: "6.2.2"
+ version: "6.5.0"
yaml:
dependency: transitive
description:
name: yaml
- sha256: "23812a9b125b48d4007117254bca50abb6c712352927eece9e155207b1db2370"
+ sha256: "75769501ea3489fca56601ff33454fe45507ea3bfb014161abc3b43ae25989d5"
url: "https://pub.dev"
source: hosted
- version: "3.1.1"
+ version: "3.1.2"
sdks:
- dart: ">=3.1.0 <3.13.0"
- flutter: ">=3.13.0"
+ dart: ">=3.5.0 <3.13.0"
+ flutter: ">=3.24.0"
diff --git a/pubspec.yaml b/pubspec.yaml
index 9c07d459..0d175208 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -8,15 +8,15 @@ environment:
dependencies:
adaptive_theme: ^3.3.0 # Theme management (e.g. dark mode)
- audioplayers: ^4.1.0 # Play audio files
+ audioplayers: ^6.1.0 # Play audio files
cached_network_image: ^3.3.1 # Download and cache remote images
camera: ^0.10.3 # Camera
cupertino_icons: ^1.0.8
- currency_formatter: ^2.0.1
+ currency_formatter: ^2.2.1 # Currency formatting
datetime_picker_formfield: ^2.0.1 # Date / time picker
- device_info_plus: ^8.2.2 # Information about the device
+ device_info_plus: ^10.1.2 # Information about the device
dropdown_search: ^5.0.6 # Dropdown autocomplete form fields
- file_picker: ^5.3.1 # Select files from the device
+ file_picker: ^8.1.2 # Select files from the device
flutter:
sdk: flutter
flutter_cache_manager: ^3.3.0
@@ -27,19 +27,19 @@ dependencies:
flutter_overlay_loader: ^2.0.0 # Overlay screen support
flutter_speed_dial: ^6.2.0 # Speed dial / FAB implementation
flutter_tabler_icons: ^1.35.0
- http: ^0.13.6
- image_picker: ^1.0.8 # Select or take photos
+ http: ^1.2.2
+ image_picker: ^1.1.2 # Select or take photos
infinite_scroll_pagination: ^4.0.0 # Let the server do all the work!
- intl: ^0.18.0
- one_context: ^2.1.0 # Dialogs without requiring context
- open_filex: ^4.4.0 # Open local files
- package_info_plus: ^3.0.2 # App information introspection
- path: ^1.8.2
+ intl: ^0.19.0
+ one_context: ^4.0.0 # Dialogs without requiring context
+ open_filex: ^4.5.0 # Open local files
+ package_info_plus: ^8.0.2 # App information introspection
+ path: ^1.9.0
path_provider: ^2.1.3 # Local file storage
qr_code_scanner: ^1.0.1 # Barcode scanning
sembast: ^3.6.0 # NoSQL data storage
- sentry_flutter: 7.9.0 # Error reporting
- url_launcher: ^6.2.4 # Open link in system browser
+ sentry_flutter: 8.9.0 # Error reporting
+ url_launcher: ^6.3.0 # Open link in system browser
dev_dependencies:
flutter_launcher_icons: ^0.11.0
diff --git a/test/wedge_scanner_test.dart b/test/wedge_scanner_test.dart
index c46f127a..8cdca593 100644
--- a/test/wedge_scanner_test.dart
+++ b/test/wedge_scanner_test.dart
@@ -21,7 +21,7 @@ void main() {
await simulateKeyDownEvent(LogicalKeyboardKey.keyA);
await simulateKeyDownEvent(LogicalKeyboardKey.keyB);
await simulateKeyDownEvent(LogicalKeyboardKey.keyC);
- await simulateKeyDownEvent(LogicalKeyboardKey.enter);
+ await simulateKeyDownEvent(LogicalKeyboardKey.enter, character: "\n");
// Check debug output
debugContains("scanned: abc");