Don’t allow sliding items in invoice item selector

This commit is contained in:
Hillel Coren 2020-12-03 22:44:17 +02:00
parent f5a9cda3d1
commit f4ece89579
5 changed files with 49 additions and 26 deletions

View File

@ -15,6 +15,7 @@ class DismissibleEntity extends StatelessWidget {
@required this.child,
@required this.isSelected,
this.showCheckbox = true,
this.isDismissible = true,
});
final UserCompanyEntity userCompany;
@ -22,6 +23,7 @@ class DismissibleEntity extends StatelessWidget {
final Widget child;
final bool isSelected;
final bool showCheckbox;
final bool isDismissible;
@override
Widget build(BuildContext context) {
@ -34,6 +36,23 @@ class DismissibleEntity extends StatelessWidget {
final isMultiselect =
store.state.getListState(entity.entityType).isInMultiselect();
final widget = SelectedIndicator(
isSelected: isSelected &&
showCheckbox &&
!isMultiselect &&
!entity.entityType.isSetting,
child: ConstrainedBox(
constraints: BoxConstraints(
minHeight: 60,
),
child: child,
),
);
if (!isDismissible) {
return widget;
}
return Slidable(
actionPane: SlidableDrawerActionPane(),
key: Key('__${entity.entityKey}_${entity.entityState}__'),
@ -91,18 +110,7 @@ class DismissibleEntity extends StatelessWidget {
handleEntityAction(context, entity, EntityAction.delete),
),
],
child: SelectedIndicator(
isSelected: isSelected &&
showCheckbox &&
!isMultiselect &&
!entity.entityType.isSetting,
child: ConstrainedBox(
constraints: BoxConstraints(
minHeight: 60,
),
child: child,
),
),
child: widget,
);
}
}

View File

@ -21,6 +21,7 @@ class ExpenseListItem extends StatelessWidget {
this.onLongPress,
this.onCheckboxChanged,
this.isChecked = false,
this.isDismissible = true,
});
final UserEntity user;
@ -30,6 +31,7 @@ class ExpenseListItem extends StatelessWidget {
final String filter;
final Function(bool) onCheckboxChanged;
final bool isChecked;
final bool isDismissible;
@override
Widget build(BuildContext context) {
@ -74,6 +76,7 @@ class ExpenseListItem extends StatelessWidget {
}
return DismissibleEntity(
isDismissible: isDismissible,
isSelected: isDesktop(context) &&
expense.id ==
(uiState.isEditing

View File

@ -204,6 +204,7 @@ class _InvoiceItemSelectorState extends State<InvoiceItemSelector>
final String entityId = matches[index];
final product = state.productState.map[entityId];
return ProductListItem(
isDismissible: false,
onCheckboxChanged: (checked) => _toggleEntity(product),
isChecked: _selected.contains(product),
product: product,
@ -244,6 +245,7 @@ class _InvoiceItemSelectorState extends State<InvoiceItemSelector>
final String entityId = matches[index];
final task = state.taskState.map[entityId];
return TaskListItem(
isDismissible: false,
user: state.user,
onCheckboxChanged: (checked) => _toggleEntity(task),
isChecked: _selected.contains(task),
@ -280,6 +282,7 @@ class _InvoiceItemSelectorState extends State<InvoiceItemSelector>
final String entityId = matches[index];
final expense = state.expenseState.map[entityId] ?? ExpenseEntity();
return ExpenseListItem(
isDismissible: false,
user: state.user,
onCheckboxChanged: (checked) => _toggleEntity(expense),
isChecked: _selected.contains(expense),

View File

@ -20,6 +20,7 @@ class ProductListItem extends StatelessWidget {
this.onLongPress,
this.onCheckboxChanged,
this.isChecked = false,
this.isDismissible = true,
});
final UserCompanyEntity userCompany;
@ -27,6 +28,7 @@ class ProductListItem extends StatelessWidget {
final GestureTapCallback onLongPress;
final Function(bool) onCheckboxChanged;
final bool isChecked;
final bool isDismissible;
//final ValueChanged<bool> onCheckboxChanged;
final ProductEntity product;
@ -48,6 +50,7 @@ class ProductListItem extends StatelessWidget {
final textStyle = TextStyle(fontSize: 16);
return DismissibleEntity(
isDismissible: isDismissible,
isSelected: isDesktop(context) &&
product.id ==
(uiState.isEditing

View File

@ -24,6 +24,7 @@ class TaskListItem extends StatelessWidget {
this.onLongPress,
this.onCheckboxChanged,
this.isChecked = false,
this.isDismissible = true,
});
final UserEntity user;
@ -33,6 +34,7 @@ class TaskListItem extends StatelessWidget {
final String filter;
final Function(bool) onCheckboxChanged;
final bool isChecked;
final bool isDismissible;
@override
Widget build(BuildContext context) {
@ -57,22 +59,26 @@ class TaskListItem extends StatelessWidget {
formatNumberType: FormatNumberType.duration);
}, style: textStyle);
final startStopButton = IconButton(
icon: task.isInvoiced
? SizedBox()
: Icon(
getEntityActionIcon(
task.isRunning ? EntityAction.stop : EntityAction.start),
color: task.isRunning ? state.accentColor : null,
),
onPressed: task.isInvoiced
? null
: () => handleEntityAction(context, task,
task.isRunning ? EntityAction.stop : EntityAction.start),
visualDensity: VisualDensity.compact,
);
final startStopButton = !isDismissible
? SizedBox()
: IconButton(
icon: task.isInvoiced
? SizedBox()
: Icon(
getEntityActionIcon(task.isRunning
? EntityAction.stop
: EntityAction.start),
color: task.isRunning ? state.accentColor : null,
),
onPressed: task.isInvoiced
? null
: () => handleEntityAction(context, task,
task.isRunning ? EntityAction.stop : EntityAction.start),
visualDensity: VisualDensity.compact,
);
return DismissibleEntity(
isDismissible: isDismissible,
isSelected: isDesktop(context) &&
task.id ==
(uiState.isEditing