import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:sendtrain/daos/activities_dao.dart'; import 'package:sendtrain/daos/media_items_dao.dart'; import 'package:sendtrain/database/database.dart'; import 'package:sendtrain/extensions/string_extensions.dart'; import 'package:sendtrain/helpers/date_time_helpers.dart'; import 'package:sendtrain/helpers/media_helpers.dart'; import 'package:sendtrain/models/activity_timer_model.dart'; import 'package:sendtrain/widgets/activities/activity_view.dart'; import 'package:sendtrain/widgets/builders/dialogs.dart'; import 'package:sendtrain/widgets/generic/elements/card_image.dart'; import 'package:sendtrain/widgets/generic/elements/generic_progress_indicator.dart'; class ActivityCard extends StatefulWidget { final Activity activity; final Function? callback; const ActivityCard({super.key, required this.activity, this.callback}); @override State createState() => ActivityCardState(); } class ActivityCardState extends State { @override Widget build(BuildContext context) { final ActivityTimerModel atm = Provider.of(context); return FutureBuilder>( future: MediaItemsDao(Provider.of(context)) .fromActivity(widget.activity), builder: (context, snapshot) { if (snapshot.hasData) { List mediaItems = snapshot.data!; return Card.outlined( color: atm.activity?.id == widget.activity.id ? Theme.of(context).colorScheme.primaryContainer : Theme.of(context).colorScheme.surfaceContainerLow, clipBehavior: Clip.hardEdge, child: InkWell( onTap: () => showGenericDialog( ActivityView(activity: widget.activity), context), child: Column( mainAxisSize: MainAxisSize.min, children: [ ListTile( leading: CardImage( image: findMediaByType(mediaItems, MediaType.image)), title: Consumer( builder: (context, atm, child) { if (atm.activity?.id == widget.activity.id) { return Text( maxLines: 1, "${widget.activity.title.toTitleCase()} (${formattedTime(atm.totalTime)})"); } else { return Text( maxLines: 1, widget.activity.title.toTitleCase()); } }, ), subtitle: Text(maxLines: 2, widget.activity.description), contentPadding: EdgeInsets.only(left: 13), trailing: Flex( direction: Axis.vertical, mainAxisSize: MainAxisSize.max, children: [ IconButton( padding: EdgeInsets.all(0), alignment: Alignment.topCenter, visualDensity: VisualDensity.compact, icon: Icon(Icons.close_rounded), onPressed: () { showRemovalDialog( 'Activity Removal', 'Would you like to permanently remove this activity from the current session?', context, () { ActivitiesDao(Provider.of( context, listen: false)) .remove(widget.activity); }).then((result) { setState(() {}); }); }, ) ])), ], )), ); } else { return GenericProgressIndicator(); } }); } }