import 'dart:convert'; import 'package:drift/drift.dart' hide Column; 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/widget_helpers.dart'; import 'package:sendtrain/widgets/achievements/achievement_editor.dart'; import 'package:sendtrain/widgets/builders/dialogs.dart'; class SessionViewAchievements extends StatelessWidget { const SessionViewAchievements( {super.key, required this.session, this.callback}); final Session session; final Function? callback; Session updateAchievements(int index, List achievements) { achievements.removeAt(index); return session.copyWith( achievements: Value(json.encode(achievements))); } @override Widget build(BuildContext context) { Widget content; final AppDatabase db = Provider.of(context, listen: false); List achievements = json.decode(session.achievements ?? "[]"); if (achievements.isEmpty) { content = Padding( padding: const EdgeInsets.only(left: 10, right: 5), child: ActionChip( visualDensity: VisualDensity.compact, avatar: const Icon(Icons.check_circle_outline), label: Text(maxLines: 1, 'Add Achievements!'), onPressed: () { showEditorSheet(context, AchievementEditor(session: session, callback: callback)); }, )); } else { content = 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].toString().toTitleCase()), onPressed: () async { // remove the achievement at index // then update session Session newSession = updateAchievements(index, achievements); await showUpdateDialog( 'Achievement Removal', 'Would you like to remove this achievement?', context, () { SessionsDao(db).replace(newSession); if (callback != null) { callback!(); } }); })); }, ); } return Column( children: [ Padding( padding: const EdgeInsets.only(bottom: 10), child: SizedBox(height: 40, child: content)), ], ); } } // class SessionViewAchievements extends StatefulWidget { // const SessionViewAchievements({super.key, required this.session}); // final Session session; // @override // State createState() => // _SessionViewAchievementsState(); // } // class _SessionViewAchievementsState extends State { // late final AppDatabase db; // late Session session; // late List achievements; // @override // void initState() { // super.initState(); // db = Provider.of(context, listen: false); // session = widget.session; // achievements = json.decode(session.achievements!); // } // void resetState(int sessionId) async { // Session updatedSession = // await SessionsDao(Provider.of(context, listen: false)) // .find(sessionId); // setState(() { // session = updatedSession; // achievements = json.decode(session.achievements!); // }); // } // Session updateAchievements(int index) { // achievements.removeAt(index); // return session.copyWith( // achievements: Value(json.encode(achievements))); // } // @override // Widget build(BuildContext context) { // Widget content; // if (achievements.isEmpty) { // content = Padding( // padding: const EdgeInsets.only(left: 10, right: 5), // child: ActionChip( // visualDensity: VisualDensity.compact, // avatar: const Icon(Icons.check_circle_outline), // label: Text(maxLines: 1, 'Add Achievements!'), // onPressed: () { // showEditorSheet(context, // AchievementEditor(session: session, callback: resetState)); // }, // )); // } else { // content = 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].toString().toTitleCase()), // onPressed: () async { // // remove the achievement at index // // then update session // Session newSession = updateAchievements(index); // await showUpdateDialog( // 'Achievement Removal', // 'Would you like to remove this achievement?', // context, // SessionsDao(db), // newSession, // resetState); // })); // }, // ); // } // return Column( // children: [ // Padding( // padding: const EdgeInsets.only(bottom: 10), // child: SizedBox(height: 40, child: content)), // ], // ); // } // }