fix: gorouter improvements

This commit is contained in:
markkiepe 2024-05-28 10:42:17 +02:00
parent 756fa00be6
commit b5d4e41931
7 changed files with 68 additions and 84 deletions

View file

@ -15,7 +15,12 @@ final ProductService<MyProduct> productService = ProductService([]);
FlutterShoppingConfiguration getFlutterShoppingConfiguration() => FlutterShoppingConfiguration getFlutterShoppingConfiguration() =>
FlutterShoppingConfiguration( FlutterShoppingConfiguration(
// (REQUIRED): Shop builder configuration // (REQUIRED): Shop builder configuration
shopBuilder: (BuildContext context) => ProductPageScreen( shopBuilder: (
BuildContext context,
String? initialBuildShopId,
String? streetName,
) =>
ProductPageScreen(
configuration: ProductPageConfiguration( configuration: ProductPageConfiguration(
// (REQUIRED): List of shops that should be displayed // (REQUIRED): List of shops that should be displayed
// If there is only one, make a list with just one shop. // If there is only one, make a list with just one shop.
@ -71,6 +76,9 @@ FlutterShoppingConfiguration getFlutterShoppingConfiguration() =>
), ),
), ),
), ),
// (OPTIONAL): Initial build shop id that overrides the initialShop
initialBuildShopId: initialBuildShopId,
), ),
// (REQUIRED): Shopping cart builder configuration // (REQUIRED): Shopping cart builder configuration
@ -128,7 +136,7 @@ FlutterShoppingConfiguration getFlutterShoppingConfiguration() =>
color: Colors.white, color: Colors.white,
), ),
onPressed: () { onPressed: () {
context.go(FlutterShoppingRoutes.shop); context.go(FlutterShoppingPathRoutes.shop);
}, },
), ),
), ),

View file

@ -12,7 +12,7 @@ class Homepage extends StatelessWidget {
label: const Text("1"), label: const Text("1"),
child: IconButton( child: IconButton(
icon: const Icon(Icons.shopping_cart_outlined, size: 50), icon: const Icon(Icons.shopping_cart_outlined, size: 50),
onPressed: () => context.go(FlutterShoppingRoutes.shop), onPressed: () => context.go(FlutterShoppingPathRoutes.shop),
), ),
), ),
), ),

View file

@ -63,7 +63,7 @@ OrderDetailConfiguration getDefaultOrderDetailConfiguration(
title: const Text("Order Details"), title: const Text("Order Details"),
leading: IconButton( leading: IconButton(
icon: const Icon(Icons.close, color: Colors.white), icon: const Icon(Icons.close, color: Colors.white),
onPressed: () => context.go(FlutterShoppingRoutes.shoppingCart), onPressed: () => context.go(FlutterShoppingPathRoutes.shoppingCart),
), ),
), ),
); );

View file

@ -15,7 +15,11 @@ class FlutterShoppingConfiguration {
}); });
/// Builder for the shop/product page. /// Builder for the shop/product page.
final Widget Function(BuildContext context) shopBuilder; final Widget Function(
BuildContext context,
String? initialBuildShopId,
String? streetName,
) shopBuilder;
/// Builder for the shopping cart page. /// Builder for the shopping cart page.
final Widget Function(BuildContext context) shoppingCartBuilder; final Widget Function(BuildContext context) shoppingCartBuilder;

View file

