import 'package:flutter/material.dart'; import 'package:flutter_expandable_fab/flutter_expandable_fab.dart'; import 'package:intl/intl.dart'; import 'package:intl/date_symbol_data_local.dart'; import 'package:sendtrain/classes/media.dart'; import 'package:sendtrain/database.dart'; import 'package:sendtrain/models/activity_model.dart'; import 'package:sendtrain/models/session_model.dart'; import 'package:sendtrain/widgets/activity_card.dart'; import 'package:sendtrain/widgets/media_card.dart'; class SessionView extends StatelessWidget { const SessionView({super.key, required this.data, required this.session}); final SessionModel data; final Session session; @override Widget build(BuildContext context) { initializeDateFormatting('en'); final DateFormat dateFormat = DateFormat('yyyy-MM-dd'); return Scaffold( floatingActionButtonLocation: ExpandableFab.location, floatingActionButton: ExpandableFab( distance: 70, type: ExpandableFabType.up, overlayStyle: ExpandableFabOverlayStyle( color: Colors.black.withOpacity(0.5), blur: 10, ), children: [ FloatingActionButton.extended( icon: const Icon(Icons.history_outlined), label: Text('Restart'), onPressed: () {}, ), FloatingActionButton.extended( icon: const Icon(Icons.done_all_outlined), label: Text('Done'), onPressed: () {}, ), FloatingActionButton.extended( icon: const Icon(Icons.edit_outlined), label: Text('Edit'), onPressed: () {}, ), ]), body: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ AppBar( centerTitle: true, title: Text('Session @ ${dateFormat.format(session.date as DateTime)}', style: const TextStyle(fontSize: 15)), ), Padding( padding: const EdgeInsets.only( left: 15, right: 20, top: 15, bottom: 10), child: Text( maxLines: 1, style: const TextStyle( fontSize: 25, fontWeight: FontWeight.bold), session.title)), SessionViewAchievements(achievements: data.achievements), Padding( padding: const EdgeInsets.only(left: 15, right: 15), child: Text(style: const TextStyle(fontSize: 15), session.content)), const Padding( padding: EdgeInsets.fromLTRB(15, 30, 0, 10), child: Text( style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold), 'Media:')), SessionViewMedia(media: data.media), const Padding( padding: EdgeInsets.fromLTRB(15, 30, 0, 10), child: Text( style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold), 'Activites:')), SessionViewActivities(activities: data.activities), ], )); } } class SessionViewActivities extends StatelessWidget { const SessionViewActivities({super.key, this.activities}); final List? activities; @override Widget build(BuildContext context) { return Expanded( child: ListView.builder( // shrinkWrap: true, padding: const EdgeInsets.fromLTRB(10, 0, 10, 0), itemCount: activities?.length, itemBuilder: (BuildContext context, int index) { return ActivityCard(activity: activities![index]); }, )); } } class SessionViewAchievements extends StatelessWidget { const SessionViewAchievements({super.key, this.achievements}); final List? achievements; @override Widget build(BuildContext context) { return Column( children: [ Padding( padding: const EdgeInsets.only(bottom: 10), child: SizedBox( height: 40, child: ListView.builder( scrollDirection: Axis.horizontal, padding: const EdgeInsets.fromLTRB(10, 0, 10, 0), itemCount: achievements?.length, itemBuilder: (BuildContext context, int index) { return Padding( padding: const EdgeInsets.only(right: 5), child: ActionChip( visualDensity: VisualDensity.compact, avatar: const Icon(Icons.check_circle_outline), label: Text(maxLines: 1, '${achievements?[index]}'), onPressed: () {}, )); }, ))), ], ); } } class SessionViewMedia extends StatelessWidget { const SessionViewMedia({super.key, this.media}); final List? media; @override Widget build(BuildContext context) { List mediaCards = List.generate((media != null) ? media!.length : 0, (i) => MediaCard(media: media![i])); return Column( children: [ SizedBox( width: double.infinity, height: 100, child: GridView.count( padding: const EdgeInsets.fromLTRB(15, 0, 0, 0), scrollDirection: Axis.horizontal, crossAxisSpacing: 5, mainAxisSpacing: 5, crossAxisCount: 1, children: mediaCards)) ], ); } }