Code refactor

This commit is contained in:
Hillel Coren 2023-11-16 13:19:00 +02:00
parent 7252bf81b5
commit 0ac19faa35
1 changed files with 17 additions and 109 deletions

View File

@ -57,8 +57,10 @@ class InvoiceEditContacts extends StatelessWidget {
return ScrollableListView( return ScrollableListView(
children: vendorContacts.map((contact) { children: vendorContacts.map((contact) {
final invitation = invoice.getInvitationForVendorContact(contact); final invitation = invoice.getInvitationForVendorContact(contact);
return _VendorContactListTile(
vendorContact: contact, return _ContactListTile(
fullName: contact.fullName,
email: contact.email,
invoice: invoice, invoice: invoice,
invitation: invitation, invitation: invitation,
onTap: () => invitation == null onTap: () => invitation == null
@ -92,8 +94,9 @@ class InvoiceEditContacts extends StatelessWidget {
showScrollbar: true, showScrollbar: true,
children: clientContacts.map((contact) { children: clientContacts.map((contact) {
final invitation = invoice.getInvitationForClientContact(contact); final invitation = invoice.getInvitationForClientContact(contact);
return _ClientContactListTile( return _ContactListTile(
clientContact: contact, fullName: contact.fullName,
email: contact.email,
invoice: invoice, invoice: invoice,
invitation: invitation, invitation: invitation,
onTap: () => invitation == null onTap: () => invitation == null
@ -106,16 +109,18 @@ class InvoiceEditContacts extends StatelessWidget {
} }
} }
class _ClientContactListTile extends StatelessWidget { class _ContactListTile extends StatelessWidget {
const _ClientContactListTile({ const _ContactListTile({
required this.clientContact, required this.fullName,
required this.email,
required this.invoice, required this.invoice,
this.invitation, this.invitation,
this.onTap, this.onTap,
}); });
final String fullName;
final String email;
final InvoiceEntity invoice; final InvoiceEntity invoice;
final ClientContactEntity clientContact;
final InvitationEntity? invitation; final InvitationEntity? invitation;
final Function? onTap; final Function? onTap;
@ -157,113 +162,16 @@ class _ClientContactListTile extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Text( Text(
clientContact.fullName.isNotEmpty fullName.isNotEmpty
? clientContact.fullName ? fullName
: AppLocalization.of(context)!.blankContact, : AppLocalization.of(context)!.blankContact,
style: Theme.of(context).textTheme.titleMedium, style: Theme.of(context).textTheme.titleMedium,
), ),
if (clientContact.email.isNotEmpty) ...[ if (email.isNotEmpty) ...[
Padding( Padding(
padding: const EdgeInsets.only(top: 4), padding: const EdgeInsets.only(top: 4),
child: Text( child: Text(
clientContact.email, email,
style: Theme.of(context).textTheme.bodySmall,
),
),
if ((invitation?.emailStatus ?? '').isNotEmpty)
Padding(
padding: const EdgeInsets.only(top: 2),
child: Text(
localization.lookup(invitation!.latestEmailStatus) +
'' +
formatDate(
invitation!.latestEmailStatusDate, context),
style: Theme.of(context).textTheme.bodySmall,
),
),
if ((invitation?.emailError ?? '').isNotEmpty &&
invitation?.emailStatus !=
InvitationEntity.EMAIL_STATUS_DELIVERED)
Padding(
padding: const EdgeInsets.only(top: 8),
child: Text(
invitation!.emailError,
style: Theme.of(context).textTheme.bodySmall,
),
),
SizedBox(height: 8),
],
],
),
),
if (!store.state.prefState.showPdfPreviewSideBySide) invitationButton,
],
),
);
}
}
class _VendorContactListTile extends StatelessWidget {
const _VendorContactListTile({
required this.vendorContact,
required this.invoice,
this.invitation,
this.onTap,
});
final InvoiceEntity invoice;
final VendorContactEntity vendorContact;
final InvitationEntity? invitation;
final Function? onTap;
@override
Widget build(BuildContext context) {
final localization = AppLocalization.of(context)!;
final store = StoreProvider.of<AppState>(context);
final invitationButton = (invitation?.link ?? '').isNotEmpty
? IconButton(
tooltip: localization.copyLink,
icon: Icon(Icons.copy),
onPressed: () {
Clipboard.setData(ClipboardData(text: invitation!.link));
showToast(localization.copiedToClipboard.replaceFirst(
':value', invitation!.link.substring(0, 40) + '...'));
},
)
: SizedBox();
return Padding(
padding: const EdgeInsets.all(10),
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Column(
children: [
Checkbox(
activeColor: Theme.of(context).colorScheme.secondary,
value: invitation != null,
onChanged: (value) => onTap!(),
),
if (store.state.prefState.showPdfPreviewSideBySide)
invitationButton,
],
),
SizedBox(width: 8),
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
vendorContact.fullName.isNotEmpty
? vendorContact.fullName
: AppLocalization.of(context)!.blankContact,
style: Theme.of(context).textTheme.titleMedium,
),
if (vendorContact.email.isNotEmpty) ...[
Padding(
padding: const EdgeInsets.only(top: 4),
child: Text(
vendorContact.email,
style: Theme.of(context).textTheme.bodySmall, style: Theme.of(context).textTheme.bodySmall,
), ),
), ),