diff --git a/packages/flutter_order_details/lib/src/order_detail_screen.dart b/packages/flutter_order_details/lib/src/order_detail_screen.dart index e7e90b0..a87f354 100644 --- a/packages/flutter_order_details/lib/src/order_detail_screen.dart +++ b/packages/flutter_order_details/lib/src/order_detail_screen.dart @@ -49,7 +49,9 @@ class _OrderDetailScreenState extends State { checkingPages: checkingPages, ), pages: widget.configuration.pages?.call(context) ?? - defaultPages(context), + defaultPages(context, () { + setState(() {}); + }), onFinished: (data) async { widget.configuration.onStepsCompleted.call( widget.configuration.shoppingService.shopService.selectedShop!.id, diff --git a/packages/flutter_order_details/lib/src/widgets/default_order_detail_pages.dart b/packages/flutter_order_details/lib/src/widgets/default_order_detail_pages.dart index 0d8f25f..f2ec7b4 100644 --- a/packages/flutter_order_details/lib/src/widgets/default_order_detail_pages.dart +++ b/packages/flutter_order_details/lib/src/widgets/default_order_detail_pages.dart @@ -2,9 +2,11 @@ import "package:animated_toggle/animated_toggle.dart"; import "package:flutter/material.dart"; import "package:flutter_order_details/flutter_order_details.dart"; - /// Default pages for the order details screen. -List defaultPages(BuildContext context) { +List defaultPages( + BuildContext context, + Function() onSwitched, +) { var theme = Theme.of(context); var morningTimes = [ @@ -307,30 +309,25 @@ List defaultPages(BuildContext context) { toggleColor: theme.colorScheme.primary, onSwitch: (value) { switchStatus.value = value; + onSwitched(); }, childLeft: Center( - child: ListenableBuilder( - listenable: switchStatus, - builder: (context, widget) => Text( - "Morning", - style: theme.textTheme.titleSmall?.copyWith( - color: switchStatus.value - ? theme.colorScheme.primary - : Colors.white, - ), + child: Text( + "Morning", + style: theme.textTheme.titleSmall?.copyWith( + color: switchStatus.value + ? theme.colorScheme.primary + : Colors.white, ), ), ), childRight: Center( - child: ListenableBuilder( - listenable: switchStatus, - builder: (context, widget) => Text( - "Afternoon", - style: theme.textTheme.titleSmall?.copyWith( - color: switchStatus.value - ? Colors.white - : theme.colorScheme.primary, - ), + child: Text( + "Afternoon", + style: theme.textTheme.titleSmall?.copyWith( + color: switchStatus.value + ? Colors.white + : theme.colorScheme.primary, ), ), ), @@ -339,35 +336,31 @@ List defaultPages(BuildContext context) { const SizedBox( height: 8, ), - ListenableBuilder( - listenable: switchStatus, - builder: (context, widget) => FlutterFormInputMultipleChoice( - validationMessage: "Select a Time", - controller: multipleChoiceController, - options: switchStatus.value ? afternoonTimes : morningTimes, - mainAxisSpacing: 5, - crossAxisSpacing: 5, - childAspectRatio: 2, - height: MediaQuery.of(context).size.height * 0.6, - builder: - (context, index, selected, controller, options, state) => - GestureDetector( - onTap: () { - state.didChange(options[index]); - selected.value = index; - controller.onSaved(options[index]); - }, - child: Container( - decoration: BoxDecoration( - color: selected.value == index - ? Theme.of(context).colorScheme.primary - : Colors.white, - borderRadius: BorderRadius.circular(10), - ), - height: 40, - child: Center( - child: Text(options[index]), - ), + FlutterFormInputMultipleChoice( + validationMessage: "Select a Time", + controller: multipleChoiceController, + options: switchStatus.value ? afternoonTimes : morningTimes, + mainAxisSpacing: 5, + crossAxisSpacing: 5, + childAspectRatio: 2, + height: MediaQuery.of(context).size.height * 0.6, + builder: (context, index, selected, controller, options, state) => + GestureDetector( + onTap: () { + state.didChange(options[index]); + selected.value = index; + controller.onSaved(options[index]); + }, + child: Container( + decoration: BoxDecoration( + color: selected.value == index + ? Theme.of(context).colorScheme.primary + : Colors.white, + borderRadius: BorderRadius.circular(10), + ), + height: 40, + child: Center( + child: Text(options[index]), ), ), ), diff --git a/packages/flutter_product_page/lib/src/product_page_screen.dart b/packages/flutter_product_page/lib/src/product_page_screen.dart index dbee8dc..70d174c 100644 --- a/packages/flutter_product_page/lib/src/product_page_screen.dart +++ b/packages/flutter_product_page/lib/src/product_page_screen.dart @@ -54,7 +54,9 @@ class ProductPageScreen extends StatelessWidget { context, data.error, ) ?? - DefaultError(error: data.error); + DefaultError( + error: data.error, + ); } List? shops = data.data; @@ -102,9 +104,49 @@ class ProductPageScreen extends StatelessWidget { configuration.onShopSelectionChange?.call( configuration.shoppingService.shopService.selectedShop!, ); - return _ProductPage( - configuration: configuration, - shops: shops, + return Stack( + children: [ + SingleChildScrollView( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + configuration.shopselectorBuilder?.call( + context, + configuration, + shops, + configuration + .shoppingService.shopService.selectShop, + ) ?? + ShopSelector( + configuration: configuration, + shops: shops, + onTap: configuration + .shoppingService.shopService.selectShop, + ), + configuration.selectedCategoryBuilder?.call( + configuration, + ) ?? + SelectedCategories( + configuration: configuration, + ), + _ShopContents( + configuration: configuration, + ), + ], + ), + ), + Align( + alignment: Alignment.bottomCenter, + child: configuration.shoppingCartButtonBuilder != null + ? configuration.shoppingCartButtonBuilder!( + context, + configuration, + ) + : DefaultShoppingCartButton( + configuration: configuration, + ), + ), + ], ); }, ); @@ -115,65 +157,6 @@ class ProductPageScreen extends StatelessWidget { ); } -class _ProductPage extends StatelessWidget { - const _ProductPage({ - required this.configuration, - required this.shops, - }); - - final ProductPageConfiguration configuration; - - final List shops; - - @override - Widget build(BuildContext context) { - var pageContent = SingleChildScrollView( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - configuration.shopselectorBuilder?.call( - context, - configuration, - shops, - configuration.shoppingService.shopService.selectShop, - ) ?? - ShopSelector( - configuration: configuration, - shops: shops, - onTap: configuration.shoppingService.shopService.selectShop, - ), - configuration.selectedCategoryBuilder?.call( - configuration, - ) ?? - SelectedCategories( - configuration: configuration, - ), - _ShopContents( - configuration: configuration, - ), - ], - ), - ); - - return Stack( - children: [ - pageContent, - Align( - alignment: Alignment.bottomCenter, - child: configuration.shoppingCartButtonBuilder != null - ? configuration.shoppingCartButtonBuilder!( - context, - configuration, - ) - : DefaultShoppingCartButton( - configuration: configuration, - ), - ), - ], - ); - } -} - class _ShopContents extends StatelessWidget { const _ShopContents({ required this.configuration, diff --git a/packages/flutter_shopping/lib/src/flutter_shopping_navigator_userstory.dart b/packages/flutter_shopping/lib/src/flutter_shopping_navigator_userstory.dart index f462d4a..9b7fbb6 100644 --- a/packages/flutter_shopping/lib/src/flutter_shopping_navigator_userstory.dart +++ b/packages/flutter_shopping/lib/src/flutter_shopping_navigator_userstory.dart @@ -1,15 +1,16 @@ -// ignore_for_file: public_member_api_docs - import "package:flutter/material.dart"; import "package:flutter_shopping/flutter_shopping.dart"; import "package:flutter_shopping_local/flutter_shopping_local.dart"; +/// User story for the shopping navigator. class ShoppingNavigatorUserStory extends StatelessWidget { + /// Constructor for the shopping navigator user story. const ShoppingNavigatorUserStory({ this.shoppingConfiguration, super.key, }); + /// Shopping configuration. final ShoppingConfiguration? shoppingConfiguration; @override @@ -21,11 +22,15 @@ class ShoppingNavigatorUserStory extends StatelessWidget { ); } +/// Shopping product page. class ShoppingProductPage extends StatelessWidget { + /// Constructor for the shopping product page. const ShoppingProductPage({ required this.shoppingConfiguration, super.key, }); + + /// Shopping configuration. final ShoppingConfiguration shoppingConfiguration; @override @@ -103,12 +108,15 @@ class ShoppingProductPage extends StatelessWidget { } } +/// Shopping cart. class ShoppingCart extends StatelessWidget { + /// Constructor for the shopping cart. const ShoppingCart({ required this.shoppingConfiguration, super.key, }); + /// Shopping configuration. final ShoppingConfiguration shoppingConfiguration; @override @@ -150,12 +158,15 @@ class ShoppingCart extends StatelessWidget { } } +/// Shopping order details. class ShoppingOrderDetails extends StatelessWidget { + /// Constructor for the shopping order details. const ShoppingOrderDetails({ required this.shoppingConfiguration, super.key, }); + /// Shopping configuration. final ShoppingConfiguration shoppingConfiguration; @override