From 578d54367ac97c6ccb4ac233640cedacb91de0c2 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Wed, 15 Apr 2020 12:00:26 +1000 Subject: [PATCH] Part detail view is now refreshabel - lso add a progress dialog when reloading a model object --- lib/inventree/model.dart | 25 +++++++++++++++++++++++-- lib/widget/part_detail.dart | 30 ++++++++++++++---------------- lib/widget/stock_detail.dart | 2 +- 3 files changed, 38 insertions(+), 19 deletions(-) diff --git a/lib/inventree/model.dart b/lib/inventree/model.dart index 05750586..96847ee6 100644 --- a/lib/inventree/model.dart +++ b/lib/inventree/model.dart @@ -89,9 +89,30 @@ class InvenTreeModel { /* * Reload this object, by requesting data from the server */ - Future reload() async { + Future reload(BuildContext context) async { - var response = await api.get(url, params: defaultGetFilters()); + showProgressDialog(context, "Refreshing data", "Refreshing data for ${NAME}"); + + var response = await api.get(url, params: defaultGetFilters()) + .timeout(Duration(seconds: 10)) + .catchError((e) { + + hideProgressDialog(context); + + if (e is TimeoutException) { + showErrorDialog(context, "Timeout", "No response from server"); + } else { + showErrorDialog(context, "Error", e.toString()); + } + + return null; + }); + + if (response == null) { + return false; + } + + hideProgressDialog(context); if (response.statusCode != 200) { print("Error retrieving data"); diff --git a/lib/widget/part_detail.dart b/lib/widget/part_detail.dart index 3c441a1b..41211f86 100644 --- a/lib/widget/part_detail.dart +++ b/lib/widget/part_detail.dart @@ -6,6 +6,7 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:InvenTree/api.dart'; +import 'package:InvenTree/widget/refreshable_state.dart'; import 'package:InvenTree/widget/drawer.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; @@ -21,7 +22,10 @@ class PartDetailWidget extends StatefulWidget { } -class _PartDisplayState extends State { +class _PartDisplayState extends RefreshableState { + + @override + String app_bar_title = "Part"; _PartDisplayState(this.part) { // TODO @@ -29,6 +33,11 @@ class _PartDisplayState extends State { InvenTreePart part; + @override + Future request(BuildContext context) async { + await part.reload(context); + } + /* * Build a list of tiles to display under the part description */ @@ -154,22 +163,11 @@ class _PartDisplayState extends State { } @override - Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar( - title: Text("Part Details"), + Widget getBody(BuildContext context) { + return Center( + child: ListView( + children: partTiles(), ), - drawer: new InvenTreeDrawer(context), - floatingActionButton: FloatingActionButton( - child: FaIcon(FontAwesomeIcons.ellipsisH), - // TODO - Add pop-up icons - // Ref: https://stackoverflow.com/questions/46480221/flutter-floating-action-button-with-speed-dial#46480722 - ), - body: Center( - child: ListView( - children: partTiles(), - ), - ) ); } } \ No newline at end of file diff --git a/lib/widget/stock_detail.dart b/lib/widget/stock_detail.dart index f86d5b77..c180bba9 100644 --- a/lib/widget/stock_detail.dart +++ b/lib/widget/stock_detail.dart @@ -50,7 +50,7 @@ class _StockItemDisplayState extends RefreshableState { @override Future request(BuildContext context) async { - await item.reload(); + await item.reload(context); } void _editStockItem() {