From 1c0b469020795ffe079c0ddaf4da080ac16da33c Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Tue, 9 Feb 2021 12:28:14 +1100 Subject: [PATCH] Add separator divider elements in lists --- lib/settings/about.dart | 122 +++++++++++++++++------- lib/settings/login.dart | 5 +- lib/settings/settings.dart | 56 +++++------ lib/widget/category_display.dart | 6 +- lib/widget/drawer.dart | 116 +++++++++++----------- lib/widget/location_display.dart | 11 ++- lib/widget/part_detail.dart | 11 ++- lib/widget/part_stock_detail.dart | 3 +- lib/widget/stock_detail.dart | 10 +- lib/widget/stock_item_test_results.dart | 5 +- 10 files changed, 211 insertions(+), 134 deletions(-) diff --git a/lib/settings/about.dart b/lib/settings/about.dart index e0b07107..666c86de 100644 --- a/lib/settings/about.dart +++ b/lib/settings/about.dart @@ -15,48 +15,96 @@ class InvenTreeAboutWidget extends StatelessWidget { @override Widget build(BuildContext context) { + List tiles = []; + + tiles.add( + ListTile( + title: Text( + I18N.of(context).serverDetails, + style: TextStyle(fontWeight: FontWeight.bold), + ), + ) + ); + + if (InvenTreeAPI().isConnected()) { + tiles.add( + ListTile( + title: Text(I18N.of(context).address), + subtitle: Text(InvenTreeAPI().baseUrl.isNotEmpty ? InvenTreeAPI().baseUrl : "Not connected"), + ) + ); + + tiles.add( + ListTile( + title: Text(I18N.of(context).version), + subtitle: Text(InvenTreeAPI().version.isNotEmpty ? InvenTreeAPI().version : "Not connected"), + ) + ); + + tiles.add( + ListTile( + title: Text("Server Instance"), + subtitle: Text(InvenTreeAPI().instance.isNotEmpty ? InvenTreeAPI().instance : "Not connected"), + ) + ); + } else { + tiles.add( + ListTile( + title: Text("Not Connected"), + subtitle: Text( + "InvenTree server not connected", + style: TextStyle(fontStyle: FontStyle.italic), + ) + ) + ); + } + + tiles.add( + ListTile( + title: Text( + I18N.of(context).appDetails, + style: TextStyle(fontWeight: FontWeight.bold), + ), + ) + ); + + tiles.add( + ListTile( + title: Text(I18N.of(context).name), + subtitle: Text("${info.appName}"), + ) + ); + + tiles.add( + ListTile( + title: Text("Package Name"), + subtitle: Text("${info.packageName}"), + ) + ); + + tiles.add( + ListTile( + title: Text(I18N.of(context).version), + subtitle: Text("${info.version}"), + ) + ); + + tiles.add( + ListTile( + title: Text(I18N.of(context).build), + subtitle: Text("${info.buildNumber}"), + ) + ); + return Scaffold( appBar: AppBar( title: Text("About InvenTree"), ), body: ListView( - children: [ - ListTile( - title: Text(I18N.of(context).serverDetails), - ), - ListTile( - title: Text(I18N.of(context).address), - subtitle: Text(InvenTreeAPI().baseUrl.isNotEmpty ? InvenTreeAPI().baseUrl : "Not connected"), - ), - ListTile( - title: Text(I18N.of(context).version), - subtitle: Text(InvenTreeAPI().version.isNotEmpty ? InvenTreeAPI().version : "Not connected"), - ), - ListTile( - title: Text("Server Instance"), - subtitle: Text(InvenTreeAPI().instance.isNotEmpty ? InvenTreeAPI().instance : "Not connected"), - ), - Divider(), - ListTile( - title: Text(I18N.of(context).appDetails), - ), - ListTile( - title: Text(I18N.of(context).name), - subtitle: Text("${info.appName}"), - ), - ListTile( - title: Text("Package Name"), - subtitle: Text("${info.packageName}"), - ), - ListTile( - title: Text(I18N.of(context).version), - subtitle: Text("${info.version}"), - ), - ListTile( - title: Text(I18N.of(context).build), - subtitle: Text("${info.buildNumber}"), - ) - ], + children: ListTile.divideTiles( + context: context, + tiles: tiles, + ).toList(), ) ); } diff --git a/lib/settings/login.dart b/lib/settings/login.dart index 9ae57d34..53beff37 100644 --- a/lib/settings/login.dart +++ b/lib/settings/login.dart @@ -300,7 +300,10 @@ class _InvenTreeLoginSettingsState extends State { ), body: Container( child: ListView( - children: children, + children: ListTile.divideTiles( + context: context, + tiles: children + ).toList(), ) ), floatingActionButton: FloatingActionButton( diff --git a/lib/settings/settings.dart b/lib/settings/settings.dart index 16604134..a93c8821 100644 --- a/lib/settings/settings.dart +++ b/lib/settings/settings.dart @@ -34,33 +34,35 @@ class _InvenTreeSettingsState extends State { ), body: Center( child: ListView( - children: [ - ListTile( - title: Text(I18N.of(context).profile), - subtitle: Text("Configure user profile settings"), - leading: FaIcon(FontAwesomeIcons.user), - onTap: _editServerSettings, - ), - Divider(), - ListTile( - title: Text(I18N.of(context).about), - subtitle: Text(I18N.of(context).appDetails), - leading: FaIcon(FontAwesomeIcons.infoCircle), - onTap: _about, - ), - ListTile( - title: Text(I18N.of(context).releaseNotes), - subtitle: Text("Display app release notes"), - leading: FaIcon(FontAwesomeIcons.fileAlt), - onTap: _releaseNotes, - ), - ListTile( - title: Text(I18N.of(context).reportBug), - subtitle: Text("Report bug or suggest new feature"), - leading: FaIcon(FontAwesomeIcons.bug), - onTap: null, - ), - ], + children: ListTile.divideTiles( + context: context, + tiles: [ + ListTile( + title: Text(I18N.of(context).profile), + subtitle: Text("Configure user profile settings"), + leading: FaIcon(FontAwesomeIcons.user), + onTap: _editServerSettings, + ), + ListTile( + title: Text(I18N.of(context).about), + subtitle: Text(I18N.of(context).appDetails), + leading: FaIcon(FontAwesomeIcons.infoCircle), + onTap: _about, + ), + ListTile( + title: Text(I18N.of(context).releaseNotes), + subtitle: Text("Display app release notes"), + leading: FaIcon(FontAwesomeIcons.fileAlt), + onTap: _releaseNotes, + ), + ListTile( + title: Text(I18N.of(context).reportBug), + subtitle: Text("Report bug or suggest new feature"), + leading: FaIcon(FontAwesomeIcons.bug), + onTap: null, + ), + ] + ).toList() ) ) ); diff --git a/lib/widget/category_display.dart b/lib/widget/category_display.dart index 5e26daf9..02a91527 100644 --- a/lib/widget/category_display.dart +++ b/lib/widget/category_display.dart @@ -231,9 +231,10 @@ class SubcategoryList extends StatelessWidget { @override Widget build(BuildContext context) { - return ListView.builder( + return ListView.separated( shrinkWrap: true, physics: ClampingScrollPhysics(), + separatorBuilder: (_, __) => const Divider(), itemBuilder: _build, itemCount: _categories.length); } } @@ -282,9 +283,10 @@ class PartList extends StatelessWidget { @override Widget build(BuildContext context) { - return ListView.builder( + return ListView.separated( shrinkWrap: true, physics: ClampingScrollPhysics(), + separatorBuilder: (_, __) => const Divider(height: 1), itemBuilder: _build, itemCount: _parts.length); } } diff --git a/lib/widget/drawer.dart b/lib/widget/drawer.dart index b412da5e..70083365 100644 --- a/lib/widget/drawer.dart +++ b/lib/widget/drawer.dart @@ -102,65 +102,65 @@ class InvenTreeDrawer extends StatelessWidget { Widget build(BuildContext context) { return Drawer( child: new ListView( - children: [ - new ListTile( - leading: new Image.asset( - "assets/image/icon.png", - fit: BoxFit.scaleDown, - width: 40, + children: ListTile.divideTiles( + context: context, + tiles: [ + new ListTile( + leading: new Image.asset( + "assets/image/icon.png", + fit: BoxFit.scaleDown, + width: 40, + ), + title: new Text("InvenTree"), + onTap: _home, ), - title: new Text("InvenTree"), - onTap: _home, - ), - new Divider(), - /* - // TODO - Add search functionality! - new ListTile( - title: new Text("Search"), - leading: new FaIcon(FontAwesomeIcons.search), - onTap: _search, - ), - */ - new ListTile( - title: new Text("Scan Barcode"), - onTap: _scan, - leading: new FaIcon(FontAwesomeIcons.barcode), - ), - new Divider(), - new ListTile( - title: new Text("Parts"), - leading: new Icon(Icons.category), - onTap: _showParts, - ), - new ListTile( - title: new Text("Stock"), - leading: new FaIcon(FontAwesomeIcons.boxes), - onTap: _showStock, - ), - /* - new ListTile( - title: new Text("Suppliers"), - leading: new FaIcon(FontAwesomeIcons.building), - onTap: _showSuppliers, - ), - new ListTile( - title: Text("Manufacturers"), - leading: new FaIcon(FontAwesomeIcons.industry), - onTap: _showManufacturers, - ), - new ListTile( - title: new Text("Customers"), - leading: new FaIcon(FontAwesomeIcons.users), - onTap: _showCustomers, - ), - */ - new Divider(), - new ListTile( - title: new Text(I18N.of(context).settings), - leading: new Icon(Icons.settings), - onTap: _settings, - ), - ] + /* + // TODO - Add search functionality! + new ListTile( + title: new Text("Search"), + leading: new FaIcon(FontAwesomeIcons.search), + onTap: _search, + ), + */ + new ListTile( + title: new Text(I18N.of(context).scanBarcode), + onTap: _scan, + leading: new FaIcon(FontAwesomeIcons.barcode), + ), + new ListTile( + title: new Text(I18N.of(context).parts), + leading: new Icon(Icons.category), + onTap: _showParts, + ), + new ListTile( + title: new Text(I18N.of(context).stock), + leading: new FaIcon(FontAwesomeIcons.boxes), + onTap: _showStock, + ), + /* + new ListTile( + title: new Text("Suppliers"), + leading: new FaIcon(FontAwesomeIcons.building), + onTap: _showSuppliers, + ), + new ListTile( + title: Text("Manufacturers"), + leading: new FaIcon(FontAwesomeIcons.industry), + onTap: _showManufacturers, + ), + new ListTile( + title: new Text("Customers"), + leading: new FaIcon(FontAwesomeIcons.users), + onTap: _showCustomers, + ), + */ + new ListTile( + title: new Text(I18N.of(context).settings), + leading: new Icon(Icons.settings), + onTap: _settings, + ), + ] + ).toList(), ) ); } diff --git a/lib/widget/location_display.dart b/lib/widget/location_display.dart index 6e8563de..b8fe8e06 100644 --- a/lib/widget/location_display.dart +++ b/lib/widget/location_display.dart @@ -156,7 +156,10 @@ class _LocationDisplayState extends RefreshableState { ); case 1: return ListView( - children: actionTiles(), + children: ListTile.divideTiles( + context: context, + tiles: actionTiles() + ).toList() ); default: return null; @@ -298,10 +301,11 @@ class SublocationList extends StatelessWidget { @override Widget build(BuildContext context) { - return ListView.builder( + return ListView.separated( shrinkWrap: true, physics: ClampingScrollPhysics(), itemBuilder: _build, + separatorBuilder: (_, __) => const Divider(), itemCount: _locations.length ); } @@ -342,9 +346,10 @@ class StockList extends StatelessWidget { @override Widget build(BuildContext context) { - return ListView.builder( + return ListView.separated( shrinkWrap: true, physics: ClampingScrollPhysics(), + separatorBuilder: (_, __) => const Divider(), itemBuilder: _build, itemCount: _items.length); } } \ No newline at end of file diff --git a/lib/widget/part_detail.dart b/lib/widget/part_detail.dart index 45f2fcfe..fbd91132 100644 --- a/lib/widget/part_detail.dart +++ b/lib/widget/part_detail.dart @@ -82,6 +82,7 @@ class _PartDisplayState extends RefreshableState { void _showStock(BuildContext context) async { await part.getStockItems(context); + Navigator.push( context, MaterialPageRoute(builder: (context) => PartStockDetailWidget(part)) @@ -349,13 +350,19 @@ class _PartDisplayState extends RefreshableState { case 0: return Center( child: ListView( - children: partTiles(), + children: ListTile.divideTiles( + context: context, + tiles: partTiles() + ).toList() ), ); case 1: return Center( child: ListView( - children: actionTiles(), + children: ListTile.divideTiles( + context: context, + tiles: actionTiles() + ).toList() ) ); default: diff --git a/lib/widget/part_stock_detail.dart b/lib/widget/part_stock_detail.dart index 36528351..e5b4f27f 100644 --- a/lib/widget/part_stock_detail.dart +++ b/lib/widget/part_stock_detail.dart @@ -100,10 +100,11 @@ class PartStockList extends StatelessWidget { @override Widget build(BuildContext context) { - return ListView.builder( + return ListView.separated( shrinkWrap: true, physics: ClampingScrollPhysics(), itemBuilder: _build, + separatorBuilder: (_, __) => const Divider(height: 1), itemCount: _items.length ); } diff --git a/lib/widget/stock_detail.dart b/lib/widget/stock_detail.dart index 10bf44b2..f9ba55df 100644 --- a/lib/widget/stock_detail.dart +++ b/lib/widget/stock_detail.dart @@ -579,11 +579,17 @@ class _StockItemDisplayState extends RefreshableState { switch (index) { case 0: return ListView( - children: detailTiles(), + children: ListTile.divideTiles( + context: context, + tiles: detailTiles() + ).toList(), ); case 1: return ListView( - children: actionTiles(), + children: ListTile.divideTiles( + context: context, + tiles: actionTiles() + ).toList() ); default: return null; diff --git a/lib/widget/stock_item_test_results.dart b/lib/widget/stock_item_test_results.dart index 0563b355..1ff75209 100644 --- a/lib/widget/stock_item_test_results.dart +++ b/lib/widget/stock_item_test_results.dart @@ -250,7 +250,10 @@ class _StockItemTestResultDisplayState extends RefreshableState