Compare commits
No commits in common. "6e0b1263ba5df2a25238cccf57b784153938a777" and "32826abcead911e5f790df9dd735b6d8a63a45e8" have entirely different histories.
6e0b1263ba
...
32826abcea
@ -19,7 +19,7 @@ Future<void> seedDb(AppDatabase database) async {
|
|||||||
[
|
[
|
||||||
'Off-Wall Training',
|
'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.',
|
'Beta pully beta beta pinch one arm crimpy. Futuristic pinch, dyno dynamic drop knee climb. Climbing ondra slopey onsight beta ondra power endurance.',
|
||||||
'Climbers Rock Inc.'
|
'Climbers Rcok Inc.'
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
'Climbing Outdoors',
|
'Climbing Outdoors',
|
||||||
|
@ -7,6 +7,17 @@ import 'package:sendtrain/daos/sessions_dao.dart';
|
|||||||
import 'package:sendtrain/database/database.dart';
|
import 'package:sendtrain/database/database.dart';
|
||||||
import 'package:sendtrain/widgets/generic/elements/form_text_input.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<AchievementEditor> createState() => _AchievementEditorState();
|
||||||
|
// }
|
||||||
|
|
||||||
|
// class _AchievementEditorState extends State<AchievementEditor> {
|
||||||
class AchievementEditor extends StatelessWidget {
|
class AchievementEditor extends StatelessWidget {
|
||||||
AchievementEditor({super.key, required this.session, this.callback});
|
AchievementEditor({super.key, required this.session, this.callback});
|
||||||
|
|
||||||
@ -32,7 +43,7 @@ class AchievementEditor extends StatelessWidget {
|
|||||||
child: Text('Create Achievement',
|
child: Text('Create Achievement',
|
||||||
textAlign: TextAlign.center,
|
textAlign: TextAlign.center,
|
||||||
style: Theme.of(context).textTheme.titleLarge)),
|
style: Theme.of(context).textTheme.titleLarge)),
|
||||||
FormTextInput(controller: tec, title: 'Achievement', icon: Icon(Icons.military_tech_rounded)),
|
FormTextInput(controller: tec, title: 'Achievement'),
|
||||||
Row(mainAxisAlignment: MainAxisAlignment.end, children: [
|
Row(mainAxisAlignment: MainAxisAlignment.end, children: [
|
||||||
Padding(
|
Padding(
|
||||||
padding: EdgeInsets.only(top: 10),
|
padding: EdgeInsets.only(top: 10),
|
||||||
@ -41,7 +52,7 @@ class AchievementEditor extends StatelessWidget {
|
|||||||
onPressed: () async {
|
onPressed: () async {
|
||||||
session.achievements;
|
session.achievements;
|
||||||
List achievements =
|
List achievements =
|
||||||
json.decode(session.achievements ?? "[]");
|
json.decode(session.achievements!);
|
||||||
achievements.add(tec.text);
|
achievements.add(tec.text);
|
||||||
Session updatedSession = session.copyWith(
|
Session updatedSession = session.copyWith(
|
||||||
achievements:
|
achievements:
|
||||||
|
@ -33,7 +33,7 @@ class ActivityCardState extends State<ActivityCard> {
|
|||||||
if (snapshot.hasData) {
|
if (snapshot.hasData) {
|
||||||
List<MediaItem> mediaItems = snapshot.data!;
|
List<MediaItem> mediaItems = snapshot.data!;
|
||||||
|
|
||||||
return Card.outlined(
|
return Card(
|
||||||
color: atm.activity?.id == widget.activity.id
|
color: atm.activity?.id == widget.activity.id
|
||||||
? Theme.of(context).colorScheme.primaryContainer
|
? Theme.of(context).colorScheme.primaryContainer
|
||||||
: Theme.of(context).colorScheme.surfaceContainerLow,
|
: Theme.of(context).colorScheme.surfaceContainerLow,
|
||||||
|
@ -52,7 +52,7 @@ class _SessionCardFullState extends State<SessionCardFull> {
|
|||||||
final MediaItem? sessionImage = mediaItems
|
final MediaItem? sessionImage = mediaItems
|
||||||
.firstWhereOrNull((mediaItem) => mediaItem.type == MediaType.location);
|
.firstWhereOrNull((mediaItem) => mediaItem.type == MediaType.location);
|
||||||
|
|
||||||
return Card.outlined(
|
return Card(
|
||||||
color: (session.status == SessionStatus.started)
|
color: (session.status == SessionStatus.started)
|
||||||
? Theme.of(context).colorScheme.primaryContainer
|
? Theme.of(context).colorScheme.primaryContainer
|
||||||
: Theme.of(context).colorScheme.surfaceContainerLow,
|
: Theme.of(context).colorScheme.surfaceContainerLow,
|
||||||
|
@ -4,6 +4,7 @@ import 'package:intl/intl.dart';
|
|||||||
import 'package:intl/date_symbol_data_local.dart';
|
import 'package:intl/date_symbol_data_local.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
|
|
||||||
|
import 'package:sendtrain/daos/activities_dao.dart';
|
||||||
import 'package:sendtrain/daos/sessions_dao.dart';
|
import 'package:sendtrain/daos/sessions_dao.dart';
|
||||||
import 'package:sendtrain/database/database.dart';
|
import 'package:sendtrain/database/database.dart';
|
||||||
import 'package:sendtrain/extensions/string_extensions.dart';
|
import 'package:sendtrain/extensions/string_extensions.dart';
|
||||||
@ -69,6 +70,10 @@ class _SessionViewState extends State<SessionView> {
|
|||||||
stream: SessionsDao(Provider.of<AppDatabase>(context))
|
stream: SessionsDao(Provider.of<AppDatabase>(context))
|
||||||
.watchSession(session.id),
|
.watchSession(session.id),
|
||||||
builder: (context, snapshot) {
|
builder: (context, snapshot) {
|
||||||
|
// return StreamBuilder<List<Activity>>(
|
||||||
|
// stream: ActivitiesDao(Provider.of<AppDatabase>(context))
|
||||||
|
// .watchSessionActivities(session.id),
|
||||||
|
// builder: (context, snapshot) {
|
||||||
if (snapshot.hasData) {
|
if (snapshot.hasData) {
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
floatingActionButtonLocation: ExpandableFab.location,
|
floatingActionButtonLocation: ExpandableFab.location,
|
||||||
@ -153,8 +158,7 @@ class _SessionViewState extends State<SessionView> {
|
|||||||
style: const TextStyle(
|
style: const TextStyle(
|
||||||
fontSize: 25, fontWeight: FontWeight.bold),
|
fontSize: 25, fontWeight: FontWeight.bold),
|
||||||
title())),
|
title())),
|
||||||
SessionViewAchievements(
|
SessionViewAchievements(session: session, callback: resetState),
|
||||||
session: session, callback: resetState),
|
|
||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.only(left: 15, right: 15),
|
padding: const EdgeInsets.only(left: 15, right: 15),
|
||||||
child: Text(
|
child: Text(
|
||||||
|
@ -83,3 +83,99 @@ class SessionViewAchievements extends StatelessWidget {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// class SessionViewAchievements extends StatefulWidget {
|
||||||
|
// const SessionViewAchievements({super.key, required this.session});
|
||||||
|
|
||||||
|
// final Session session;
|
||||||
|
|
||||||
|
// @override
|
||||||
|
// State<SessionViewAchievements> createState() =>
|
||||||
|
// _SessionViewAchievementsState();
|
||||||
|
// }
|
||||||
|
|
||||||
|
// class _SessionViewAchievementsState extends State<SessionViewAchievements> {
|
||||||
|
// late final AppDatabase db;
|
||||||
|
// late Session session;
|
||||||
|
// late List achievements;
|
||||||
|
|
||||||
|
// @override
|
||||||
|
// void initState() {
|
||||||
|
// super.initState();
|
||||||
|
// db = Provider.of<AppDatabase>(context, listen: false);
|
||||||
|
// session = widget.session;
|
||||||
|
// achievements = json.decode(session.achievements!);
|
||||||
|
// }
|
||||||
|
|
||||||
|
// void resetState(int sessionId) async {
|
||||||
|
// Session updatedSession =
|
||||||
|
// await SessionsDao(Provider.of<AppDatabase>(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<String>(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)),
|
||||||
|
// ],
|
||||||
|
// );
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
@ -23,7 +23,6 @@ class _SessionViewActivitiesState extends State<SessionViewActivities> {
|
|||||||
builder: (context, snapshot) {
|
builder: (context, snapshot) {
|
||||||
if (snapshot.hasData) {
|
if (snapshot.hasData) {
|
||||||
final activities = snapshot.data!;
|
final activities = snapshot.data!;
|
||||||
if (activities.isNotEmpty) {
|
|
||||||
return Expanded(
|
return Expanded(
|
||||||
child: ListView.builder(
|
child: ListView.builder(
|
||||||
// shrinkWrap: true,
|
// shrinkWrap: true,
|
||||||
@ -33,22 +32,6 @@ class _SessionViewActivitiesState extends State<SessionViewActivities> {
|
|||||||
return ActivityCard(activity: activities[index]);
|
return ActivityCard(activity: activities[index]);
|
||||||
},
|
},
|
||||||
));
|
));
|
||||||
} else {
|
|
||||||
return Expanded(
|
|
||||||
child: ListView(
|
|
||||||
padding: const EdgeInsets.fromLTRB(10, 0, 10, 0),
|
|
||||||
children: [
|
|
||||||
Card.outlined(
|
|
||||||
child: ListTile(
|
|
||||||
onTap: () {},
|
|
||||||
autofocus: true,
|
|
||||||
leading: Icon(Icons.add_box_rounded),
|
|
||||||
title: Text('Add an Activity!'),
|
|
||||||
subtitle: Text(
|
|
||||||
'Here you can associate one or more activities that you can follow during your session.'),
|
|
||||||
))
|
|
||||||
]));
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
return GenericProgressIndicator();
|
return GenericProgressIndicator();
|
||||||
}
|
}
|
||||||
|
@ -2,9 +2,7 @@ import 'package:flutter/material.dart';
|
|||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
import 'package:sendtrain/daos/media_items_dao.dart';
|
import 'package:sendtrain/daos/media_items_dao.dart';
|
||||||
import 'package:sendtrain/database/database.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/media/media_card.dart';
|
||||||
import 'package:sendtrain/widgets/sessions/session_editor.dart';
|
|
||||||
|
|
||||||
class SessionViewMedia extends StatefulWidget {
|
class SessionViewMedia extends StatefulWidget {
|
||||||
const SessionViewMedia({super.key, required this.session});
|
const SessionViewMedia({super.key, required this.session});
|
||||||
@ -29,24 +27,8 @@ class _SessionViewMediaState extends State<SessionViewMedia> {
|
|||||||
if (snapshot.hasData) {
|
if (snapshot.hasData) {
|
||||||
final mediaItems = snapshot.data!;
|
final mediaItems = snapshot.data!;
|
||||||
|
|
||||||
List<Widget> content;
|
|
||||||
if (mediaItems.isNotEmpty) {
|
|
||||||
List<Widget> mediaCards = List.generate(mediaItems.length,
|
List<Widget> mediaCards = List.generate(mediaItems.length,
|
||||||
(i) => MediaCard(media: mediaItems[i], callback: resetState));
|
(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(
|
return Column(
|
||||||
children: [
|
children: [
|
||||||
@ -59,7 +41,7 @@ class _SessionViewMediaState extends State<SessionViewMedia> {
|
|||||||
crossAxisSpacing: 5,
|
crossAxisSpacing: 5,
|
||||||
mainAxisSpacing: 5,
|
mainAxisSpacing: 5,
|
||||||
crossAxisCount: 1,
|
crossAxisCount: 1,
|
||||||
children: content))
|
children: mediaCards))
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user