// Flutter imports: import 'package:flutter/material.dart'; // Package imports: import 'package:flutter_redux/flutter_redux.dart'; import 'package:intl/intl.dart'; // Project imports: import 'package:invoiceninja_flutter/data/models/task_model.dart'; import 'package:invoiceninja_flutter/redux/app/app_state.dart'; import 'package:invoiceninja_flutter/redux/company/company_selectors.dart'; import 'package:invoiceninja_flutter/ui/app/live_text.dart'; import 'package:invoiceninja_flutter/utils/formatting.dart'; import 'package:invoiceninja_flutter/utils/localization.dart'; class TaskTimeListTile extends StatelessWidget { const TaskTimeListTile({ required this.task, required this.taskTime, required this.onTap, required this.isValid, }); final Function(BuildContext context) onTap; final TaskEntity task; final TaskTime? taskTime; final bool isValid; @override Widget build(BuildContext context) { final startDateString = formatDate( taskTime!.startDate!.toIso8601String(), context, showTime: true, showDate: false); final endDateString = taskTime!.endDate != null ? formatDate(taskTime!.endDate!.toIso8601String(), context, showTime: true, showDate: false) : AppLocalization.of(context)!.now; final state = StoreProvider.of(context).state; final title = DateFormat('EEE MMM d, yyy', localeSelector(state)) .format(taskTime!.startDate!.toLocal()); var subtitle = '$startDateString - $endDateString'; if (taskTime!.description.isNotEmpty) { subtitle += '\n' + taskTime!.description; } return Column( children: [ ListTile( onTap: () => onTap(context), title: Row( children: [ Expanded(child: Text(title)), LiveText(() => formatDuration(taskTime!.duration)), ], ), subtitle: Text(subtitle), trailing: Icon(isValid ? Icons.navigate_next : Icons.error), ), Divider( height: 1.0, ), ], ); } }