Navigation now flows entirely through go_router

This commit is contained in:
Arseni
2025-12-08 17:40:25 +03:00
parent f478219990
commit 64ad8c8b38
21 changed files with 705 additions and 550 deletions

View File

@@ -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),
);
}