Navigation now flows entirely through go_router
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
import 'package:flutter/widgets.dart';
|
||||
|
||||
import 'package:collection/collection.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
import 'package:pshared/models/payment/type.dart';
|
||||
|
||||
import 'package:pweb/widgets/sidebar/destinations.dart';
|
||||
|
||||
@@ -17,6 +19,9 @@ class PayoutRoutes {
|
||||
static const editWallet = 'payout-edit-wallet';
|
||||
static const walletTopUp = 'payout-wallet-top-up';
|
||||
|
||||
static const paymentTypeQuery = 'paymentType';
|
||||
static const returnToQuery = 'returnTo';
|
||||
|
||||
static const dashboardPath = '/dashboard';
|
||||
static const recipientsPath = '/dashboard/recipients';
|
||||
static const addRecipientPath = '/dashboard/recipients/add';
|
||||
@@ -103,10 +108,70 @@ class PayoutRoutes {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
static Map<String, String> buildQueryParameters({
|
||||
PaymentType? paymentType,
|
||||
PayoutDestination? returnTo,
|
||||
}) {
|
||||
final params = <String, String>{
|
||||
if (paymentType != null) paymentTypeQuery: paymentType.name,
|
||||
if (returnTo != null) returnToQuery: nameFor(returnTo),
|
||||
};
|
||||
return params;
|
||||
}
|
||||
|
||||
static PaymentType? paymentTypeFromState(GoRouterState state) =>
|
||||
paymentTypeFromRaw(state.uri.queryParameters[paymentTypeQuery]);
|
||||
|
||||
static PaymentType? paymentTypeFromRaw(String? raw) => raw == null
|
||||
? null
|
||||
: PaymentType.values.firstWhereOrNull((type) => type.name == raw);
|
||||
|
||||
static PayoutDestination fallbackFromState(
|
||||
GoRouterState state, {
|
||||
PayoutDestination defaultDestination = PayoutDestination.dashboard,
|
||||
}) {
|
||||
final raw = state.uri.queryParameters[returnToQuery];
|
||||
return destinationFor(raw) ?? defaultDestination;
|
||||
}
|
||||
}
|
||||
|
||||
extension PayoutNavigation on BuildContext {
|
||||
void goToPayout(PayoutDestination destination) => goNamed(PayoutRoutes.nameFor(destination));
|
||||
|
||||
void pushToPayout(PayoutDestination destination) => pushNamed(PayoutRoutes.nameFor(destination));
|
||||
}
|
||||
|
||||
void goToPayment({
|
||||
PaymentType? paymentType,
|
||||
PayoutDestination? returnTo,
|
||||
}) =>
|
||||
goNamed(
|
||||
PayoutRoutes.payment,
|
||||
queryParameters: PayoutRoutes.buildQueryParameters(
|
||||
paymentType: paymentType,
|
||||
returnTo: returnTo,
|
||||
),
|
||||
);
|
||||
|
||||
void pushToPayment({
|
||||
PaymentType? paymentType,
|
||||
PayoutDestination? returnTo,
|
||||
}) =>
|
||||
pushNamed(
|
||||
PayoutRoutes.payment,
|
||||
queryParameters: PayoutRoutes.buildQueryParameters(
|
||||
paymentType: paymentType,
|
||||
returnTo: returnTo,
|
||||
),
|
||||
);
|
||||
|
||||
void pushToWalletTopUp({PayoutDestination? returnTo}) => pushNamed(
|
||||
PayoutRoutes.walletTopUp,
|
||||
queryParameters: PayoutRoutes.buildQueryParameters(returnTo: returnTo),
|
||||
);
|
||||
|
||||
void pushToEditWallet({PayoutDestination? returnTo}) => pushNamed(
|
||||
PayoutRoutes.editWallet,
|
||||
queryParameters: PayoutRoutes.buildQueryParameters(returnTo: returnTo),
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user