From 0ecf9103327fe70f7dbfcd55a3f3804041bd4157 Mon Sep 17 00:00:00 2001 From: Tom Bursch Date: Thu, 19 May 2022 02:04:48 +0200 Subject: [PATCH] chore: cleanup --- lib/cubits/recipe_list_cubit.dart | 12 ++--- lib/pages/item_search_page.dart | 2 +- lib/pages/item_selection_page.dart | 59 ++++---------------- lib/pages/recipe_add_update_page.dart | 74 +++++--------------------- lib/pages/recipe_page.dart | 71 +++++------------------- lib/widgets/sliver_item_grid_list.dart | 16 +++--- 6 files changed, 53 insertions(+), 181 deletions(-) diff --git a/lib/cubits/recipe_list_cubit.dart b/lib/cubits/recipe_list_cubit.dart index c86b7803..b6d97393 100644 --- a/lib/cubits/recipe_list_cubit.dart +++ b/lib/cubits/recipe_list_cubit.dart @@ -113,9 +113,9 @@ class FilteredListRecipeCubitState extends ListRecipeCubitState { const FilteredListRecipeCubitState({ this.selectedTags = const {}, this.allRecipes = const [], - List recipes = const [], - Set tags = const {}, - }) : super(recipes: recipes, tags: tags); + super.recipes = const [], + super.tags = const {}, + }); factory FilteredListRecipeCubitState.fromState( ListRecipeCubitState state, @@ -151,9 +151,9 @@ class SearchRecipeCubitState extends ListRecipeCubitState { const SearchRecipeCubitState({ required this.query, - List recipes = const [], - Set tags = const {}, - }) : super(recipes: recipes, tags: tags); + super.recipes = const [], + super.tags = const {}, + }); @override List get props => super.props + [query]; diff --git a/lib/pages/item_search_page.dart b/lib/pages/item_search_page.dart index d949b7a1..8059ddb8 100644 --- a/lib/pages/item_search_page.dart +++ b/lib/pages/item_search_page.dart @@ -115,7 +115,7 @@ class _ItemSearchPageState extends State { items: state.searchResults, selected: (item) => state.selectedItems.contains(item), onLongPressed: (_) {}, - onPressed: (item) { + onPressed: (Item item) { if (!widget.multiple) { Navigator.of(context).pop([item]); } else { diff --git a/lib/pages/item_selection_page.dart b/lib/pages/item_selection_page.dart index 3adce7de..ceb96fa6 100644 --- a/lib/pages/item_selection_page.dart +++ b/lib/pages/item_selection_page.dart @@ -4,8 +4,6 @@ import 'package:kitchenowl/cubits/item_selection_cubit.dart'; import 'package:kitchenowl/models/item.dart'; import 'package:kitchenowl/kitchenowl.dart'; import 'package:kitchenowl/models/recipe.dart'; -import 'package:kitchenowl/widgets/shopping_item.dart'; -import 'package:responsive_builder/responsive_builder.dart'; class ItemSelectionPage extends StatefulWidget { final List recipes; @@ -41,13 +39,6 @@ class _ItemSelectionPageState extends State { @override Widget build(BuildContext context) { - final int crossAxisCount = getValueForScreenType( - context: context, - mobile: 3, - tablet: 6, - desktop: 9, - ); - return Scaffold( appBar: AppBar( title: Text(widget.title ?? AppLocalizations.of(context)!.itemsAdd), @@ -67,26 +58,11 @@ class _ItemSelectionPageState extends State { ), ), ), - SliverPadding( - padding: const EdgeInsets.symmetric(horizontal: 16), - sliver: SliverGrid( - gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( - crossAxisCount: crossAxisCount, - mainAxisSpacing: 4, - crossAxisSpacing: 4, - childAspectRatio: 1, - ), - delegate: SliverChildBuilderDelegate( - (context, i) => ShoppingItemWidget( - onPressed: (item) => cubit.toggleItem(recipe, item), - selected: state.selectedItems[recipe]!.contains( - recipe.mandatoryItems.elementAt(i), - ), - item: recipe.mandatoryItems.elementAt(i), - ), - childCount: recipe.mandatoryItems.length, - ), - ), + SliverItemGridList( + items: recipe.mandatoryItems, + onPressed: (RecipeItem item) => cubit.toggleItem(recipe, item), + selected: (item) => state.selectedItems[recipe]!.contains(item), + onLongPressed: (_) {}, ), if (recipe.optionalItems.isNotEmpty) SliverPadding( @@ -98,26 +74,11 @@ class _ItemSelectionPageState extends State { ), ), ), - SliverPadding( - padding: const EdgeInsets.symmetric(horizontal: 16), - sliver: SliverGrid( - gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( - crossAxisCount: crossAxisCount, - mainAxisSpacing: 4, - crossAxisSpacing: 4, - childAspectRatio: 1, - ), - delegate: SliverChildBuilderDelegate( - (context, i) => ShoppingItemWidget( - onPressed: (item) => cubit.toggleItem(recipe, item), - selected: state.selectedItems[recipe]!.contains( - recipe.optionalItems.elementAt(i), - ), - item: recipe.optionalItems.elementAt(i), - ), - childCount: recipe.optionalItems.length, - ), - ), + SliverItemGridList( + items: recipe.optionalItems, + onPressed: (RecipeItem item) => cubit.toggleItem(recipe, item), + selected: (item) => state.selectedItems[recipe]!.contains(item), + onLongPressed: (_) {}, ), const SliverPadding( padding: EdgeInsets.fromLTRB(16, 16, 16, 0), diff --git a/lib/pages/recipe_add_update_page.dart b/lib/pages/recipe_add_update_page.dart index dc513b55..a4328e1b 100644 --- a/lib/pages/recipe_add_update_page.dart +++ b/lib/pages/recipe_add_update_page.dart @@ -12,7 +12,6 @@ import 'package:kitchenowl/models/update_value.dart'; import 'package:kitchenowl/pages/item_page.dart'; import 'package:kitchenowl/pages/item_search_page.dart'; import 'package:kitchenowl/kitchenowl.dart'; -import 'package:kitchenowl/widgets/shopping_item.dart'; import 'package:responsive_builder/responsive_builder.dart'; class AddUpdateRecipePage extends StatefulWidget { @@ -64,12 +63,6 @@ class _AddUpdateRecipePageState extends State { @override Widget build(BuildContext context) { - final int crossAxisCount = getValueForScreenType( - context: context, - mobile: 3, - tablet: 6, - desktop: 9, - ); final bool mobileLayout = getValueForScreenType( context: context, mobile: true, @@ -311,33 +304,13 @@ class _AddUpdateRecipePageState extends State { bloc: cubit, buildWhen: (previous, current) => !listEquals(previous.items, current.items), - builder: (context, state) => (state.items - .where((e) => !e.optional) - .isNotEmpty) - ? SliverGrid( - gridDelegate: - SliverGridDelegateWithFixedCrossAxisCount( - crossAxisCount: crossAxisCount, - mainAxisSpacing: 4, - crossAxisSpacing: 4, - childAspectRatio: 1, - ), - delegate: SliverChildBuilderDelegate( - (context, i) => ShoppingItemWidget( - selected: true, - item: state.items - .where((e) => !e.optional) - .elementAt(i), - onPressed: (RecipeItem item) => - cubit.removeItem(item), - onLongPressed: (RecipeItem item) => - _editItem(context, item), - ), - childCount: - state.items.where((e) => !e.optional).length, - ), - ) - : const SliverToBoxAdapter(child: SizedBox(height: 0)), + builder: (context, state) => SliverItemGridList( + items: state.items.where((e) => !e.optional).toList(), + selected: (item) => true, + onPressed: (RecipeItem item) => cubit.removeItem(item), + onLongPressed: (RecipeItem item) => + _editItem(context, item), + ), ), ), SliverPadding( @@ -366,32 +339,13 @@ class _AddUpdateRecipePageState extends State { bloc: cubit, buildWhen: (previous, current) => !listEquals(previous.items, current.items), - builder: (context, state) => (state.items - .where((e) => e.optional) - .isNotEmpty) - ? SliverGrid( - gridDelegate: - SliverGridDelegateWithFixedCrossAxisCount( - crossAxisCount: crossAxisCount, - mainAxisSpacing: 4, - crossAxisSpacing: 4, - childAspectRatio: 1, - ), - delegate: SliverChildBuilderDelegate( - (context, i) => ShoppingItemWidget( - item: state.items - .where((e) => e.optional) - .elementAt(i), - onPressed: (RecipeItem item) => - cubit.removeItem(item), - onLongPressed: (RecipeItem item) => - _editItem(context, item), - ), - childCount: - state.items.where((e) => e.optional).length, - ), - ) - : const SliverToBoxAdapter(child: SizedBox(height: 0)), + builder: (context, state) => SliverItemGridList( + items: state.items.where((e) => e.optional).toList(), + selected: (item) => true, + onPressed: (RecipeItem item) => cubit.removeItem(item), + onLongPressed: (RecipeItem item) => + _editItem(context, item), + ), ), ), if (isUpdate) diff --git a/lib/pages/recipe_page.dart b/lib/pages/recipe_page.dart index e0d352da..65e5e241 100644 --- a/lib/pages/recipe_page.dart +++ b/lib/pages/recipe_page.dart @@ -14,8 +14,6 @@ import 'package:kitchenowl/pages/photo_view_page.dart'; import 'package:kitchenowl/pages/recipe_add_update_page.dart'; import 'package:kitchenowl/kitchenowl.dart'; import 'package:kitchenowl/widgets/recipe_source_chip.dart'; -import 'package:kitchenowl/widgets/shopping_item.dart'; -import 'package:responsive_builder/responsive_builder.dart'; import 'package:cached_network_image/cached_network_image.dart'; import 'package:url_launcher/url_launcher_string.dart'; @@ -50,13 +48,6 @@ class _RecipePageState extends State { @override Widget build(BuildContext context) { - final int crossAxisCount = getValueForScreenType( - context: context, - mobile: 3, - tablet: 6, - desktop: 9, - ); - return WillPopScope( onWillPop: () async { Navigator.of(context).pop(cubit.state.updateState); @@ -229,31 +220,12 @@ class _RecipePageState extends State { ), ), if (state.recipe.items.where((e) => !e.optional).isNotEmpty) - SliverPadding( - padding: const EdgeInsets.symmetric(horizontal: 16), - sliver: SliverGrid( - gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( - crossAxisCount: crossAxisCount, - mainAxisSpacing: 4, - crossAxisSpacing: 4, - childAspectRatio: 1, - ), - delegate: SliverChildBuilderDelegate( - (context, i) => ShoppingItemWidget( - onPressed: cubit.itemSelected, - selected: state.selectedItems.contains(state - .recipe.items - .where((e) => !e.optional) - .elementAt(i)), - item: state.recipe.items - .where((e) => !e.optional) - .elementAt(i), - ), - childCount: state.recipe.items - .where((e) => !e.optional) - .length, - ), - ), + SliverItemGridList( + items: + state.recipe.items.where((e) => !e.optional).toList(), + selected: (item) => state.selectedItems.contains(item), + onPressed: cubit.itemSelected, + onLongPressed: (_) {}, ), if (state.recipe.items.where((e) => e.optional).isNotEmpty) SliverPadding( @@ -266,31 +238,12 @@ class _RecipePageState extends State { ), ), if (state.recipe.items.where((e) => e.optional).isNotEmpty) - SliverPadding( - padding: const EdgeInsets.symmetric(horizontal: 16), - sliver: SliverGrid( - gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( - crossAxisCount: crossAxisCount, - mainAxisSpacing: 4, - crossAxisSpacing: 4, - childAspectRatio: 1, - ), - delegate: SliverChildBuilderDelegate( - (context, i) => ShoppingItemWidget( - onPressed: cubit.itemSelected, - selected: state.selectedItems.contains(state - .recipe.items - .where((e) => e.optional) - .elementAt(i)), - item: state.recipe.items - .where((e) => e.optional) - .elementAt(i), - ), - childCount: state.recipe.items - .where((e) => e.optional) - .length, - ), - ), + SliverItemGridList( + items: + state.recipe.items.where((e) => e.optional).toList(), + selected: (item) => state.selectedItems.contains(item), + onPressed: cubit.itemSelected, + onLongPressed: (_) {}, ), SliverPadding( padding: const EdgeInsets.all(16), diff --git a/lib/widgets/sliver_item_grid_list.dart b/lib/widgets/sliver_item_grid_list.dart index a3d712ee..faeb9231 100644 --- a/lib/widgets/sliver_item_grid_list.dart +++ b/lib/widgets/sliver_item_grid_list.dart @@ -7,14 +7,14 @@ import 'package:kitchenowl/pages/item_page.dart'; import 'package:kitchenowl/widgets/shopping_item.dart'; import 'package:responsive_builder/responsive_builder.dart'; -class SliverItemGridList extends StatelessWidget { +class SliverItemGridList extends StatelessWidget { final void Function()? onRefresh; - final void Function(Item)? onPressed; - final void Function(Item)? onLongPressed; - final List items; + final void Function(T)? onPressed; + final void Function(T)? onLongPressed; + final List items; final List? categories; // forwared to item page on long press final bool isList; - final bool Function(Item)? selected; + final bool Function(T)? selected; const SliverItemGridList({ Key? key, @@ -29,6 +29,10 @@ class SliverItemGridList extends StatelessWidget { @override Widget build(BuildContext context) { + if (items.isEmpty) { + return const SliverToBoxAdapter(child: SizedBox(height: 0)); + } + final int crossAxisCount = getValueForScreenType( context: context, mobile: 3, @@ -38,7 +42,7 @@ class SliverItemGridList extends StatelessWidget { final delegate = SliverChildBuilderDelegate( childCount: items.length, - (context, i) => ShoppingItemWidget( + (context, i) => ShoppingItemWidget( key: ObjectKey(items[i]), item: items[i], selected: selected?.call(items[i]) ?? false,