refactoring for recipient addition page
This commit is contained in:
@@ -1,16 +1,15 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:pshared/models/payment/methods/data.dart';
|
||||
import 'package:pshared/models/payment/type.dart';
|
||||
import 'package:pshared/models/recipient/status.dart';
|
||||
import 'package:pshared/models/recipient/type.dart';
|
||||
import 'package:pshared/models/payment/methods/data.dart';
|
||||
import 'package:pshared/models/recipient/payment_method_draft.dart';
|
||||
|
||||
import 'package:pweb/pages/address_book/form/method_tile.dart';
|
||||
import 'package:pweb/pages/address_book/form/widgets/button.dart';
|
||||
import 'package:pweb/pages/address_book/form/widgets/email_field.dart';
|
||||
import 'package:pweb/pages/address_book/form/widgets/feilds/email.dart';
|
||||
import 'package:pweb/pages/address_book/form/widgets/header.dart';
|
||||
import 'package:pweb/pages/address_book/form/widgets/name_field.dart';
|
||||
import 'package:pweb/utils/payment/label.dart';
|
||||
import 'package:pweb/pages/address_book/form/widgets/feilds/name.dart';
|
||||
import 'package:pweb/pages/address_book/form/widgets/payment_methods/panel.dart';
|
||||
import 'package:pweb/pages/address_book/form/widgets/payment_methods/selector_row.dart';
|
||||
import 'package:pweb/pages/address_book/form/widgets/save_button.dart';
|
||||
|
||||
import 'package:pweb/generated/i18n/app_localizations.dart';
|
||||
|
||||
@@ -19,12 +18,15 @@ class FormView extends StatelessWidget {
|
||||
final GlobalKey<FormState> formKey;
|
||||
final TextEditingController nameCtrl;
|
||||
final TextEditingController emailCtrl;
|
||||
final RecipientType type;
|
||||
final RecipientStatus status;
|
||||
final MethodMap methods;
|
||||
final ValueChanged<RecipientType> onTypeChanged;
|
||||
final ValueChanged<RecipientStatus> onStatusChanged;
|
||||
final void Function(PaymentType, PaymentMethodData?) onMethodsChanged;
|
||||
final List<PaymentType> types;
|
||||
final PaymentType selectedType;
|
||||
final int? selectedIndex;
|
||||
final Map<PaymentType, List<RecipientMethodDraft>> methods;
|
||||
final void Function(PaymentType type, int index) onMethodSelected;
|
||||
final ValueChanged<PaymentType> onMethodAdd;
|
||||
final Set<PaymentType> disabledTypes;
|
||||
final ValueChanged<int> onMethodRemove;
|
||||
final void Function(int, PaymentMethodData) onMethodChanged;
|
||||
final VoidCallback onSave;
|
||||
final bool isEditing;
|
||||
final VoidCallback onBack;
|
||||
@@ -45,16 +47,19 @@ class FormView extends StatelessWidget {
|
||||
required this.formKey,
|
||||
required this.nameCtrl,
|
||||
required this.emailCtrl,
|
||||
required this.type,
|
||||
required this.status,
|
||||
required this.types,
|
||||
required this.selectedType,
|
||||
required this.selectedIndex,
|
||||
required this.methods,
|
||||
required this.onTypeChanged,
|
||||
required this.onStatusChanged,
|
||||
required this.onMethodsChanged,
|
||||
required this.onMethodSelected,
|
||||
required this.onMethodAdd,
|
||||
this.disabledTypes = const {},
|
||||
required this.onMethodRemove,
|
||||
required this.onMethodChanged,
|
||||
required this.onSave,
|
||||
required this.isEditing,
|
||||
required this.onBack,
|
||||
this.maxWidth = 500,
|
||||
this.maxWidth = 800,
|
||||
this.elevation = 4,
|
||||
this.borderRadius = 16,
|
||||
this.padding = const EdgeInsets.all(20),
|
||||
@@ -69,6 +74,10 @@ class FormView extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final theme = Theme.of(context);
|
||||
final entries = methods[selectedType] ?? const <RecipientMethodDraft>[];
|
||||
final hasSelection = selectedIndex != null &&
|
||||
selectedIndex! >= 0 &&
|
||||
selectedIndex! < entries.length;
|
||||
|
||||
return Align(
|
||||
alignment: Alignment.topCenter,
|
||||
@@ -102,14 +111,25 @@ class FormView extends StatelessWidget {
|
||||
?.copyWith(fontWeight: FontWeight.bold),
|
||||
),
|
||||
SizedBox(height: spacingFields),
|
||||
...PaymentType.values.map(
|
||||
(p) => AddressBookPaymentMethodTile(
|
||||
type: p,
|
||||
title: getPaymentTypeLabel(context, p),
|
||||
methods: methods,
|
||||
onChanged: (data) => onMethodsChanged(p, data),
|
||||
),
|
||||
PaymentMethodSelectorRow(
|
||||
types: types,
|
||||
selectedType: selectedType,
|
||||
selectedIndex: selectedIndex,
|
||||
methods: methods,
|
||||
onSelected: onMethodSelected,
|
||||
onAdd: onMethodAdd,
|
||||
disabledTypes: disabledTypes,
|
||||
),
|
||||
if (hasSelection) ...[
|
||||
SizedBox(height: spacingFields),
|
||||
PaymentMethodPanel(
|
||||
selectedType: selectedType,
|
||||
selectedIndex: selectedIndex!,
|
||||
entries: entries,
|
||||
onRemove: onMethodRemove,
|
||||
onChanged: onMethodChanged,
|
||||
),
|
||||
],
|
||||
SizedBox(height: spacingSave),
|
||||
SaveButton(onSave: onSave),
|
||||
SizedBox(height: spacingBottom),
|
||||
@@ -122,4 +142,4 @@ class FormView extends StatelessWidget {
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user