functional activity addition, bug to only remove activity action and date selection need to be fixed

This commit is contained in:
Joshua Burman
2025-01-05 15:07:36 -05:00
parent fec4eaaf92
commit acab37eb60
10 changed files with 177 additions and 28 deletions

View File

@ -0,0 +1,69 @@
import 'package:drift/drift.dart' hide Column;
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:sendtrain/daos/session_activities_dao.dart';
import 'package:sendtrain/database/database.dart';
import 'package:sendtrain/services/search/activity_finder_service.dart';
import 'package:sendtrain/widgets/generic/elements/form_search_input.dart';
class SessionActivitiesEditor extends StatelessWidget {
SessionActivitiesEditor({super.key, required this.session, this.callback});
final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
final TextEditingController tec = TextEditingController();
final Session session;
final Function? callback;
late final Activity selectedActivity;
@override
Widget build(
BuildContext context,
) {
return Padding(
padding: EdgeInsets.fromLTRB(15, 0, 15, 15),
child: Form(
key: _formKey,
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Padding(
padding: EdgeInsets.only(top: 10, bottom: 10),
child: Text('Add Activity',
textAlign: TextAlign.center,
style: Theme.of(context).textTheme.titleLarge)),
FormSearchInput(
title: 'Find an Activity',
controller: tec,
service: ActivityFinderService(context),
resultHandler: (Activity content,
ActivityFinderService service) async {
tec.text = content.title;
selectedActivity = content;
}),
Row(mainAxisAlignment: MainAxisAlignment.end, children: [
Padding(
padding: EdgeInsets.only(top: 10),
child: FilledButton(
child: Text('Submit'),
onPressed: () async {
final SessionActivitiesDao dao =
SessionActivitiesDao(
Provider.of<AppDatabase>(context, listen: false));
await dao.createOrUpdate(SessionActivitiesCompanion(
sessionId: Value(session.id),
activityId: Value(selectedActivity.id),
position: Value(0),
));
Navigator.pop(_formKey.currentContext!, 'Submit');
if (callback != null) {
await callback!();
}
}))
])
])));
}
}

View File

@ -12,7 +12,7 @@ import 'package:sendtrain/daos/media_items_dao.dart';
import 'package:sendtrain/daos/object_media_items_dao.dart';
import 'package:sendtrain/daos/sessions_dao.dart';
import 'package:sendtrain/database/database.dart';
import 'package:sendtrain/services/apis/google_places_service.dart';
import 'package:sendtrain/services/search/google_places_service.dart';
import 'package:sendtrain/widgets/builders/dialogs.dart';
import 'package:sendtrain/widgets/generic/elements/form_search_input.dart';
import 'package:sendtrain/widgets/generic/elements/form_text_input.dart';
@ -185,7 +185,7 @@ class _SessionEditorState extends State<SessionEditor> {
title: 'Location (optional)',
controller: sessionCreateController['address']!,
service: GooglePlacesService(),
callback: (content, service) async {
resultHandler: (content, service) async {
if (content.imageReferences != null) {
// get a random photo item from the returned result
Map<String, dynamic> photo = content.imageReferences![

View File

@ -10,6 +10,7 @@ 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/generic/elements/generic_progress_indicator.dart';
import 'package:sendtrain/widgets/sessions/session_activities_editor.dart';
import 'package:sendtrain/widgets/sessions/session_editor.dart';
import 'package:sendtrain/widgets/sessions/session_view_achievements.dart';
import 'package:sendtrain/widgets/sessions/session_view_activities.dart';
@ -91,6 +92,16 @@ class _SessionViewState extends State<SessionView> {
session: session, callback: resetState));
},
),
FloatingActionButton.extended(
icon: const Icon(Icons.edit_outlined),
label: Text('Add Activity'),
onPressed: () {
showEditorSheet(
context,
SessionActivitiesEditor(
session: session, callback: resetState));
},
),
FloatingActionButton.extended(
icon: const Icon(Icons.edit_outlined),
label: Text('Edit'),

View File

@ -2,8 +2,10 @@ import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:sendtrain/daos/activities_dao.dart';
import 'package:sendtrain/database/database.dart';
import 'package:sendtrain/helpers/widget_helpers.dart';
import 'package:sendtrain/widgets/activities/activity_card.dart';
import 'package:sendtrain/widgets/generic/elements/generic_progress_indicator.dart';
import 'package:sendtrain/widgets/sessions/session_activities_editor.dart';
class SessionViewActivities extends StatefulWidget {
const SessionViewActivities({super.key, required this.session});
@ -43,7 +45,13 @@ class _SessionViewActivitiesState extends State<SessionViewActivities> {
customBorder: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10),
),
onTap: () {},
onTap: () {
showEditorSheet(
context,
SessionActivitiesEditor(
session: widget.session,
callback: () {}));
},
child: ListTile(
contentPadding: EdgeInsets.only(
top: 5, left: 15, right: 5, bottom: 5),
@ -51,7 +59,7 @@ class _SessionViewActivitiesState extends State<SessionViewActivities> {
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.'),
'Here you can associate one or more activities that you can follow along with during your session.'),
)))
]));
}