import 'package:flutter_redux/flutter_redux.dart'; import 'package:invoiceninja_flutter/data/models/user_model.dart'; import 'package:invoiceninja_flutter/redux/app/app_state.dart'; import 'package:invoiceninja_flutter/ui/app/entity_state_label.dart'; import 'package:invoiceninja_flutter/utils/formatting.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:invoiceninja_flutter/data/models/models.dart'; import 'package:invoiceninja_flutter/ui/app/dismissible_entity.dart'; class UserListItem extends StatelessWidget { const UserListItem({ @required this.user, @required this.onEntityAction, @required this.onTap, @required this.onLongPress, @required this.filter, this.onCheckboxChanged, this.isChecked = false, }); final UserEntity user; final Function(EntityAction) onEntityAction; final GestureTapCallback onTap; final GestureTapCallback onLongPress; final String filter; final Function(bool) onCheckboxChanged; final bool isChecked; static final userItemKey = (int id) => Key('__user_item_${id}__'); @override Widget build(BuildContext context) { final store = StoreProvider.of(context); final state = store.state; final uiState = state.uiState; final userUIState = uiState.userUIState; final listUIState = userUIState.listUIState; final isInMultiselect = listUIState.isInMultiselect(); final showCheckbox = onCheckboxChanged != null || isInMultiselect; final filterMatch = filter != null && filter.isNotEmpty ? user.matchesFilterValue(filter) : user.email; final subtitle = filterMatch; return DismissibleEntity( userCompany: state.userCompany, entity: user, isSelected: user.id == (uiState.isEditing ? userUIState.editing.id : userUIState.selectedId), onEntityAction: onEntityAction, child: ListTile( onTap: isInMultiselect ? () => onEntityAction(EntityAction.toggleMultiselect) : onTap, onLongPress: onLongPress, leading: showCheckbox ? IgnorePointer( ignoring: listUIState.isInMultiselect(), child: Checkbox( //key: NinjaKeys.userItemCheckbox(task.id), value: isChecked, materialTapTargetSize: MaterialTapTargetSize.shrinkWrap, onChanged: (value) => onCheckboxChanged(value), activeColor: Theme.of(context).accentColor, ), ) : null, title: Container( width: MediaQuery.of(context).size.width, child: Row( children: [ Expanded( child: Text( user.fullName, //key: NinjaKeys.clientItemClientKey(client.id), style: Theme.of(context).textTheme.title, ), ), Text(formatNumber(user.listDisplayAmount, context), style: Theme.of(context).textTheme.title), ], ), ), subtitle: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ subtitle != null && subtitle.isNotEmpty ? Text( subtitle, maxLines: 3, overflow: TextOverflow.ellipsis, ) : Container(), EntityStateLabel(user), ], ), ), ); } }