2
0
mirror of https://github.com/inventree/inventree-app.git synced 2025-04-28 05:26:47 +00:00

Remove reliance on shared preferences

This commit is contained in:
Oliver Walters 2021-02-11 00:53:52 +11:00
parent 3ec7ed217e
commit dba45c7600
6 changed files with 116 additions and 140 deletions

@ -1 +1 @@
Subproject commit ed3bd59b15b2c69b9a21649a0e0507efd811c1a1
Subproject commit 6e095a0d6c7d044a60ccda07d03ae8594d8b4b27

View File

@ -1,13 +1,9 @@
import 'package:flutter/cupertino.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'api.dart';
import 'package:path_provider/path_provider.dart';
import 'package:sembast/sembast.dart';
import 'package:sembast/sembast_io.dart';
import 'package:path/path.dart';
import 'dart:async';
/*
* Class for storing InvenTree preferences in a NoSql DB
*/

View File

@ -7,7 +7,6 @@ import 'package:InvenTree/preferences.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
@ -70,8 +69,6 @@ class _InvenTreeSettingsState extends State<InvenTreeSettingsWidget> {
void _editServerSettings() async {
var prefs = await SharedPreferences.getInstance();
List<UserProfile> profiles = await UserProfileDBManager().getAllProfiles();
Navigator.push(context, MaterialPageRoute(builder: (context) => InvenTreeLoginSettingsWidget()));

View File

@ -147,8 +147,7 @@ class _CategoryDisplayState extends RefreshableState<CategoryDisplayWidget> {
if (category == null) {
return Card(
child: ListTile(
title: Text(I18N.of(context).partCategories),
subtitle: Text("Top level part category"),
title: Text("Top level part category"),
)
);
} else {
@ -183,70 +182,84 @@ class _CategoryDisplayState extends RefreshableState<CategoryDisplayWidget> {
}
@override
Widget getBody(BuildContext context) {
return ListView(
children: <Widget>[
getCategoryDescriptionCard(),
ExpansionPanelList(
expansionCallback: (int index, bool isExpanded) {
setState(() {
switch (index) {
case 0:
InvenTreePreferences().expandCategoryList = !isExpanded;
break;
case 1:
InvenTreePreferences().expandPartList = !isExpanded;
break;
default:
break;
}
});
},
children: <ExpansionPanel> [
ExpansionPanel(
headerBuilder: (BuildContext context, bool isExpanded) {
return ListTile(
title: Text(I18N.of(context).subcategories),
leading: FaIcon(FontAwesomeIcons.stream),
trailing: Text("${_subcategories.length}"),
onTap: () {
setState(() {
InvenTreePreferences().expandCategoryList = !InvenTreePreferences().expandCategoryList;
});
},
onLongPress: () {
// TODO - Context menu for e.g. creating a new PartCategory
},
);
},
body: SubcategoryList(_subcategories),
isExpanded: InvenTreePreferences().expandCategoryList && _subcategories.length > 0,
Widget getBottomNavBar(BuildContext context) {
return BottomNavigationBar(
currentIndex: tabIndex,
onTap: onTabSelectionChanged,
items: <BottomNavigationBarItem>[
BottomNavigationBarItem(
icon: FaIcon(FontAwesomeIcons.sitemap),
label: I18N.of(context).details,
),
ExpansionPanel(
headerBuilder: (BuildContext context, bool isExpanded) {
return ListTile(
title: Text(I18N.of(context).parts),
leading: FaIcon(FontAwesomeIcons.shapes),
trailing: Text("${_parts.length}"),
onTap: () {
setState(() {
InvenTreePreferences().expandPartList = !InvenTreePreferences().expandPartList;
});
},
onLongPress: () {
// TODO - Context menu for e.g. creating a new Part
},
);
},
body: PartList(_parts),
isExpanded: InvenTreePreferences().expandPartList && _parts.length > 0,
)
],
BottomNavigationBarItem(
icon: FaIcon(FontAwesomeIcons.shapes),
label: I18N.of(context).parts,
),
BottomNavigationBarItem(
icon: FaIcon(FontAwesomeIcons.wrench),
label: I18N.of(context).actions
),
]
);
}
List<Widget> detailTiles() {
return <Widget>[
getCategoryDescriptionCard(),
Divider(),
ListTile(
title: Text(
I18N.of(context).subcategories,
style: TextStyle(fontWeight: FontWeight.bold)
)
),
SubcategoryList(_subcategories),
];
}
List<Widget> partTiles() {
return <Widget>[
getCategoryDescriptionCard(),
Divider(),
ListTile(
title: Text(
I18N.of(context).parts,
style: TextStyle(fontWeight: FontWeight.bold)
)
),
PartList(_parts)
];
}
List<Widget> actionTiles() {
List<Widget> tiles = [
getCategoryDescriptionCard()
];
// TODO - Actions!
return tiles;
}
@override
Widget getBody(BuildContext context) {
switch (tabIndex) {
case 0:
return ListView(
children: detailTiles()
);
case 1:
return ListView(
children: partTiles()
);
case 2:
return ListView(
children: actionTiles()
);
}
}
}

View File

@ -149,9 +149,7 @@ class _LocationDisplayState extends RefreshableState<LocationDisplayWidget> {
if (location == null) {
return Card(
child: ListTile(
title: Text(I18N.of(context).stockLocations),
subtitle: Text(I18N.of(context).stockTopLevel),
leading: FaIcon(FontAwesomeIcons.levelUpAlt),
title: Text(I18N.of(context).stockTopLevel),
)
);
} else {
@ -190,13 +188,17 @@ class _LocationDisplayState extends RefreshableState<LocationDisplayWidget> {
currentIndex: tabIndex,
onTap: onTabSelectionChanged,
items: <BottomNavigationBarItem> [
BottomNavigationBarItem(
icon: FaIcon(FontAwesomeIcons.sitemap),
label: I18N.of(context).details,
),
BottomNavigationBarItem(
icon: FaIcon(FontAwesomeIcons.boxes),
title: Text(I18N.of(context).stock),
label: I18N.of(context).stock,
),
BottomNavigationBarItem(
icon: FaIcon(FontAwesomeIcons.wrench),
title: Text(I18N.of(context).actions),
label: I18N.of(context).actions,
)
]
);
@ -208,6 +210,10 @@ class _LocationDisplayState extends RefreshableState<LocationDisplayWidget> {
return ListView(
children: detailTiles(),
);
case 1:
return ListView(
children: stockTiles(),
);
case 1:
return ListView(
children: ListTile.divideTiles(
@ -227,73 +233,39 @@ class _LocationDisplayState extends RefreshableState<LocationDisplayWidget> {
List<Widget> detailTiles() {
List<Widget> tiles = [];
// Location description
tiles.add(locationDescriptionCard());
// Sublocation panel
ExpansionPanel sublocations = ExpansionPanel(
headerBuilder: (BuildContext context, bool isExpanded) {
return ListTile(
title: Text("Sublocations"),
leading: FaIcon(FontAwesomeIcons.mapMarkerAlt),
trailing: Text("${_sublocations.length}"),
onTap: () {
setState(() {
InvenTreePreferences().expandLocationList = !InvenTreePreferences().expandLocationList;
});
},
);
},
body: SublocationList(_sublocations),
isExpanded: InvenTreePreferences().expandLocationList && _sublocations.length > 0,
);
ExpansionPanel subitems = ExpansionPanel(
headerBuilder: (BuildContext context, bool isExpanded) {
return ListTile(
title: Text("Stock Items"),
leading: FaIcon(FontAwesomeIcons.boxes),
trailing: Text("${_items.length}"),
onTap: () {
setState(() {
InvenTreePreferences().expandStockList = !InvenTreePreferences().expandStockList;
});
},
);
},
body: StockList(_items),
isExpanded: InvenTreePreferences().expandStockList && _items.length > 0,
);
// Sublocations and items
tiles.add(
ExpansionPanelList(
expansionCallback: (int index, bool isExpanded) {
setState(() {
switch (index) {
case 0:
InvenTreePreferences().expandLocationList = !isExpanded;
break;
case 1:
InvenTreePreferences().expandStockList = !isExpanded;
break;
default:
break;
}
});
},
children: <ExpansionPanel> [
sublocations,
subitems,
]
)
);
List<Widget> tiles = [
locationDescriptionCard(),
Divider(),
ListTile(
title: Text(
I18N.of(context).sublocations,
style: TextStyle(fontWeight: FontWeight.bold)
),
),
SublocationList(_sublocations)
];
return tiles;
}
List<Widget> stockTiles() {
List<Widget> tiles = [
locationDescriptionCard(),
Divider(),
ListTile(
title: Text(
I18N.of(context).stockItems,
style: TextStyle(fontWeight: FontWeight.bold)
)
),
StockList(_items),
];
return tiles;
}
List<Widget> actionTiles() {
List<Widget> tiles = [];

View File

@ -27,8 +27,6 @@ dependencies:
cupertino_icons: ^0.1.3
http: ^0.12.1
shared_preferences: ^0.5.7
cached_network_image: ^2.5.0
qr_code_scanner: ^0.0.13
package_info: ^0.4.0 # App information introspection