diff --git a/lib/ui/document/document_list_item.dart b/lib/ui/document/document_list_item.dart index f33549a32..e741df110 100644 --- a/lib/ui/document/document_list_item.dart +++ b/lib/ui/document/document_list_item.dart @@ -3,11 +3,13 @@ import 'package:flutter/material.dart'; // Package imports: import 'package:flutter_redux/flutter_redux.dart'; +import 'package:invoiceninja_flutter/constants.dart'; // Project imports: import 'package:invoiceninja_flutter/data/models/models.dart'; import 'package:invoiceninja_flutter/redux/app/app_actions.dart'; import 'package:invoiceninja_flutter/redux/app/app_state.dart'; +import 'package:invoiceninja_flutter/ui/app/actions_menu_button.dart'; import 'package:invoiceninja_flutter/ui/app/dismissible_entity.dart'; import 'package:invoiceninja_flutter/ui/app/entity_state_label.dart'; import 'package:invoiceninja_flutter/utils/formatting.dart'; @@ -38,7 +40,8 @@ class DocumentListItem extends StatelessWidget { @override Widget build(BuildContext context) { final store = StoreProvider.of(context); - final uiState = store.state.uiState; + final state = store.state; + final uiState = state.uiState; final documentUIState = uiState.documentUIState; final filterMatch = filter != null && filter.isNotEmpty ? document.matchesFilterValue(filter) @@ -56,62 +59,132 @@ class DocumentListItem extends StatelessWidget { : documentUIState.selectedId), userCompany: userCompany, entity: document, - child: ListTile( - onTap: () => onTap != null ? onTap() : selectEntity(entity: document), - onLongPress: () => onLongPress != null - ? onLongPress() - : selectEntity(entity: document, longPress: true), - leading: showCheckbox - ? IgnorePointer( - ignoring: listUIState.isInMultiselect(), - child: Checkbox( - value: isChecked, - materialTapTargetSize: MaterialTapTargetSize.shrinkWrap, - onChanged: (value) => onCheckboxChanged(value), - activeColor: Theme.of(context).colorScheme.secondary, + child: LayoutBuilder(builder: (context, constraints) { + return constraints.maxWidth > kTableListWidthCutoff + ? InkWell( + onTap: () => + onTap != null ? onTap() : selectEntity(entity: document), + onLongPress: () => onLongPress != null + ? onLongPress() + : selectEntity(entity: document, longPress: true), + child: Padding( + padding: const EdgeInsets.only( + left: 10, + right: 28, + top: 4, + bottom: 4, + ), + child: Row( + children: [ + Padding( + padding: const EdgeInsets.only(right: 16), + child: showCheckbox + ? IgnorePointer( + ignoring: listUIState.isInMultiselect(), + child: Checkbox( + value: isChecked, + materialTapTargetSize: + MaterialTapTargetSize.shrinkWrap, + onChanged: (value) => + onCheckboxChanged(value), + activeColor: + Theme.of(context).colorScheme.secondary, + ), + ) + : ActionMenuButton( + entityActions: document.getActions( + userCompany: state.userCompany, + includeEdit: true, + ), + isSaving: false, + entity: document, + onSelected: (context, action) => + handleEntityAction(document, action), + )), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + document.name, + style: Theme.of(context).textTheme.titleMedium, + ), + Text( + formatDate( + convertTimestampToDateString( + document.createdAt), + context), + style: Theme.of(context).textTheme.bodySmall, + ), + ], + ), + ), + Text(document.prettySize, + style: Theme.of(context).textTheme.titleMedium), + ], + ), ), ) - : null, - title: Container( - width: MediaQuery.of(context).size.width, - child: Row( - children: [ - Expanded( - child: Column( + : ListTile( + onTap: () => + onTap != null ? onTap() : selectEntity(entity: document), + onLongPress: () => onLongPress != null + ? onLongPress() + : selectEntity(entity: document, longPress: true), + leading: showCheckbox + ? IgnorePointer( + ignoring: listUIState.isInMultiselect(), + child: Checkbox( + value: isChecked, + materialTapTargetSize: + MaterialTapTargetSize.shrinkWrap, + onChanged: (value) => onCheckboxChanged(value), + activeColor: Theme.of(context).colorScheme.secondary, + ), + ) + : null, + title: Container( + width: MediaQuery.of(context).size.width, + child: Row( + children: [ + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + document.name, + style: Theme.of(context).textTheme.titleMedium, + ), + Text( + formatDate( + convertTimestampToDateString( + document.createdAt), + context), + style: Theme.of(context).textTheme.bodySmall, + ), + ], + ), + ), + Text(document.prettySize, + style: Theme.of(context).textTheme.titleMedium), + ], + ), + ), + subtitle: Column( crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - document.name, - style: Theme.of(context).textTheme.titleMedium, - ), - Text( - formatDate( - convertTimestampToDateString(document.createdAt), - context), - style: Theme.of(context).textTheme.bodySmall, - ), + children: [ + subtitle != null && subtitle.isNotEmpty + ? Text( + subtitle, + maxLines: 3, + overflow: TextOverflow.ellipsis, + ) + : Container(), + EntityStateLabel(document), ], ), - ), - Text(document.prettySize, - style: Theme.of(context).textTheme.titleMedium), - ], - ), - ), - subtitle: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - subtitle != null && subtitle.isNotEmpty - ? Text( - subtitle, - maxLines: 3, - overflow: TextOverflow.ellipsis, - ) - : Container(), - EntityStateLabel(document), - ], - ), - ), + ); + }), ); } }