From aa8a3602e8ccf05e0d3bf92477581fab1cbe8a80 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Mon, 6 Apr 2020 23:01:11 +1000 Subject: [PATCH] Expansion state is now saved on the session level, not per widget --- lib/main.dart | 2 +- lib/preferences.dart | 27 ++++++++++++++++++++++----- lib/settings/login.dart | 2 +- lib/widget/category_display.dart | 16 +++++++--------- lib/widget/location_display.dart | 16 +++++++--------- 5 files changed, 38 insertions(+), 25 deletions(-) diff --git a/lib/main.dart b/lib/main.dart index 0c6775fc..553df335 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -27,7 +27,7 @@ void main() async { WidgetsFlutterBinding.ensureInitialized(); // Load login details - InvenTreeUserPreferences().loadLoginDetails(); + InvenTreePreferences().loadLoginDetails(); runApp(MyApp()); } diff --git a/lib/preferences.dart b/lib/preferences.dart index 53aa19bc..158224d6 100644 --- a/lib/preferences.dart +++ b/lib/preferences.dart @@ -2,20 +2,37 @@ import 'package:shared_preferences/shared_preferences.dart'; import 'api.dart'; -class InvenTreeUserPreferences { +class InvenTreePreferences { static const String _SERVER = 'server'; static const String _USERNAME = 'username'; static const String _PASSWORD = 'password'; - // Ensure we only ever create a single instance of the preferences class - static final InvenTreeUserPreferences _api = new InvenTreeUserPreferences._internal(); + /* The following settings are not stored to persistent storage, + * instead they are only used as 'session preferences'. + * They are kept here as a convenience only. + */ - factory InvenTreeUserPreferences() { + // Expand subcategory list in PartCategory view + bool expandCategoryList = false; + + // Expand part list in PartCategory view + bool expandPartList = true; + + // Expand sublocation list in StockLocation view + bool expandLocationList = false; + + // Expand item list in StockLocation view + bool expandStockList = true; + + // Ensure we only ever create a single instance of the preferences class + static final InvenTreePreferences _api = new InvenTreePreferences._internal(); + + factory InvenTreePreferences() { return _api; } - InvenTreeUserPreferences._internal(); + InvenTreePreferences._internal(); // Load saved login details, and attempt connection void loadLoginDetails() async { diff --git a/lib/settings/login.dart b/lib/settings/login.dart index 8415e2a4..15ae6db0 100644 --- a/lib/settings/login.dart +++ b/lib/settings/login.dart @@ -130,7 +130,7 @@ class _InvenTreeLoginSettingsState extends State { if (_formKey.currentState.validate()) { _formKey.currentState.save(); - await InvenTreeUserPreferences().saveLoginDetails(_server, _username, _password); + await InvenTreePreferences().saveLoginDetails(_server, _username, _password); } } diff --git a/lib/widget/category_display.dart b/lib/widget/category_display.dart index f1f02823..12cadf68 100644 --- a/lib/widget/category_display.dart +++ b/lib/widget/category_display.dart @@ -1,6 +1,7 @@ import 'package:InvenTree/api.dart'; import 'package:InvenTree/inventree/part.dart'; +import 'package:InvenTree/preferences.dart'; import 'package:InvenTree/widget/part_display.dart'; import 'package:InvenTree/widget/drawer.dart'; @@ -83,9 +84,6 @@ class _CategoryDisplayState extends State { }); } - bool _subcategoriesExpanded = false; - bool _partListExpanded = true; - Widget getCategoryDescriptionCard() { if (category == null) { return Card( @@ -144,10 +142,10 @@ class _CategoryDisplayState extends State { switch (index) { case 0: - _subcategoriesExpanded = !isExpanded; + InvenTreePreferences().expandCategoryList = !isExpanded; break; case 1: - _partListExpanded = !isExpanded; + InvenTreePreferences().expandPartList = !isExpanded; break; default: break; @@ -163,13 +161,13 @@ class _CategoryDisplayState extends State { trailing: Text("${_subcategories.length}"), onTap: () { setState(() { - _subcategoriesExpanded = !_subcategoriesExpanded; + InvenTreePreferences().expandCategoryList = !InvenTreePreferences().expandCategoryList; }); }, ); }, body: SubcategoryList(_subcategories), - isExpanded: _subcategoriesExpanded && _subcategories.length > 0, + isExpanded: InvenTreePreferences().expandCategoryList && _subcategories.length > 0, ), ExpansionPanel( headerBuilder: (BuildContext context, bool isExpanded) { @@ -179,13 +177,13 @@ class _CategoryDisplayState extends State { trailing: Text("${_parts.length}"), onTap: () { setState(() { - _partListExpanded = !_partListExpanded; + InvenTreePreferences().expandPartList = !InvenTreePreferences().expandPartList; }); }, ); }, body: PartList(_parts), - isExpanded: _partListExpanded && _parts.length > 0, + isExpanded: InvenTreePreferences().expandPartList && _parts.length > 0, ) ], ), diff --git a/lib/widget/location_display.dart b/lib/widget/location_display.dart index 8cfd141c..90e2afff 100644 --- a/lib/widget/location_display.dart +++ b/lib/widget/location_display.dart @@ -1,5 +1,6 @@ import 'package:InvenTree/api.dart'; import 'package:InvenTree/inventree/stock.dart'; +import 'package:InvenTree/preferences.dart'; import 'package:InvenTree/widget/drawer.dart'; import 'package:InvenTree/widget/stock_display.dart'; import 'package:flutter/cupertino.dart'; @@ -91,9 +92,6 @@ class _LocationDisplayState extends State { }); } - bool _locationListExpanded = false; - bool _stockListExpanded = true; - Widget locationDescriptionCard() { if (location == null) { return Card( @@ -150,10 +148,10 @@ class _LocationDisplayState extends State { setState(() { switch (index) { case 0: - _locationListExpanded = !isExpanded; + InvenTreePreferences().expandLocationList = !isExpanded; break; case 1: - _stockListExpanded = !isExpanded; + InvenTreePreferences().expandStockList = !isExpanded; break; default: break; @@ -170,13 +168,13 @@ class _LocationDisplayState extends State { trailing: Text("${_sublocations.length}"), onTap: () { setState(() { - _locationListExpanded = !_locationListExpanded; + InvenTreePreferences().expandLocationList = !InvenTreePreferences().expandLocationList; }); }, ); }, body: SublocationList(_sublocations), - isExpanded: _locationListExpanded && _sublocations.length > 0, + isExpanded: InvenTreePreferences().expandLocationList && _sublocations.length > 0, ), ExpansionPanel( headerBuilder: (BuildContext context, bool isExpanded) { @@ -186,13 +184,13 @@ class _LocationDisplayState extends State { trailing: Text("${_items.length}"), onTap: () { setState(() { - _stockListExpanded = !_stockListExpanded; + InvenTreePreferences().expandStockList = !InvenTreePreferences().expandStockList; }); }, ); }, body: StockList(_items), - isExpanded: _stockListExpanded && _items.length > 0, + isExpanded: InvenTreePreferences().expandStockList && _items.length > 0, ) ] ),