From faf8e45138f4848701632f6d74d45a22e4af5f85 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Sat, 26 Mar 2022 17:38:30 +1100 Subject: [PATCH] Pop to the previous context if the stock item is "bad" --- lib/widget/category_display.dart | 8 ++--- lib/widget/company_detail.dart | 4 +-- lib/widget/location_display.dart | 10 +++---- lib/widget/part_attachments_widget.dart | 4 +-- lib/widget/part_detail.dart | 10 +++---- lib/widget/part_image_widget.dart | 4 +-- lib/widget/part_notes.dart | 4 +-- lib/widget/purchase_order_detail.dart | 6 ++-- lib/widget/refreshable_state.dart | 12 ++++---- lib/widget/stock_detail.dart | 40 +++++++++++++++---------- lib/widget/stock_item_test_results.dart | 4 +-- lib/widget/stock_notes.dart | 4 +-- 12 files changed, 60 insertions(+), 50 deletions(-) diff --git a/lib/widget/category_display.dart b/lib/widget/category_display.dart index 389d7461..c28522ff 100644 --- a/lib/widget/category_display.dart +++ b/lib/widget/category_display.dart @@ -66,7 +66,7 @@ class _CategoryDisplayState extends RefreshableState { context, L10().editCategory, onSuccess: (data) async { - refresh(); + refresh(context); showSnackIcon(L10().categoryUpdated, success: true); } ); @@ -79,11 +79,11 @@ class _CategoryDisplayState extends RefreshableState { @override Future onBuild(BuildContext context) async { - refresh(); + refresh(context); } @override - Future request() async { + Future request(BuildContext context) async { int pk = category?.pk ?? -1; @@ -234,7 +234,7 @@ class _CategoryDisplayState extends RefreshableState { ) ); } else { - refresh(); + refresh(context); } } ); diff --git a/lib/widget/company_detail.dart b/lib/widget/company_detail.dart index 904ced7e..b0ad3254 100644 --- a/lib/widget/company_detail.dart +++ b/lib/widget/company_detail.dart @@ -64,7 +64,7 @@ class _CompanyDetailState extends RefreshableState { } @override - Future request() async { + Future request(BuildContext context) async { await company.reload(); if (company.isSupplier) { @@ -78,7 +78,7 @@ class _CompanyDetailState extends RefreshableState { context, L10().companyEdit, onSuccess: (data) async { - refresh(); + refresh(context); showSnackIcon(L10().companyUpdated, success: true); } ); diff --git a/lib/widget/location_display.dart b/lib/widget/location_display.dart index 2d4272c1..fb88381d 100644 --- a/lib/widget/location_display.dart +++ b/lib/widget/location_display.dart @@ -88,7 +88,7 @@ class _LocationDisplayState extends RefreshableState { context, L10().editLocation, onSuccess: (data) async { - refresh(); + refresh(context); showSnackIcon(L10().locationUpdated, success: true); } ); @@ -109,11 +109,11 @@ class _LocationDisplayState extends RefreshableState { @override Future onBuild(BuildContext context) async { - refresh(); + refresh(context); } @override - Future request() async { + Future request(BuildContext context) async { int pk = location?.pk ?? -1; @@ -385,8 +385,8 @@ List detailTiles() { MaterialPageRoute(builder: (context) => InvenTreeQRView( StockLocationScanInItemsHandler(_loc))) - ).then((context) { - refresh(); + ).then((value) { + refresh(context); }); } }, diff --git a/lib/widget/part_attachments_widget.dart b/lib/widget/part_attachments_widget.dart index 2e14141f..29c32e6c 100644 --- a/lib/widget/part_attachments_widget.dart +++ b/lib/widget/part_attachments_widget.dart @@ -72,11 +72,11 @@ class _PartAttachmentDisplayState extends RefreshableState request() async { + Future request(BuildContext context) async { await InvenTreePartAttachment().list( filters: { diff --git a/lib/widget/part_detail.dart b/lib/widget/part_detail.dart index a00c92ac..3357e71e 100644 --- a/lib/widget/part_detail.dart +++ b/lib/widget/part_detail.dart @@ -77,7 +77,7 @@ class _PartDisplayState extends RefreshableState { @override Future onBuild(BuildContext context) async { - refresh(); + refresh(context); setState(() { @@ -85,7 +85,7 @@ class _PartDisplayState extends RefreshableState { } @override - Future request() async { + Future request(BuildContext context) async { await part.reload(); await part.getTestTemplates(); } @@ -94,7 +94,7 @@ class _PartDisplayState extends RefreshableState { if (InvenTreeAPI().checkPermission("part", "view")) { await part.update(values: {"starred": "${!part.starred}"}); - refresh(); + refresh(context); } } @@ -104,7 +104,7 @@ class _PartDisplayState extends RefreshableState { context, L10().editPart, onSuccess: (data) async { - refresh(); + refresh(context); showSnackIcon(L10().partEdited, success: true); } ); @@ -130,7 +130,7 @@ class _PartDisplayState extends RefreshableState { builder: (context) => PartImageWidget(part) ) ).then((value) { - refresh(); + refresh(context); }); }), ), diff --git a/lib/widget/part_image_widget.dart b/lib/widget/part_image_widget.dart index 63981371..e9ed62e4 100644 --- a/lib/widget/part_image_widget.dart +++ b/lib/widget/part_image_widget.dart @@ -32,7 +32,7 @@ class _PartImageState extends RefreshableState { final InvenTreePart part; @override - Future request() async { + Future request(BuildContext context) async { await part.reload(); } @@ -60,7 +60,7 @@ class _PartImageState extends RefreshableState { showSnackIcon(L10().uploadFailed, success: false); } - refresh(); + refresh(context); } ); diff --git a/lib/widget/part_notes.dart b/lib/widget/part_notes.dart index e2618d2f..717a8fe5 100644 --- a/lib/widget/part_notes.dart +++ b/lib/widget/part_notes.dart @@ -26,7 +26,7 @@ class _PartNotesState extends RefreshableState { final InvenTreePart part; @override - Future request() async { + Future request(BuildContext context) async { await part.reload(); } @@ -53,7 +53,7 @@ class _PartNotesState extends RefreshableState { } }, onSuccess: (data) async { - refresh(); + refresh(context); } ); } diff --git a/lib/widget/purchase_order_detail.dart b/lib/widget/purchase_order_detail.dart index d6cdfea2..27a47bd3 100644 --- a/lib/widget/purchase_order_detail.dart +++ b/lib/widget/purchase_order_detail.dart @@ -61,7 +61,7 @@ class _PurchaseOrderDetailState extends RefreshableState request() async { + Future request(BuildContext context) async { await order.reload(); lines = await order.getLineItems(); @@ -82,7 +82,7 @@ class _PurchaseOrderDetailState extends RefreshableState extends State { // Function called after the widget is first build Future onBuild(BuildContext context) async { - refresh(); + refresh(context); } // Function to request data for this page - Future request() async { + Future request(BuildContext context) async { return; } - Future refresh() async { + Future refresh(BuildContext context) async { setState(() { loading = true; }); - await request(); + await request(context); setState(() { loading = false; @@ -100,7 +100,9 @@ abstract class RefreshableState extends State { body: Builder( builder: (BuildContext context) { return RefreshIndicator( - onRefresh: refresh, + onRefresh: () async { + refresh(context); + }, child: getBody(context) ); } diff --git a/lib/widget/stock_detail.dart b/lib/widget/stock_detail.dart index 36f67dcb..69af88a7 100644 --- a/lib/widget/stock_detail.dart +++ b/lib/widget/stock_detail.dart @@ -22,6 +22,7 @@ import "package:inventree/l10.dart"; import "package:inventree/helpers.dart"; import "package:inventree/api.dart"; import "package:inventree/api_form.dart"; +import 'package:one_context/one_context.dart'; class StockDetailWidget extends StatefulWidget { @@ -96,13 +97,20 @@ class _StockItemDisplayState extends RefreshableState { // Load part data if not already loaded if (part == null) { - refresh(); + refresh(context); } } @override - Future request() async { - await item.reload(); + Future request(BuildContext context) async { + + final bool result = await item.reload(); + + // Could not load this stock item for some reason + // Perhaps it has been depleted? + if (!result || item.pk == -1) { + Navigator.of(context).pop(); + } // Request part information part = await InvenTreePart().get(item.partId) as InvenTreePart?; @@ -244,7 +252,7 @@ class _StockItemDisplayState extends RefreshableState { L10().editItem, fields: fields, onSuccess: (data) async { - refresh(); + refresh(context); showSnackIcon(L10().stockItemUpdated, success: true); } ); @@ -261,7 +269,7 @@ class _StockItemDisplayState extends RefreshableState { _stockUpdateMessage(result); - refresh(); + refresh(context); } Future _addStockDialog() async { @@ -293,7 +301,7 @@ class _StockItemDisplayState extends RefreshableState { icon: FontAwesomeIcons.plusCircle, onSuccess: (data) async { _stockUpdateMessage(true); - refresh(); + refresh(context); } ); @@ -340,7 +348,7 @@ class _StockItemDisplayState extends RefreshableState { _stockUpdateMessage(result); - refresh(); + refresh(context); } @@ -372,7 +380,7 @@ class _StockItemDisplayState extends RefreshableState { icon: FontAwesomeIcons.minusCircle, onSuccess: (data) async { _stockUpdateMessage(true); - refresh(); + refresh(context); } ); @@ -413,7 +421,7 @@ class _StockItemDisplayState extends RefreshableState { _stockUpdateMessage(result); - refresh(); + refresh(context); } Future _countStockDialog() async { @@ -445,7 +453,7 @@ class _StockItemDisplayState extends RefreshableState { icon: FontAwesomeIcons.clipboardCheck, onSuccess: (data) async { _stockUpdateMessage(true); - refresh(); + refresh(context); } ); @@ -494,7 +502,7 @@ class _StockItemDisplayState extends RefreshableState { ); } - refresh(); + refresh(context); } @@ -509,7 +517,7 @@ class _StockItemDisplayState extends RefreshableState { var result = await item.transferStock(context, locationId, quantity: quantity, notes: notes); - refresh(); + refresh(context); if (result) { showSnackIcon(L10().stockItemTransferred, success: true); @@ -549,7 +557,7 @@ class _StockItemDisplayState extends RefreshableState { icon: FontAwesomeIcons.dolly, onSuccess: (data) async { _stockUpdateMessage(true); - refresh(); + refresh(context); } ); @@ -801,7 +809,7 @@ class _StockItemDisplayState extends RefreshableState { MaterialPageRoute( builder: (context) => StockItemTestResultsWidget(item)) ).then((context) { - refresh(); + refresh(context); }); } ) @@ -928,7 +936,7 @@ class _StockItemDisplayState extends RefreshableState { context, MaterialPageRoute(builder: (context) => InvenTreeQRView(StockItemScanIntoLocationHandler(item))) ).then((context) { - refresh(); + refresh(context); }); }, ) @@ -958,7 +966,7 @@ class _StockItemDisplayState extends RefreshableState { icon: Icons.qr_code, ); - refresh(); + refresh(context); } }); }); diff --git a/lib/widget/stock_item_test_results.dart b/lib/widget/stock_item_test_results.dart index d7d3a7cf..933286a2 100644 --- a/lib/widget/stock_item_test_results.dart +++ b/lib/widget/stock_item_test_results.dart @@ -44,7 +44,7 @@ class _StockItemTestResultDisplayState extends RefreshableState request() async { + Future request(BuildContext context) async { await item.getTestTemplates(); await item.getTestResults(); } @@ -61,7 +61,7 @@ class _StockItemTestResultDisplayState extends RefreshableState { String getAppBarTitle(BuildContext context) => L10().stockItemNotes; @override - Future request() async { + Future request(BuildContext context) async { await item.reload(); } @@ -54,7 +54,7 @@ class _StockNotesState extends RefreshableState { } }, onSuccess: (data) async { - refresh(); + refresh(context); } ); }