Fix for showing list items as selected

This commit is contained in:
Hillel Coren 2023-02-07 15:35:16 +02:00
parent 34389eea27
commit 19a34900bc
9 changed files with 49 additions and 33 deletions

View File

@ -120,6 +120,7 @@ class InvoiceSidebar extends StatelessWidget {
itemBuilder: (BuildContext context, int index) {
return InvoiceListItem(
invoice: upcomingInvoices[index],
showSelected: false,
);
},
separatorBuilder: (context, index) => ListDivider(),
@ -133,6 +134,7 @@ class InvoiceSidebar extends StatelessWidget {
itemBuilder: (BuildContext context, int index) {
return InvoiceListItem(
invoice: pastDueInvoices[index],
showSelected: false,
);
},
separatorBuilder: (context, index) => ListDivider(),
@ -150,6 +152,7 @@ class InvoiceSidebar extends StatelessWidget {
? SizedBox()
: InvoiceListItem(
invoice: invoice,
showSelected: false,
);
},
separatorBuilder: (context, index) => ListDivider(),
@ -184,7 +187,7 @@ class PaymentSidebar extends StatelessWidget {
itemBuilder: (BuildContext context, int index) {
return PaymentListItem(
payment: recentPayments[index],
showCheck: false,
showSelected: false,
);
},
separatorBuilder: (context, index) => ListDivider(),
@ -202,7 +205,7 @@ class PaymentSidebar extends StatelessWidget {
? SizedBox()
: PaymentListItem(
payment: payment,
showCheck: false,
showSelected: false,
);
},
separatorBuilder: (context, index) => ListDivider(),
@ -388,6 +391,7 @@ class ExpenseSidbar extends StatelessWidget {
return ExpenseListItem(
expense: upcomingExpenses[index],
showCheckbox: false,
showSelected: false,
);
},
separatorBuilder: (context, index) => ListDivider(),
@ -402,7 +406,8 @@ class ExpenseSidbar extends StatelessWidget {
itemBuilder: (BuildContext context, int index) {
return ExpenseListItem(
expense: recentExpenses[index],
showCheck: false,
showCheckbox: false,
showSelected: false,
);
},
separatorBuilder: (context, index) => ListDivider(),
@ -420,7 +425,8 @@ class ExpenseSidbar extends StatelessWidget {
? SizedBox()
: ExpenseListItem(
expense: expense,
showCheck: false,
showCheckbox: false,
showSelected: false,
);
},
separatorBuilder: (context, index) => ListDivider(),

View File

@ -25,18 +25,20 @@ class ExpenseListItem extends StatelessWidget {
this.filter,
this.onTap,
this.onCheckboxChanged,
this.showCheck = false,
this.showCheckbox = false,
this.isDismissible = true,
this.isChecked = false,
this.showSelected = true,
});
final Function(bool) onCheckboxChanged;
final GestureTapCallback onTap;
final ExpenseEntity expense;
final String filter;
final bool showCheck;
final bool showCheckbox;
final bool isDismissible;
final bool isChecked;
final bool showSelected;
@override
Widget build(BuildContext context) {
@ -75,10 +77,10 @@ class ExpenseListItem extends StatelessWidget {
}
return DismissibleEntity(
showMultiselect: showCheck,
showMultiselect: showSelected,
isDismissible: isDismissible,
isSelected: isDesktop(context) &&
!showCheck &&
showSelected &&
expense.id ==
(uiState.isEditing
? expenseUIState.editing.id
@ -105,7 +107,7 @@ class ExpenseListItem extends StatelessWidget {
children: <Widget>[
Padding(
padding: const EdgeInsets.only(right: 16),
child: showCheck
child: showCheckbox
? Padding(
padding: const EdgeInsets.only(right: 20),
child: IgnorePointer(
@ -188,7 +190,7 @@ class ExpenseListItem extends StatelessWidget {
onLongPress: () => onTap != null
? null
: selectEntity(entity: expense, longPress: true),
leading: showCheck
leading: showCheckbox
? IgnorePointer(
child: Checkbox(
value: isChecked,

View File

@ -50,7 +50,7 @@ class ExpenseListBuilder extends StatelessWidget {
filter: viewModel.filter,
expense: expense,
isChecked: listUIState.isSelected(expense.id),
showCheck: listUIState.isInMultiselect(),
showCheckbox: listUIState.isInMultiselect(),
);
});
},

View File

@ -237,6 +237,7 @@ class _InvoiceItemSelectorState extends State<InvoiceItemSelector>
final expense = state.expenseState.map[entityId] ?? ExpenseEntity();
return ExpenseListItem(
isDismissible: false,
showSelected: false,
onCheckboxChanged: (checked) => _toggleEntity(expense),
isChecked: _selected.contains(expense),
expense: expense,

View File

@ -22,16 +22,18 @@ class InvoiceListItem extends StatelessWidget {
const InvoiceListItem({
@required this.invoice,
this.filter,
this.showCheck = false,
this.isChecked = false,
this.onTap,
this.isChecked = false,
this.showCheckbox = false,
this.showSelected = true,
});
final InvoiceEntity invoice;
final String filter;
final bool showCheck;
final bool showCheckbox;
final bool isChecked;
final Function onTap;
final bool showSelected;
@override
Widget build(BuildContext context) {
@ -71,12 +73,12 @@ class InvoiceListItem extends StatelessWidget {
return DismissibleEntity(
isSelected: isDesktop(context) &&
!showCheck &&
showSelected &&
invoice.id ==
(uiState.isEditing
? invoiceUIState.editing.id
: invoiceUIState.selectedId),
showMultiselect: showCheck,
showMultiselect: showSelected,
userCompany: state.userCompany,
entity: invoice,
child: LayoutBuilder(
@ -87,7 +89,7 @@ class InvoiceListItem extends StatelessWidget {
? onTap()
: selectEntity(
entity: invoice,
forceView: !showCheck,
forceView: !showCheckbox,
),
onLongPress: () => onTap != null
? null
@ -103,7 +105,7 @@ class InvoiceListItem extends StatelessWidget {
children: <Widget>[
Padding(
padding: const EdgeInsets.only(right: 16),
child: showCheck
child: showCheckbox
? IgnorePointer(
child: Checkbox(
value: isChecked,
@ -188,11 +190,11 @@ class InvoiceListItem extends StatelessWidget {
: ListTile(
onTap: () => onTap != null
? onTap()
: selectEntity(entity: invoice, forceView: !showCheck),
: selectEntity(entity: invoice, forceView: !showCheckbox),
onLongPress: () => onTap != null
? null
: selectEntity(entity: invoice, longPress: true),
leading: showCheck
leading: showCheckbox
? IgnorePointer(
child: Checkbox(
value: isChecked,

View File

@ -49,7 +49,7 @@ class InvoiceListBuilder extends StatelessWidget {
return InvoiceListItem(
filter: viewModel.filter,
invoice: invoice,
showCheck: invoiceListState.isInMultiselect(),
showCheckbox: invoiceListState.isInMultiselect(),
isChecked: invoiceListState.isSelected(invoice.id),
);
});

View File

@ -22,16 +22,18 @@ class PaymentListItem extends StatelessWidget {
const PaymentListItem({
@required this.payment,
this.filter,
this.showCheck = false,
this.showCheckbox = false,
this.isChecked = false,
this.onTap,
this.showSelected = true,
});
final PaymentEntity payment;
final String filter;
final bool showCheck;
final bool showCheckbox;
final bool isChecked;
final Function onTap;
final bool showSelected;
@override
Widget build(BuildContext context) {
@ -62,12 +64,12 @@ class PaymentListItem extends StatelessWidget {
return DismissibleEntity(
isSelected: isDesktop(context) &&
!showCheck &&
showSelected &&
payment.id ==
(uiState.isEditing
? paymentUIState.editing.id
: paymentUIState.selectedId),
showMultiselect: showCheck,
showMultiselect: showSelected,
userCompany: state.userCompany,
entity: payment,
child: LayoutBuilder(
@ -76,7 +78,7 @@ class PaymentListItem extends StatelessWidget {
? InkWell(
onTap: () => onTap != null
? onTap()
: selectEntity(entity: payment, forceView: !showCheck),
: selectEntity(entity: payment, forceView: !showCheckbox),
onLongPress: () => onTap != null
? null
: selectEntity(entity: payment, longPress: true),
@ -91,7 +93,7 @@ class PaymentListItem extends StatelessWidget {
children: <Widget>[
Padding(
padding: const EdgeInsets.only(right: 16),
child: showCheck
child: showCheckbox
? IgnorePointer(
child: Checkbox(
value: isChecked,
@ -164,11 +166,11 @@ class PaymentListItem extends StatelessWidget {
: ListTile(
onTap: () => onTap != null
? onTap()
: selectEntity(entity: payment, forceView: !showCheck),
: selectEntity(entity: payment, forceView: !showCheckbox),
onLongPress: () => onTap != null
? null
: selectEntity(entity: payment, longPress: true),
leading: showCheck
leading: showCheckbox
? IgnorePointer(
child: Checkbox(
value: isChecked,

View File

@ -49,7 +49,7 @@ class PaymentListBuilder extends StatelessWidget {
return PaymentListItem(
filter: viewModel.filter,
payment: payment,
showCheck: paymentListState.isInMultiselect(),
showCheckbox: paymentListState.isInMultiselect(),
isChecked: paymentListState.isSelected(payment.id),
);
});

View File

@ -539,7 +539,8 @@ class _MatchDepositsState extends State<_MatchDeposits> {
final payment = _payments[index];
return PaymentListItem(
payment: payment,
showCheck: true,
showCheckbox: true,
showSelected: false,
isChecked: (_selectedPayment?.id ?? '') == payment.id,
onTap: () => setState(() {
if ((_selectedPayment?.id ?? '') == payment.id) {
@ -567,7 +568,8 @@ class _MatchDepositsState extends State<_MatchDeposits> {
final invoice = _invoices[index];
return InvoiceListItem(
invoice: invoice,
showCheck: true,
showCheckbox: true,
showSelected: false,
isChecked: _selectedInvoices.contains(invoice),
onTap: () => setState(() {
if (_selectedInvoices.contains(invoice)) {
@ -1020,7 +1022,8 @@ class _MatchWithdrawalsState extends State<_MatchWithdrawals> {
final expense = _expenses[index];
return ExpenseListItem(
expense: expense,
showCheck: true,
showCheckbox: true,
showSelected: false,
isChecked: _selectedExpense?.id == expense.id,
onTap: () => setState(() {
if (_selectedExpense?.id == expense.id) {