diff --git a/lib/widget/category_display.dart b/lib/widget/category_display.dart index 52f8463a..513ae45a 100644 --- a/lib/widget/category_display.dart +++ b/lib/widget/category_display.dart @@ -283,32 +283,8 @@ class _CategoryDisplayState extends RefreshableState { children: detailTiles() ); case 1: - return Column( - mainAxisAlignment: MainAxisAlignment.start, - children: [ - getCategoryDescriptionCard(extra: false), - ListTile( - title: Text( - I18N.of(context).parts, - style: TextStyle(fontWeight: FontWeight.bold), - ), - trailing: Text( - "${partCount}", - style: TextStyle(fontWeight: FontWeight.bold), - ), - ), - Divider(height: 3), - Expanded( - child: PaginatedPartList( - {"category": "${category?.pk ?? null}"}, - onTotalChanged: (int total) { - setState(() { - partCount = total; - }); - }, - ) - ) - ], + return PaginatedPartList( + {"category": "${category?.pk ?? null}"}, ); case 2: return ListView( @@ -410,6 +386,8 @@ class _PaginatedPartListState extends State { super.dispose(); } + int resultCount = 0; + Future _fetchPage(int pageKey) async { try { @@ -445,6 +423,10 @@ class _PaginatedPartListState extends State { onTotalChanged(page.count); } + setState(() { + resultCount = page.count; + }); + } catch (error) { print("Error! - ${error.toString()}"); _pagingController.error = error; @@ -484,13 +466,43 @@ class _PaginatedPartListState extends State { @override Widget build(BuildContext context) { + return Column( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + PaginatedSearch( + callback: updateSearchTerm, + results: resultCount + ), + Expanded( + child: CustomScrollView( + shrinkWrap: true, + physics: ClampingScrollPhysics(), + scrollDirection: Axis.vertical, + slivers: [ + PagedSliverList.separated( + pagingController: _pagingController, + builderDelegate: PagedChildBuilderDelegate( + itemBuilder: (context, item, index) { + return _buildPart(context, item); + }, + noItemsFoundIndicatorBuilder: (context) { + return NoResultsWidget("No parts found"); + }, + ), + separatorBuilder: (context, index) => const Divider(height: 1), + ) + ], + ) + ) + ], + ); return CustomScrollView( shrinkWrap: true, physics: ClampingScrollPhysics(), scrollDirection: Axis.vertical, slivers: [ // TODO: Introduce searching within the list - //PaginatedSearch(callback: updateSearchTerm), + PaginatedSearch(callback: updateSearchTerm), PagedSliverList.separated( pagingController: _pagingController, builderDelegate: PagedChildBuilderDelegate( diff --git a/lib/widget/paginator.dart b/lib/widget/paginator.dart index 6eea72b4..4b710983 100644 --- a/lib/widget/paginator.dart +++ b/lib/widget/paginator.dart @@ -9,17 +9,28 @@ class PaginatedSearch extends StatelessWidget { Function callback; - PaginatedSearch({this.callback}); + int results = 0; + + PaginatedSearch({this.callback, this.results}); @override Widget build(BuildContext context) { - return SliverToBoxAdapter( - child: TextField( - onChanged: callback, - decoration: InputDecoration( - hintText: "Search", - ), - ) + return ListTile( + leading: FaIcon(FontAwesomeIcons.search), + title: TextField( + onChanged: (value) { + if (callback != null) { + callback(value); + } + }, + decoration: InputDecoration( + hintText: "Search parts", + ), + ), + trailing: Text( + "${results}", + style: TextStyle(fontWeight: FontWeight.bold), + ), ); } } @@ -41,4 +52,3 @@ class NoResultsWidget extends StatelessWidget { } } -