diff --git a/lib/database/seed.dart b/lib/database/seed.dart index 01d2aa4..8c2ca29 100644 --- a/lib/database/seed.dart +++ b/lib/database/seed.dart @@ -19,7 +19,7 @@ Future seedDb(AppDatabase database) async { [ 'Off-Wall Training', 'Beta pully beta beta pinch one arm crimpy. Futuristic pinch, dyno dynamic drop knee climb. Climbing ondra slopey onsight beta ondra power endurance.', - 'Climbers Rcok Inc.' + 'Climbers Rock Inc.' ], [ 'Climbing Outdoors', diff --git a/lib/widgets/achievements/achievement_editor.dart b/lib/widgets/achievements/achievement_editor.dart index 6179476..4a40f79 100644 --- a/lib/widgets/achievements/achievement_editor.dart +++ b/lib/widgets/achievements/achievement_editor.dart @@ -7,17 +7,6 @@ import 'package:sendtrain/daos/sessions_dao.dart'; import 'package:sendtrain/database/database.dart'; import 'package:sendtrain/widgets/generic/elements/form_text_input.dart'; -// class AchievementEditor extends StatefulWidget { -// const AchievementEditor({super.key, required this.session, this.callback}); - -// final Session session; -// final Function? callback; - -// @override -// State createState() => _AchievementEditorState(); -// } - -// class _AchievementEditorState extends State { class AchievementEditor extends StatelessWidget { AchievementEditor({super.key, required this.session, this.callback}); @@ -43,7 +32,7 @@ class AchievementEditor extends StatelessWidget { child: Text('Create Achievement', textAlign: TextAlign.center, style: Theme.of(context).textTheme.titleLarge)), - FormTextInput(controller: tec, title: 'Achievement'), + FormTextInput(controller: tec, title: 'Achievement', icon: Icon(Icons.military_tech_rounded)), Row(mainAxisAlignment: MainAxisAlignment.end, children: [ Padding( padding: EdgeInsets.only(top: 10), @@ -52,7 +41,7 @@ class AchievementEditor extends StatelessWidget { onPressed: () async { session.achievements; List achievements = - json.decode(session.achievements!); + json.decode(session.achievements ?? "[]"); achievements.add(tec.text); Session updatedSession = session.copyWith( achievements: diff --git a/lib/widgets/sessions/session_view.dart b/lib/widgets/sessions/session_view.dart index 71e6e57..0537128 100644 --- a/lib/widgets/sessions/session_view.dart +++ b/lib/widgets/sessions/session_view.dart @@ -4,7 +4,6 @@ import 'package:intl/intl.dart'; import 'package:intl/date_symbol_data_local.dart'; import 'package:provider/provider.dart'; -import 'package:sendtrain/daos/activities_dao.dart'; import 'package:sendtrain/daos/sessions_dao.dart'; import 'package:sendtrain/database/database.dart'; import 'package:sendtrain/extensions/string_extensions.dart'; @@ -70,10 +69,6 @@ class _SessionViewState extends State { stream: SessionsDao(Provider.of(context)) .watchSession(session.id), builder: (context, snapshot) { - // return StreamBuilder>( - // stream: ActivitiesDao(Provider.of(context)) - // .watchSessionActivities(session.id), - // builder: (context, snapshot) { if (snapshot.hasData) { return Scaffold( floatingActionButtonLocation: ExpandableFab.location, @@ -158,7 +153,8 @@ class _SessionViewState extends State { style: const TextStyle( fontSize: 25, fontWeight: FontWeight.bold), title())), - SessionViewAchievements(session: session, callback: resetState), + SessionViewAchievements( + session: session, callback: resetState), Padding( padding: const EdgeInsets.only(left: 15, right: 15), child: Text( diff --git a/lib/widgets/sessions/session_view_achievements.dart b/lib/widgets/sessions/session_view_achievements.dart index 19137b4..101ccf6 100644 --- a/lib/widgets/sessions/session_view_achievements.dart +++ b/lib/widgets/sessions/session_view_achievements.dart @@ -83,99 +83,3 @@ class SessionViewAchievements extends StatelessWidget { ); } } - - -// 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)), -// ], -// ); -// } -// } diff --git a/lib/widgets/sessions/session_view_media.dart b/lib/widgets/sessions/session_view_media.dart index eed4df5..4167121 100644 --- a/lib/widgets/sessions/session_view_media.dart +++ b/lib/widgets/sessions/session_view_media.dart @@ -2,7 +2,9 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:sendtrain/daos/media_items_dao.dart'; import 'package:sendtrain/database/database.dart'; +import 'package:sendtrain/helpers/widget_helpers.dart'; import 'package:sendtrain/widgets/media/media_card.dart'; +import 'package:sendtrain/widgets/sessions/session_editor.dart'; class SessionViewMedia extends StatefulWidget { const SessionViewMedia({super.key, required this.session}); @@ -27,8 +29,24 @@ class _SessionViewMediaState extends State { if (snapshot.hasData) { final mediaItems = snapshot.data!; - List mediaCards = List.generate(mediaItems.length, - (i) => MediaCard(media: mediaItems[i], callback: resetState)); + List content; + if (mediaItems.isNotEmpty) { + List mediaCards = List.generate(mediaItems.length, + (i) => MediaCard(media: mediaItems[i], callback: resetState)); + content = mediaCards; + } else { + content = [ + FloatingActionButton( + onPressed: () { + showEditorSheet( + context, + SessionEditor( + session: widget.session, callback: resetState)); + }, + mini: true, + child: Icon(Icons.add_a_photo_rounded)) + ]; + } return Column( children: [ @@ -41,7 +59,7 @@ class _SessionViewMediaState extends State { crossAxisSpacing: 5, mainAxisSpacing: 5, crossAxisCount: 1, - children: mediaCards)) + children: content)) ], ); } else {