Multiple Wallet support, history of each wallet and updated payment page

This commit is contained in:
Arseni
2025-11-21 19:22:23 +03:00
parent 4c64a8d6e6
commit 87636a7ec3
68 changed files with 2154 additions and 701 deletions

View File

@@ -0,0 +1,37 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:pweb/pages/payout_page/wallet/edit/buttons/send.dart';
import 'package:pweb/pages/payout_page/wallet/edit/buttons/top_up.dart';
import 'package:pweb/providers/wallets.dart';
class ButtonsWalletWidget extends StatelessWidget {
const ButtonsWalletWidget({super.key});
@override
Widget build(BuildContext context) {
final provider = context.watch<WalletsProvider>();
final wallet = provider.wallets?.first;
if (wallet == null) return const SizedBox.shrink();
return Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
Expanded(
child: SendPayoutButton(),
),
VerticalDivider(
color: Theme.of(context).colorScheme.primary,
thickness: 1,
width: 10,
),
Expanded(
child: TopUpButton(),
),
],
);
}
}

View File

@@ -0,0 +1,52 @@
import 'package:flutter/material.dart';
import 'package:pweb/models/wallet.dart';
import 'package:pweb/utils/dimensions.dart';
class SaveWalletButton extends StatelessWidget {
final Wallet wallet;
final TextEditingController nameController;
final TextEditingController balanceController;
final VoidCallback onSave; // Changed to VoidCallback
const SaveWalletButton({
super.key,
required this.wallet,
required this.nameController,
required this.balanceController,
required this.onSave, // Now matches _saveWallet signature
});
@override
Widget build(BuildContext context) {
final theme = Theme.of(context);
final dimensions = AppDimensions();
return Center(
child: SizedBox(
width: dimensions.buttonWidth,
height: dimensions.buttonHeight,
child: InkWell(
borderRadius: BorderRadius.circular(dimensions.borderRadiusSmall),
onTap: onSave, // Directly use onSave now
child: Container(
decoration: BoxDecoration(
color: theme.colorScheme.primary,
borderRadius: BorderRadius.circular(dimensions.borderRadiusSmall),
),
child: Center(
child: Text(
'Save',
style: theme.textTheme.bodyLarge?.copyWith(
color: theme.colorScheme.onSecondary,
fontWeight: FontWeight.w600,
),
),
),
),
),
),
);
}
}

View File

@@ -0,0 +1,29 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:pweb/providers/page_selector.dart';
import 'package:pweb/providers/wallets.dart';
class SendPayoutButton extends StatelessWidget {
const SendPayoutButton({super.key});
@override
Widget build(BuildContext context) {
return ElevatedButton(
style: ElevatedButton.styleFrom(
shadowColor: null,
elevation: 0,
),
onPressed: () {
final pageSelectorProvider = context.read<PageSelectorProvider>();
final walletsProvider = context.read<WalletsProvider>();
final wallet = walletsProvider.selectedWallet;
if (wallet != null) {
pageSelectorProvider.startPaymentFromWallet(wallet);
}
},
child: Text('Send Payout'),
);
}
}

View File

@@ -0,0 +1,22 @@
import 'package:flutter/material.dart';
class TopUpButton extends StatelessWidget{
const TopUpButton({super.key});
@override
Widget build(BuildContext context) {
return ElevatedButton(
style: ElevatedButton.styleFrom(
shadowColor: null,
elevation: 0,
),
onPressed: () {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('Add functionality')),
);
},
child: Text('Top Up Balance'),
);
}
}