diff --git a/lib/ui/app/dismissible_entity.dart b/lib/ui/app/dismissible_entity.dart index ec9ddee20..6557be717 100644 --- a/lib/ui/app/dismissible_entity.dart +++ b/lib/ui/app/dismissible_entity.dart @@ -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, ); } } diff --git a/lib/ui/expense/expense_list_item.dart b/lib/ui/expense/expense_list_item.dart index dbf5cc63b..26819df38 100644 --- a/lib/ui/expense/expense_list_item.dart +++ b/lib/ui/expense/expense_list_item.dart @@ -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 diff --git a/lib/ui/invoice/edit/invoice_item_selector.dart b/lib/ui/invoice/edit/invoice_item_selector.dart index 7f7cae35a..9613a1a0e 100644 --- a/lib/ui/invoice/edit/invoice_item_selector.dart +++ b/lib/ui/invoice/edit/invoice_item_selector.dart @@ -204,6 +204,7 @@ class _InvoiceItemSelectorState extends State 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 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 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), diff --git a/lib/ui/product/product_list_item.dart b/lib/ui/product/product_list_item.dart index 856ad4181..4205b1f51 100644 --- a/lib/ui/product/product_list_item.dart +++ b/lib/ui/product/product_list_item.dart @@ -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 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 diff --git a/lib/ui/task/task_list_item.dart b/lib/ui/task/task_list_item.dart index b33205fac..bcad2a239 100644 --- a/lib/ui/task/task_list_item.dart +++ b/lib/ui/task/task_list_item.dart @@ -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