feat: integrate bank account addition with user input for bank name and success notification
This commit is contained in:
@@ -37,6 +37,7 @@ class BankAccountCubit extends Cubit<BankAccountState> {
|
||||
}
|
||||
|
||||
Future<void> addAccount({
|
||||
required String bankName,
|
||||
required String routingNumber,
|
||||
required String accountNumber,
|
||||
required String type,
|
||||
@@ -47,7 +48,7 @@ class BankAccountCubit extends Cubit<BankAccountState> {
|
||||
final BankAccount newAccount = BankAccount(
|
||||
id: '', // Generated by server usually
|
||||
userId: '', // Handled by Repo/Auth
|
||||
bankName: 'New Bank', // Mock
|
||||
bankName: bankName,
|
||||
accountNumber: accountNumber,
|
||||
accountName: '',
|
||||
sortCode: routingNumber,
|
||||
@@ -63,6 +64,7 @@ class BankAccountCubit extends Cubit<BankAccountState> {
|
||||
await loadAccounts();
|
||||
|
||||
emit(state.copyWith(
|
||||
status: BankAccountStatus.accountAdded,
|
||||
showForm: false, // Close form on success
|
||||
));
|
||||
} catch (e) {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import 'package:equatable/equatable.dart';
|
||||
import 'package:krow_domain/krow_domain.dart';
|
||||
|
||||
enum BankAccountStatus { initial, loading, loaded, error }
|
||||
enum BankAccountStatus { initial, loading, loaded, error, accountAdded }
|
||||
|
||||
class BankAccountState extends Equatable {
|
||||
final BankAccountStatus status;
|
||||
|
||||
@@ -44,8 +44,23 @@ class BankAccountPage extends StatelessWidget {
|
||||
child: Container(color: UiColors.border, height: 1.0),
|
||||
),
|
||||
),
|
||||
body: BlocBuilder<BankAccountCubit, BankAccountState>(
|
||||
body: BlocConsumer<BankAccountCubit, BankAccountState>(
|
||||
bloc: cubit,
|
||||
listener: (BuildContext context, BankAccountState state) {
|
||||
if (state.status == BankAccountStatus.accountAdded) {
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(
|
||||
content: Text(
|
||||
strings.account_added_success,
|
||||
style: UiTypography.body2r.textPrimary,
|
||||
),
|
||||
backgroundColor: UiColors.tagSuccess,
|
||||
behavior: SnackBarBehavior.floating,
|
||||
duration: const Duration(seconds: 3),
|
||||
),
|
||||
);
|
||||
}
|
||||
},
|
||||
builder: (BuildContext context, BankAccountState state) {
|
||||
if (state.status == BankAccountStatus.loading && state.accounts.isEmpty) {
|
||||
return const Center(child: CircularProgressIndicator());
|
||||
@@ -96,8 +111,9 @@ class BankAccountPage extends StatelessWidget {
|
||||
backgroundColor: Colors.transparent,
|
||||
child: AddAccountForm(
|
||||
strings: strings,
|
||||
onSubmit: (String routing, String account, String type) {
|
||||
onSubmit: (String bankName, String routing, String account, String type) {
|
||||
cubit.addAccount(
|
||||
bankName: bankName,
|
||||
routingNumber: routing,
|
||||
accountNumber: account,
|
||||
type: type,
|
||||
|
||||
@@ -5,7 +5,7 @@ import '../blocs/bank_account_cubit.dart';
|
||||
|
||||
class AddAccountForm extends StatefulWidget {
|
||||
final dynamic strings;
|
||||
final Function(String routing, String account, String type) onSubmit;
|
||||
final Function(String bankName, String routing, String account, String type) onSubmit;
|
||||
final VoidCallback onCancel;
|
||||
|
||||
const AddAccountForm({super.key, required this.strings, required this.onSubmit, required this.onCancel});
|
||||
@@ -15,12 +15,14 @@ class AddAccountForm extends StatefulWidget {
|
||||
}
|
||||
|
||||
class _AddAccountFormState extends State<AddAccountForm> {
|
||||
final TextEditingController _bankNameController = TextEditingController();
|
||||
final TextEditingController _routingController = TextEditingController();
|
||||
final TextEditingController _accountController = TextEditingController();
|
||||
String _selectedType = 'CHECKING';
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
_bankNameController.dispose();
|
||||
_routingController.dispose();
|
||||
_accountController.dispose();
|
||||
super.dispose();
|
||||
@@ -44,6 +46,13 @@ class _AddAccountFormState extends State<AddAccountForm> {
|
||||
style: UiTypography.headline4m.copyWith(color: UiColors.textPrimary), // Was header4
|
||||
),
|
||||
const SizedBox(height: UiConstants.space4),
|
||||
UiTextField(
|
||||
label: widget.strings.bank_name,
|
||||
hintText: widget.strings.bank_hint,
|
||||
controller: _bankNameController,
|
||||
keyboardType: TextInputType.text,
|
||||
),
|
||||
const SizedBox(height: UiConstants.space4),
|
||||
UiTextField(
|
||||
label: widget.strings.routing_number,
|
||||
hintText: widget.strings.routing_hint,
|
||||
@@ -90,6 +99,7 @@ class _AddAccountFormState extends State<AddAccountForm> {
|
||||
text: widget.strings.save,
|
||||
onPressed: () {
|
||||
widget.onSubmit(
|
||||
_bankNameController.text,
|
||||
_routingController.text,
|
||||
_accountController.text,
|
||||
_selectedType,
|
||||
|
||||
Reference in New Issue
Block a user