@ -1,5 +1,23 @@
/// All the routes used in the user-story. /// All the name routes used in the user-story.
mixin FlutterShoppingRoutes { mixin FlutterShoppingNameRoutes {
/// The shop name route.
static const String shop = "shop";
/// The shopping cart name route.
static const String shoppingCart = "shoppingcart";
/// The order details name route.
static const String orderDetails = "orderdetails";
/// The order success name route.
static const String orderSuccess = "ordersuccess";
/// The order failed name route.
static const String orderFailed = "orderfailed";
}
/// All the path routes used in the user-story.
mixin FlutterShoppingPathRoutes {
/// The shop page route. /// The shop page route.
static const String shop = "/shop"; static const String shop = "/shop";

View file

@ -1,8 +1,6 @@
import "package:flutter/material.dart";
import "package:flutter_order_details/flutter_order_details.dart"; import "package:flutter_order_details/flutter_order_details.dart";
import "package:flutter_shopping/flutter_shopping.dart"; import "package:flutter_shopping/flutter_shopping.dart";
import "package:flutter_shopping/src/config/default_order_detail_configuration.dart"; import "package:flutter_shopping/src/config/default_order_detail_configuration.dart";
import "package:flutter_shopping/src/go_router.dart";
import "package:flutter_shopping/src/widgets/default_order_failed_widget.dart"; import "package:flutter_shopping/src/widgets/default_order_failed_widget.dart";
import "package:flutter_shopping/src/widgets/default_order_succes_widget.dart"; import "package:flutter_shopping/src/widgets/default_order_succes_widget.dart";
import "package:go_router/go_router.dart"; import "package:go_router/go_router.dart";
@ -13,85 +11,41 @@ List<GoRoute> getShoppingStoryRoutes({
}) => }) =>
<GoRoute>[ <GoRoute>[
GoRoute( GoRoute(
name: "shop", name: FlutterShoppingNameRoutes.shop,
path: FlutterShoppingRoutes.shop, path: FlutterShoppingPathRoutes.shop,
pageBuilder: (BuildContext context, GoRouterState state) => builder: (context, state) => configuration.shopBuilder(
buildScreenWithFadeTransition( context,
context: context, state.uri.queryParameters["id"],
state: state, state.uri.queryParameters["street"],
child: configuration.shopBuilder(context),
), ),
), ),
GoRoute( GoRoute(
name: "shoppingCart", name: FlutterShoppingNameRoutes.shoppingCart,
path: FlutterShoppingRoutes.shoppingCart, path: FlutterShoppingPathRoutes.shoppingCart,
pageBuilder: (BuildContext context, GoRouterState state) => builder: (context, state) => configuration.shoppingCartBuilder(context),
buildScreenWithFadeTransition(
context: context,
state: state,
child: configuration.shoppingCartBuilder(context),
),
), ),
GoRoute( GoRoute(
name: "orderDetails", name: FlutterShoppingNameRoutes.orderDetails,
path: FlutterShoppingRoutes.orderDetails, path: FlutterShoppingPathRoutes.orderDetails,
pageBuilder: (BuildContext context, GoRouterState state) { builder: (context, state) => configuration.orderDetailsBuilder != null
if (configuration.orderDetailsBuilder != null) { ? configuration.orderDetailsBuilder!(context)
return buildScreenWithFadeTransition( : OrderDetailScreen(
context: context,
state: state,
child: configuration.orderDetailsBuilder!(context),
);
}
return buildScreenWithFadeTransition(
context: context,
state: state,
child: OrderDetailScreen(
configuration: configuration:
getDefaultOrderDetailConfiguration(context, configuration), getDefaultOrderDetailConfiguration(context, configuration),
), ),
);
},
), ),
GoRoute( GoRoute(
name: "orderSuccess", name: FlutterShoppingNameRoutes.orderSuccess,
path: FlutterShoppingRoutes.orderSuccess, path: FlutterShoppingPathRoutes.orderSuccess,
pageBuilder: (BuildContext context, GoRouterState state) { builder: (context, state) => configuration.orderSuccessBuilder != null
if (configuration.orderSuccessBuilder != null) { ? configuration.orderSuccessBuilder!(context)
return buildScreenWithFadeTransition( : DefaultOrderSucces(configuration: configuration),
context: context,
state: state,
child: configuration.orderSuccessBuilder!(context),
);
}
return buildScreenWithFadeTransition(
context: context,
state: state,
child: DefaultOrderSucces(configuration: configuration),
);
},
), ),
GoRoute( GoRoute(
name: "orderFailed", name: FlutterShoppingNameRoutes.orderFailed,
path: FlutterShoppingRoutes.orderFailed, path: FlutterShoppingPathRoutes.orderFailed,
pageBuilder: (BuildContext context, GoRouterState state) { builder: (context, state) => configuration.orderFailedBuilder != null
if (configuration.orderFailedBuilder != null) { ? configuration.orderFailedBuilder!(context)
return buildScreenWithFadeTransition( : DefaultOrderFailed(configuration: configuration),
context: context,
state: state,
child: configuration.orderFailedBuilder!(context),
);
}
return buildScreenWithFadeTransition(
context: context,
state: state,
child: DefaultOrderFailed(
configuration: configuration,
),
);
},
), ),
]; ];

View file

@ -26,9 +26,9 @@ Future<void> onCompleteOrderDetails(
} }
if (succesful) { if (succesful) {
go(FlutterShoppingRoutes.orderSuccess); go(FlutterShoppingPathRoutes.orderSuccess);
} else { } else {
go(FlutterShoppingRoutes.orderFailed); go(FlutterShoppingPathRoutes.orderFailed);
} }
} }
@ -39,7 +39,7 @@ Future<void> onCompleteOrderDetails(
void onCompleteShoppingCart( void onCompleteShoppingCart(
BuildContext context, BuildContext context,
) { ) {
context.go(FlutterShoppingRoutes.orderDetails); context.go(FlutterShoppingPathRoutes.orderDetails);
} }
/// Default on complete product page function. /// Default on complete product page function.
@ -49,5 +49,5 @@ void onCompleteShoppingCart(
void onCompleteProductPage( void onCompleteProductPage(
BuildContext context, BuildContext context,
) { ) {
context.go(FlutterShoppingRoutes.shoppingCart); context.go(FlutterShoppingPathRoutes.shoppingCart);
} }