Fixed issue with wallet form feild and made page selecor in dashboard into a router

This commit is contained in:
Arseni
2025-11-27 18:07:28 +03:00
parent 44446c6ad4
commit 9c16e27645
7 changed files with 280 additions and 118 deletions

View File

@@ -1,44 +1,46 @@
import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import 'package:provider/provider.dart';
import 'package:pshared/models/resources.dart';
import 'package:pshared/provider/account.dart';
import 'package:pshared/provider/permissions.dart';
import 'package:pweb/pages/address_book/form/page.dart';
import 'package:pweb/pages/address_book/page/page.dart';
import 'package:pweb/pages/payment_methods/page.dart';
import 'package:pweb/pages/payout_page/page.dart';
import 'package:pweb/pages/payout_page/wallet/edit/page.dart';
import 'package:pweb/pages/report/page.dart';
import 'package:pweb/pages/settings/profile/page.dart';
import 'package:pweb/pages/dashboard/dashboard.dart';
import 'package:pweb/providers/page_selector.dart';
import 'package:pweb/app/router/pages.dart';
import 'package:pweb/app/router/payout_routes.dart';
import 'package:pweb/providers/account.dart';
import 'package:pweb/providers/page_selector.dart';
import 'package:pweb/providers/permissions.dart';
import 'package:pweb/widgets/appbar/app_bar.dart';
import 'package:pweb/widgets/sidebar/destinations.dart';
import 'package:pweb/widgets/sidebar/sidebar.dart';
import 'package:pweb/generated/i18n/app_localizations.dart';
class PageSelector extends StatelessWidget {
const PageSelector({super.key});
final PayoutDestination selected;
final Widget child;
void _logout(BuildContext context) {
const PageSelector({
super.key,
required this.selected,
required this.child,
});
void _handleLogout(BuildContext context) {
context.read<AccountProvider>().logout();
context.read<PermissionsProvider>().clear();
navigateAndReplace(context, Pages.login);
}
void _goToDestination(BuildContext context, PayoutDestination destination) {
context.go(payoutPath(destination));
}
@override
Widget build(BuildContext context) {
final provider = context.watch<PageSelectorProvider>();
final permissions = context.watch<PermissionsProvider>();
final loc = AppLocalizations.of(context)!;
final account = context.watch<AccountProvider>().account;
final bool restrictedAccess = !permissions.canRead(ResourceType.chainWallets);
final allowedDestinations = restrictedAccess
final allowedDestinations = permissions.isRecipient
? <PayoutDestination>{
PayoutDestination.settings,
PayoutDestination.methods,
@@ -46,78 +48,23 @@ class PageSelector extends StatelessWidget {
}
: PayoutDestination.values.toSet();
final selected = allowedDestinations.contains(provider.selected)
? provider.selected
: (restrictedAccess ? PayoutDestination.settings : PayoutDestination.dashboard);
final safeSelected = allowedDestinations.contains(selected)
? selected
: (permissions.isRecipient ? PayoutDestination.settings : PayoutDestination.dashboard);
if (selected != provider.selected) {
WidgetsBinding.instance.addPostFrameCallback((_) => provider.selectPage(selected));
if (safeSelected != selected) {
WidgetsBinding.instance.addPostFrameCallback((_) => _goToDestination(context, safeSelected));
}
Widget content;
switch (selected) {
case PayoutDestination.dashboard:
content = DashboardPage(
onRecipientSelected: (recipient) => provider.selectRecipient(recipient),
onGoToPaymentWithoutRecipient: provider.startPaymentWithoutRecipient,
);
break;
case PayoutDestination.recipients:
content = RecipientAddressBookPage(
onRecipientSelected: (recipient) =>
provider.selectRecipient(recipient, fromList: true),
onAddRecipient: provider.goToAddRecipient,
onEditRecipient: provider.editRecipient,
);
break;
case PayoutDestination.addrecipient:
final recipient = provider.recipientProvider?.selectedRecipient;
content = AdressBookRecipientForm(
recipient: recipient,
onSaved: (_) => provider.selectPage(PayoutDestination.recipients),
);
break;
case PayoutDestination.payment:
content = PaymentPage(
onBack: (_) => provider.goBackFromPayment(),
);
break;
case PayoutDestination.settings:
content = ProfileSettingsPage();
break;
case PayoutDestination.reports:
content = OperationHistoryPage();
break;
case PayoutDestination.methods:
content = PaymentConfigPage(
onWalletTap: provider.selectWallet,
);
break;
case PayoutDestination.editwallet:
final wallet = provider.walletsProvider?.selectedWallet;
content = wallet != null
? WalletEditPage(
onBack: provider.goBackFromWalletEdit,
)
: Center(child: Text(loc.noWalletSelected));
break;
default:
content = Text(selected.name);
if (provider.selected != safeSelected) {
WidgetsBinding.instance.addPostFrameCallback((_) => provider.selectPage(safeSelected));
}
return Scaffold(
appBar: PayoutAppBar(
title: Text(selected.localizedLabel(context)),
title: Text(safeSelected.localizedLabel(context)),
onAddFundsPressed: () {},
onLogout: () => _logout(context),
onLogout: () => _handleLogout(context),
),
body: Padding(
padding: const EdgeInsets.only(left: 200, top: 40, right: 200),
@@ -126,11 +73,15 @@ class PageSelector extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start,
children: [
PayoutSidebar(
selected: selected,
onSelected: provider.selectPage,
onLogout: () => _logout(context),
selected: safeSelected,
onSelected: (destination) => _goToDestination(context, destination),
onLogout: () => _handleLogout(context),
userName: account?.name,
items: permissions.isRecipient
? const [PayoutDestination.settings, PayoutDestination.methods]
: null,
),
Expanded(child: content),
Expanded(child: child),
],
),
),