diff --git a/assets/release_notes.md b/assets/release_notes.md index c72bd2c1..1b226592 100644 --- a/assets/release_notes.md +++ b/assets/release_notes.md @@ -3,6 +3,8 @@ - Fixes barcode scanning bug which prevents scanning of DataMatrix codes - Display "destination" information in PurchaseOrder detail view +- Pre-fill "location" field when receiving items against PurchaseOrder +- Fix display of part name in PurchaseOrderLineItem list - Adds "assigned to me" filter for Purchase Order list - Adds "assigned to me" filter for Sales Order list diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index 3a6f42d2..bda4a2a4 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -272,7 +272,6 @@ "${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}/MTBBarcodeScanner/MTBBarcodeScanner.framework", "${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework", "${BUILT_PRODUCTS_DIR}/Sentry/Sentry.framework", "${BUILT_PRODUCTS_DIR}/SwiftyGif/SwiftyGif.framework", @@ -280,21 +279,21 @@ "${BUILT_PRODUCTS_DIR}/camera_avfoundation/camera_avfoundation.framework", "${BUILT_PRODUCTS_DIR}/device_info_plus/device_info_plus.framework", "${BUILT_PRODUCTS_DIR}/file_picker/file_picker.framework", + "${BUILT_PRODUCTS_DIR}/flutter_zxing/flutter_zxing.framework", "${BUILT_PRODUCTS_DIR}/image_picker_ios/image_picker_ios.framework", "${BUILT_PRODUCTS_DIR}/open_filex/open_filex.framework", "${BUILT_PRODUCTS_DIR}/package_info_plus/package_info_plus.framework", "${BUILT_PRODUCTS_DIR}/path_provider_foundation/path_provider_foundation.framework", - "${BUILT_PRODUCTS_DIR}/qr_code_scanner/qr_code_scanner.framework", "${BUILT_PRODUCTS_DIR}/sentry_flutter/sentry_flutter.framework", "${BUILT_PRODUCTS_DIR}/shared_preferences_foundation/shared_preferences_foundation.framework", "${BUILT_PRODUCTS_DIR}/sqflite/sqflite.framework", "${BUILT_PRODUCTS_DIR}/url_launcher_ios/url_launcher_ios.framework", + "${BUILT_PRODUCTS_DIR}/wakelock_plus/wakelock_plus.framework", ); name = "[CP] Embed Pods Frameworks"; outputPaths = ( "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/DKImagePickerController.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/DKPhotoGallery.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}/SwiftyGif.framework", @@ -302,15 +301,16 @@ "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/camera_avfoundation.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/device_info_plus.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/file_picker.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/flutter_zxing.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/image_picker_ios.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/open_filex.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/package_info_plus.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/path_provider_foundation.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/qr_code_scanner.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/sentry_flutter.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/shared_preferences_foundation.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/sqflite.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/url_launcher_ios.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/wakelock_plus.framework", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; diff --git a/lib/api_form.dart b/lib/api_form.dart index 432e49cc..f8e335d9 100644 --- a/lib/api_form.dart +++ b/lib/api_form.dart @@ -977,7 +977,7 @@ Future launchApiForm( IconData icon = TablerIcons.device_floppy }) async { - showLoadingOverlay(context); + showLoadingOverlay(); // List of fields defined by the server Map serverFields = {}; @@ -1229,7 +1229,7 @@ class _APIFormWidgetState extends State { if (widget.method == "POST") { - showLoadingOverlay(context); + showLoadingOverlay(); final response = await InvenTreeAPI().post( widget.url, body: data, @@ -1240,7 +1240,7 @@ class _APIFormWidgetState extends State { return response; } else { - showLoadingOverlay(context); + showLoadingOverlay(); final response = await InvenTreeAPI().patch( widget.url, body: data, diff --git a/lib/barcode/camera_controller.dart b/lib/barcode/camera_controller.dart index 0932995c..4c6edd7a 100644 --- a/lib/barcode/camera_controller.dart +++ b/lib/barcode/camera_controller.dart @@ -1,10 +1,14 @@ import "dart:math"; import "dart:typed_data"; +import "package:camera/camera.dart"; import "package:flutter/material.dart"; import "package:flutter_tabler_icons/flutter_tabler_icons.dart"; import "package:inventree/app_colors.dart"; +import "package:inventree/inventree/sentry.dart"; import "package:inventree/preferences.dart"; +import "package:inventree/widget/snacks.dart"; +import "package:one_context/one_context.dart"; import "package:wakelock_plus/wakelock_plus.dart"; import "package:flutter_zxing/flutter_zxing.dart"; @@ -133,7 +137,28 @@ class _CameraBarcodeControllerState extends InvenTreeBarcodeControllerState { } }); } + } + void onControllerCreated(CameraController? controller, Exception? error) { + if (error != null) { + sentryReportError( + "CameraBarcodeController.onControllerCreated", + error, + null + ); + } + + if (controller == null) { + showSnackIcon( + L10().cameraCreationError, + icon: TablerIcons.camera_x, + success: false + ); + + if (OneContext.hasContext) { + Navigator.pop(OneContext().context!); + } + } } /* @@ -167,6 +192,7 @@ class _CameraBarcodeControllerState extends InvenTreeBarcodeControllerState { tryInverted: true, tryRotate: true, showGallery: false, + onControllerCreated: onControllerCreated, scanDelay: Duration(milliseconds: scan_delay), resolution: ResolutionPreset.high, lensDirection: CameraLensDirection.back, @@ -185,7 +211,12 @@ class _CameraBarcodeControllerState extends InvenTreeBarcodeControllerState { child: Align( alignment: Alignment.topCenter, child: Padding( - padding: EdgeInsets.all(10), + padding: EdgeInsets.only( + left: 10, + right: 10, + top: 75, + bottom: 10 + ), child: Text( widget.handler.getOverlayText(context), style: TextStyle( @@ -213,7 +244,12 @@ class _CameraBarcodeControllerState extends InvenTreeBarcodeControllerState { child: Align( alignment: Alignment.bottomCenter, child: Padding( - padding: EdgeInsets.all(10), + padding: EdgeInsets.only( + left: 10, + right: 10, + top: 10, + bottom: 75 + ), child: Text( text, textAlign: TextAlign.center, diff --git a/lib/barcode/controller.dart b/lib/barcode/controller.dart index 559bac9a..3a8fa2c5 100644 --- a/lib/barcode/controller.dart +++ b/lib/barcode/controller.dart @@ -1,11 +1,7 @@ import "package:flutter/material.dart"; -import "package:inventree/helpers.dart"; -import "package:one_context/one_context.dart"; import "package:inventree/preferences.dart"; - import "package:inventree/barcode/handler.dart"; - import "package:inventree/widget/progress.dart"; /* @@ -59,13 +55,7 @@ class InvenTreeBarcodeControllerState extends State processingBarcode = true; }); - BuildContext? context; - - if (hasContext()) { - context = OneContext.hasContext ? OneContext().context : null; - } - - showLoadingOverlay(context); + showLoadingOverlay(); await pauseScan(); await widget.handler.processBarcode(data); diff --git a/lib/inventree/bom.dart b/lib/inventree/bom.dart index cf708c6f..8019ecf0 100644 --- a/lib/inventree/bom.dart +++ b/lib/inventree/bom.dart @@ -18,7 +18,7 @@ class InvenTreeBomItem extends InvenTreeModel { String get URL => "bom/"; @override - Map defaultListFilters() { + Map defaultFilters() { return { "sub_part_detail": "true", "part_detail": "true", @@ -26,13 +26,6 @@ class InvenTreeBomItem extends InvenTreeModel { }; } - @override - Map defaultGetFilters() { - return { - "sub_part_detail": "true", - }; - } - // Extract the 'reference' value associated with this BomItem String get reference => getString("reference"); diff --git a/lib/inventree/company.dart b/lib/inventree/company.dart index b9ac2142..b9bba772 100644 --- a/lib/inventree/company.dart +++ b/lib/inventree/company.dart @@ -155,7 +155,8 @@ class InvenTreeSupplierPart extends InvenTreeModel { return fields; } - Map _filters() { + @override + Map defaultFilters() { return { "manufacturer_detail": "true", "supplier_detail": "true", @@ -163,15 +164,6 @@ class InvenTreeSupplierPart extends InvenTreeModel { }; } - @override - Map defaultListFilters() { - return _filters(); - } - - @override - Map defaultGetFilters() { - return _filters(); - } int get manufacturerId => getInt("pk", subKey: "manufacturer_detail"); @@ -197,8 +189,10 @@ class InvenTreeSupplierPart extends InvenTreeModel { String get partImage => (jsondata["part_detail"]?["thumbnail"] ?? InvenTreeAPI.staticThumb) as String; - String get partName => getString("full_name", subKey: "part_detail"); - + String get partName => getString("name", subKey: "part_detail"); + + Map get partDetail => getMap("part_detail"); + String get partDescription => getString("description", subKey: "part_detail"); String get note => getString("note"); diff --git a/lib/inventree/part.dart b/lib/inventree/part.dart index 11023931..103fa58c 100644 --- a/lib/inventree/part.dart +++ b/lib/inventree/part.dart @@ -227,16 +227,9 @@ class InvenTreePart extends InvenTreeModel { } @override - Map defaultListFilters() { + Map defaultFilters() { return { - "location_detail": "true", - }; - } - - @override - Map defaultGetFilters() { - return { - "category_detail": "true", // Include category detail information + "category_detail": "true", }; } diff --git a/lib/inventree/purchase_order.dart b/lib/inventree/purchase_order.dart index b224458d..82cb0f34 100644 --- a/lib/inventree/purchase_order.dart +++ b/lib/inventree/purchase_order.dart @@ -3,6 +3,7 @@ import "package:inventree/helpers.dart"; import "package:inventree/inventree/company.dart"; import "package:inventree/inventree/model.dart"; import "package:inventree/inventree/orders.dart"; +import "package:inventree/widget/progress.dart"; /* @@ -64,14 +65,7 @@ class InvenTreePurchaseOrder extends InvenTreeOrder { } @override - Map defaultGetFilters() { - return { - "supplier_detail": "true", - }; - } - - @override - Map defaultListFilters() { + Map defaultFilters() { return { "supplier_detail": "true", }; @@ -128,7 +122,9 @@ class InvenTreePurchaseOrder extends InvenTreeOrder { return; } + showLoadingOverlay(); await api.post("${url}issue/", expectedStatusCode: 201); + hideLoadingOverlay(); } /// Mark this order as "cancelled" @@ -137,7 +133,9 @@ class InvenTreePurchaseOrder extends InvenTreeOrder { return; } + showLoadingOverlay(); await api.post("${url}cancel/", expectedStatusCode: 201); + hideLoadingOverlay(); } } @@ -178,16 +176,10 @@ class InvenTreePOLineItem extends InvenTreeOrderLine { } @override - Map defaultGetFilters() { - return { - "part_detail": "true", - }; - } - - @override - Map defaultListFilters() { + Map defaultFilters() { return { "part_detail": "true", + "order_detail": "true", }; } @@ -228,6 +220,8 @@ class InvenTreePOLineItem extends InvenTreeOrderLine { int get destinationId => getInt("destination"); + Map get orderDetail => getMap("order_detail"); + Map get destinationDetail => getMap("destination_detail"); } diff --git a/lib/inventree/sales_order.dart b/lib/inventree/sales_order.dart index 5bdd4849..9acc374b 100644 --- a/lib/inventree/sales_order.dart +++ b/lib/inventree/sales_order.dart @@ -6,6 +6,7 @@ import "package:inventree/inventree/model.dart"; import "package:inventree/inventree/orders.dart"; import "package:inventree/api.dart"; +import "package:inventree/widget/progress.dart"; /* @@ -65,14 +66,7 @@ class InvenTreeSalesOrder extends InvenTreeOrder { } @override - Map defaultGetFilters() { - return { - "customer_detail": "true", - }; - } - - @override - Map defaultListFilters() { + Map defaultFilters() { return { "customer_detail": "true", }; @@ -83,7 +77,9 @@ class InvenTreeSalesOrder extends InvenTreeOrder { return; } + showLoadingOverlay(); await api.post("${url}issue/", expectedStatusCode: 201); + hideLoadingOverlay(); } /// Mark this order as "cancelled" @@ -92,7 +88,9 @@ class InvenTreeSalesOrder extends InvenTreeOrder { return; } + showLoadingOverlay(); await api.post("${url}cancel/", expectedStatusCode: 201); + hideLoadingOverlay(); } int get customerId => getInt("customer"); @@ -180,14 +178,7 @@ class InvenTreeSOLineItem extends InvenTreeOrderLine { } @override - Map defaultGetFilters() { - return { - "part_detail": "true", - }; - } - - @override - Map defaultListFilters() { + Map defaultFilters() { return { "part_detail": "true", }; diff --git a/lib/inventree/stock.dart b/lib/inventree/stock.dart index df158031..7b03d18d 100644 --- a/lib/inventree/stock.dart +++ b/lib/inventree/stock.dart @@ -253,7 +253,7 @@ class InvenTreeStockItem extends InvenTreeModel { } @override - Map defaultGetFilters() { + Map defaultFilters() { return { "part_detail": "true", @@ -263,16 +263,6 @@ class InvenTreeStockItem extends InvenTreeModel { }; } - @override - Map defaultListFilters() { - - return { - "part_detail": "true", - "location_detail": "true", - "supplier_detail": "true", - }; - } - List testTemplates = []; int get testTemplateCount => testTemplates.length; diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index 72d5d92f..d6693bdc 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -202,6 +202,9 @@ "building": "Building", "@building": {}, + "cameraCreationError": "Could not open camera controller", + "@cameraCreationError": {}, + "cameraInternal": "Internal Camera", "@cameraInternal": {}, diff --git a/lib/labels.dart b/lib/labels.dart index 4d053bad..1e15bd4a 100644 --- a/lib/labels.dart +++ b/lib/labels.dart @@ -98,7 +98,7 @@ Future selectAndPrintLabel( if (labelId != -1 && pluginKey != null) { - showLoadingOverlay(context); + showLoadingOverlay(); if (InvenTreeAPI().supportsModernLabelPrinting) { diff --git a/lib/settings/app_settings.dart b/lib/settings/app_settings.dart index 7b6b08de..8eba55bd 100644 --- a/lib/settings/app_settings.dart +++ b/lib/settings/app_settings.dart @@ -50,7 +50,7 @@ class _InvenTreeAppSettingsState extends State { Future loadSettings(BuildContext context) async { - showLoadingOverlay(context); + showLoadingOverlay(); barcodeSounds = await InvenTreeSettingsManager().getValue(INV_SOUNDS_BARCODE, true) as bool; serverSounds = await InvenTreeSettingsManager().getValue(INV_SOUNDS_SERVER, true) as bool; diff --git a/lib/settings/login.dart b/lib/settings/login.dart index d580b1d1..908d09a5 100644 --- a/lib/settings/login.dart +++ b/lib/settings/login.dart @@ -50,7 +50,7 @@ class _InvenTreeLoginState extends State { currentFocus.unfocus(); } - showLoadingOverlay(context); + showLoadingOverlay(); // Attempt login final response = await InvenTreeAPI().fetchToken(widget.profile, username, password); diff --git a/lib/widget/attachment_widget.dart b/lib/widget/attachment_widget.dart index ab9c61c2..42f3e84c 100644 --- a/lib/widget/attachment_widget.dart +++ b/lib/widget/attachment_widget.dart @@ -79,7 +79,7 @@ class _AttachmentWidgetState extends RefreshableState { if (file == null) return; - showLoadingOverlay(context); + showLoadingOverlay(); final bool result = await widget.attachmentClass.uploadAttachment( file, @@ -178,7 +178,7 @@ class _AttachmentWidgetState extends RefreshableState { subtitle: Text(attachment.comment), leading: Icon(attachment.icon, color: COLOR_ACTION), onTap: () async { - showLoadingOverlay(context); + showLoadingOverlay(); await attachment.downloadAttachment(); hideLoadingOverlay(); }, diff --git a/lib/widget/company/supplier_part_detail.dart b/lib/widget/company/supplier_part_detail.dart index 2b6a9d4c..c6c50468 100644 --- a/lib/widget/company/supplier_part_detail.dart +++ b/lib/widget/company/supplier_part_detail.dart @@ -119,7 +119,7 @@ class _SupplierPartDisplayState extends RefreshableState { // Launch a form to 'receive' this line item Future receiveLineItem(BuildContext context) async { + // Pre-fill the "destination" to receive into + int destination = widget.item.destinationId; + + if (destination < 0) { + destination = (widget.item.orderDetail["destination"] ?? -1) as int; + } + // Construct fields to receive Map fields = { "line_item": { @@ -164,7 +171,11 @@ class _POLineDetailWidgetState extends RefreshableState { } }; - showLoadingOverlay(context); + if (destination > 0) { + fields["location"]?["value"] = destination; + } + + showLoadingOverlay(); var order = await InvenTreePurchaseOrder().get(widget.item.orderId); hideLoadingOverlay(); @@ -199,7 +210,7 @@ class _POLineDetailWidgetState extends RefreshableState { leading: Icon(TablerIcons.box, color: COLOR_ACTION), trailing: api.getThumbnail(widget.item.partImage), onTap: () async { - showLoadingOverlay(context); + showLoadingOverlay(); var part = await InvenTreePart().get(widget.item.partId); hideLoadingOverlay(); @@ -217,7 +228,7 @@ class _POLineDetailWidgetState extends RefreshableState { subtitle: Text(widget.item.SKU), leading: Icon(TablerIcons.building, color: COLOR_ACTION), onTap: () async { - showLoadingOverlay(context); + showLoadingOverlay(); var part = await InvenTreeSupplierPart().get(widget.item.supplierPartId); hideLoadingOverlay(); diff --git a/lib/widget/order/po_line_list.dart b/lib/widget/order/po_line_list.dart index e7f53d4b..5050477e 100644 --- a/lib/widget/order/po_line_list.dart +++ b/lib/widget/order/po_line_list.dart @@ -71,13 +71,14 @@ class _PaginatedPOLineListState extends PaginatedSearchState POLineDetailWidget(item))); diff --git a/lib/widget/order/purchase_order_detail.dart b/lib/widget/order/purchase_order_detail.dart index f4a45d07..297bc46a 100644 --- a/lib/widget/order/purchase_order_detail.dart +++ b/lib/widget/order/purchase_order_detail.dart @@ -185,7 +185,7 @@ class _PurchaseOrderDetailState extends RefreshableState { color: Colors.blue, acceptText: L10().issue, onAccept: () async { - await widget.order.issueOrder().then((dynamic) { + widget.order.issueOrder().then((dynamic) { refresh(context); }); } diff --git a/lib/widget/order/so_line_detail.dart b/lib/widget/order/so_line_detail.dart index c2d41817..9dcd218b 100644 --- a/lib/widget/order/so_line_detail.dart +++ b/lib/widget/order/so_line_detail.dart @@ -187,7 +187,7 @@ class _SOLineDetailWidgetState extends RefreshableState { leading: Icon(TablerIcons.box, color: COLOR_ACTION), trailing: api.getThumbnail(widget.item.partImage), onTap: () async { - showLoadingOverlay(context); + showLoadingOverlay(); var part = await InvenTreePart().get(widget.item.partId); hideLoadingOverlay(); diff --git a/lib/widget/order/so_line_list.dart b/lib/widget/order/so_line_list.dart index 11ba2273..a4c74548 100644 --- a/lib/widget/order/so_line_list.dart +++ b/lib/widget/order/so_line_list.dart @@ -65,7 +65,7 @@ class _PaginatedSOLineListState extends PaginatedSearchState { leading: InvenTreeAPI().getThumbnail(subPart?.thumbnail ?? ""), onTap: subPart == null ? null : () async { - showLoadingOverlay(context); + showLoadingOverlay(); var part = await InvenTreePart().get(subPart.pk); hideLoadingOverlay(); diff --git a/lib/widget/part/category_display.dart b/lib/widget/part/category_display.dart index bc7ab089..79dd6025 100644 --- a/lib/widget/part/category_display.dart +++ b/lib/widget/part/category_display.dart @@ -159,7 +159,7 @@ class _CategoryDisplayState extends RefreshableState { Navigator.push(context, MaterialPageRoute(builder: (context) => CategoryDisplayWidget(null))); } else { - showLoadingOverlay(context); + showLoadingOverlay(); var cat = await InvenTreePartCategory().get(parentId); hideLoadingOverlay(); diff --git a/lib/widget/part/part_detail.dart b/lib/widget/part/part_detail.dart index 4718e6eb..0e2f2ca6 100644 --- a/lib/widget/part/part_detail.dart +++ b/lib/widget/part/part_detail.dart @@ -366,7 +366,7 @@ class _PartDisplayState extends RefreshableState { onTap: () async { if (part.categoryId > 0) { - showLoadingOverlay(context); + showLoadingOverlay(); var cat = await InvenTreePartCategory().get(part.categoryId); hideLoadingOverlay(); @@ -646,7 +646,7 @@ class _PartDisplayState extends RefreshableState { if (part.isTrackable) { // read the next available serial number - showLoadingOverlay(context); + showLoadingOverlay(); var response = await api.get("/api/part/${part.pk}/serial-numbers/", expectedStatusCode: null); hideLoadingOverlay(); diff --git a/lib/widget/part/part_parameter_widget.dart b/lib/widget/part/part_parameter_widget.dart index ea7e7dfc..53e772da 100644 --- a/lib/widget/part/part_parameter_widget.dart +++ b/lib/widget/part/part_parameter_widget.dart @@ -127,7 +127,7 @@ class _PaginatedParameterState extends PaginatedSearchState { Navigator.push(context, MaterialPageRoute( builder: (context) => LocationDisplayWidget(null))); } else { - showLoadingOverlay(context); + showLoadingOverlay(); var loc = await InvenTreeStockLocation().get(parentId); hideLoadingOverlay(); diff --git a/lib/widget/stock/stock_detail.dart b/lib/widget/stock/stock_detail.dart index 106d0509..00817089 100644 --- a/lib/widget/stock/stock_detail.dart +++ b/lib/widget/stock/stock_detail.dart @@ -523,7 +523,7 @@ class _StockItemDisplayState extends RefreshableState { onTap: () async { if (widget.item.partId > 0) { - showLoadingOverlay(context); + showLoadingOverlay(); var part = await InvenTreePart().get(widget.item.partId); hideLoadingOverlay(); @@ -566,7 +566,7 @@ class _StockItemDisplayState extends RefreshableState { onTap: () async { if (widget.item.locationId > 0) { - showLoadingOverlay(context); + showLoadingOverlay(); var loc = await InvenTreeStockLocation().get(widget.item.locationId); hideLoadingOverlay(); @@ -651,7 +651,7 @@ class _StockItemDisplayState extends RefreshableState { leading: Icon(TablerIcons.building, color: COLOR_ACTION), trailing: InvenTreeAPI().getThumbnail(widget.item.supplierImage, hideIfNull: true), onTap: () async { - showLoadingOverlay(context); + showLoadingOverlay(); var sp = await InvenTreeSupplierPart().get( widget.item.supplierPartId); hideLoadingOverlay();