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/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; const ActivityCard({super.key, required this.activity}); @override State createState() => ActivityCardState(); } class ActivityCardState extends State { String formattedTime(int timeInSecond) { int sec = timeInSecond % 60; int min = (timeInSecond / 60).floor(); String minute = min.toString().length <= 1 ? "0$min" : "$min"; String second = sec.toString().length <= 1 ? "0$sec" : "$sec"; return "$minute:$second"; } @override Widget build(BuildContext context) { final ActivityTimerModel atm = Provider.of(context, listen: false); return FutureBuilder>( future: MediaItemsDao(Provider.of(context)) .fromActivity(widget.activity), builder: (context, snapshot) { if (snapshot.hasData) { List mediaItems = snapshot.data!; return Card( 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( // visualDensity: VisualDensity(horizontal: VisualDensity.maximumDensity), leading: CardImage( image: findMediaByType(mediaItems, '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)), widget.activity) .then((result) { setState(() {}); }); }, ) ])), ], )), ); } else { return GenericProgressIndicator(); } }); } }