SendTrain/lib/widgets/sessions/session_card_full.dart
2024-12-27 20:59:48 -05:00

73 lines
2.8 KiB
Dart

import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:sendtrain/daos/sessions_dao.dart';
import 'package:sendtrain/database/database.dart';
import 'package:sendtrain/extensions/string_extensions.dart';
import 'package:sendtrain/helpers/date_helpers.dart';
import 'package:sendtrain/helpers/media_helpers.dart';
import 'package:sendtrain/widgets/builders/dialogs.dart';
import 'package:sendtrain/widgets/generic/elements/card_content.dart';
import 'package:sendtrain/widgets/generic/elements/card_image.dart';
import 'package:sendtrain/widgets/sessions/session_view.dart';
class SessionCardFull extends StatefulWidget {
const SessionCardFull(
{super.key, required this.session, required this.mediaItems});
final Session session;
final List<MediaItem> mediaItems;
@override
State<SessionCardFull> createState() => _SessionCardFullState();
}
class _SessionCardFullState extends State<SessionCardFull> {
@override
Widget build(BuildContext context) {
final Session session = widget.session;
final List<MediaItem> mediaItems = widget.mediaItems;
return Card(
color: (session.status == SessionStatus.started)
? Theme.of(context).colorScheme.primaryContainer
: Theme.of(context).colorScheme.surfaceContainerLow,
margin: const EdgeInsets.fromLTRB(15, 15, 15, 0),
clipBehavior: Clip.hardEdge,
child: InkWell(
splashColor: Colors.deepPurple,
onTap: () =>
showGenericDialog(SessionView(session: session), context),
child: Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
ListTile(
contentPadding: EdgeInsets.only(left: 8),
leading: CardImage(image: findMediaByType(mediaItems, 'image')),
title: Text(maxLines: 1, session.title.toTitleCase()),
subtitle: Text(
maxLines: 1, dateFormat.format(session.date as DateTime)),
trailing: IconButton(
padding: EdgeInsets.all(0),
alignment: Alignment.topCenter,
icon: Icon(Icons.close_rounded),
onPressed: () {
showRemovalDialog(
'Session Removal',
'Would you like to permanently remove this session?',
context,
SessionsDao(Provider.of<AppDatabase>(context,
listen: false)),
session)
.then((result) {
setState(() {});
});
},
),
),
CardContent(content: session.content)
],
)),
);
}
}