From ebca90e69a20f3130b54e04b79bafeb6e90cf516 Mon Sep 17 00:00:00 2001 From: Joshua Burman Date: Mon, 6 Jan 2025 10:10:08 -0500 Subject: [PATCH 1/5] action prep, activity association removal, activity ui tweaks --- lib/daos/session_activities_dao.dart | 24 +- lib/models/activity_timer_model.dart | 8 +- lib/widgets/activities/activity_card.dart | 22 +- lib/widgets/activities/activity_view.dart | 355 +++++++++++------- .../activities/activity_view_categories.dart | 17 +- .../generic/elements/form_search_input.dart | 3 +- .../sessions/session_view_activities.dart | 2 +- 7 files changed, 278 insertions(+), 153 deletions(-) diff --git a/lib/daos/session_activities_dao.dart b/lib/daos/session_activities_dao.dart index 8751cc3..5a37906 100644 --- a/lib/daos/session_activities_dao.dart +++ b/lib/daos/session_activities_dao.dart @@ -4,17 +4,21 @@ import 'package:sendtrain/database/database.dart'; part 'session_activities_dao.g.dart'; @DriftAccessor(tables: [SessionActivities]) -class SessionActivitiesDao extends DatabaseAccessor with _$SessionActivitiesDaoMixin { +class SessionActivitiesDao extends DatabaseAccessor + with _$SessionActivitiesDaoMixin { SessionActivitiesDao(super.db); - Future createOrUpdate(SessionActivitiesCompanion sessionActivity) => into(sessionActivities).insertOnConflictUpdate(sessionActivity); + Future createOrUpdate(SessionActivitiesCompanion sessionActivity) => + into(sessionActivities).insertOnConflictUpdate(sessionActivity); Future> all() async { return await select(sessionActivities).get(); } Future find(int id) async { - return await (select(sessionActivities)..where((sessionActivity) => sessionActivity.id.equals(id) )).getSingle(); + return await (select(sessionActivities) + ..where((sessionActivity) => sessionActivity.id.equals(id))) + .getSingle(); } Future> fromSessionId(int id) async { @@ -23,4 +27,16 @@ class SessionActivitiesDao extends DatabaseAccessor with _$SessionA return result.get(); } -} \ No newline at end of file + + Future remove(SessionActivity sessionActivity) => + delete(sessionActivities).delete(sessionActivity); + + Future removeAssociation(int activityId, int sessionId) { + return (delete(sessionActivities) + ..where((t) => + t.sessionId.equals(sessionId) & t.activityId.equals(activityId))) + .go(); + } +} + +// return (delete(todos)..where((t) => t.id.isSmallerThanValue(10))).go(); \ No newline at end of file diff --git a/lib/models/activity_timer_model.dart b/lib/models/activity_timer_model.dart index e7d2723..054bd6e 100644 --- a/lib/models/activity_timer_model.dart +++ b/lib/models/activity_timer_model.dart @@ -19,9 +19,9 @@ class ActivityTimerModel with ChangeNotifier { int get actionCount => _actionCounter; int get currentActionNum => _currentActionNum; - dynamic get currentAction => currentSet[_currentActionNum]; + dynamic get currentAction => currentSet.isNotEmpty ? currentSet[_currentActionNum] : {}; int get currentSetNum => _currentSetNum; - dynamic get currentSet => _sets[_currentSetNum]; + dynamic get currentSet => _sets.isNotEmpty ? _sets[_currentSetNum] : {}; Activity? get activity => _activity; List get sets => _sets; Timer? get periodicTimer => _periodicTimer; @@ -36,7 +36,7 @@ class ActivityTimerModel with ChangeNotifier { _isc = null; _activity = activity; // only one action for now - _sets = json.decode(actions[0].set); + _sets = actions.isNotEmpty ? json.decode(actions[0].set) : []; // _actions = actions; _currentActionNum = 0; _currentSetNum = 0; @@ -92,7 +92,7 @@ class ActivityTimerModel with ChangeNotifier { } void setActionCount() { - _actionCounter = currentAction['amount']; + _actionCounter = currentAction.isNotEmpty ? currentAction['amount'] : 0; } void pause() { diff --git a/lib/widgets/activities/activity_card.dart b/lib/widgets/activities/activity_card.dart index df30da2..95de21a 100644 --- a/lib/widgets/activities/activity_card.dart +++ b/lib/widgets/activities/activity_card.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; -import 'package:sendtrain/daos/activities_dao.dart'; import 'package:sendtrain/daos/media_items_dao.dart'; +import 'package:sendtrain/daos/session_activities_dao.dart'; import 'package:sendtrain/database/database.dart'; import 'package:sendtrain/extensions/string_extensions.dart'; import 'package:sendtrain/helpers/date_time_helpers.dart'; @@ -14,9 +14,14 @@ import 'package:sendtrain/widgets/generic/elements/generic_progress_indicator.da class ActivityCard extends StatefulWidget { final Activity activity; + final Session session; final Function? callback; - const ActivityCard({super.key, required this.activity, this.callback}); + const ActivityCard( + {super.key, + required this.activity, + required this.session, + this.callback}); @override State createState() => ActivityCardState(); @@ -62,8 +67,8 @@ class ActivityCardState extends State { } }, ), - subtitle: - Text(maxLines: 2, widget.activity.description ?? ""), + subtitle: Text( + maxLines: 2, widget.activity.description ?? ""), contentPadding: EdgeInsets.only(left: 13), trailing: Flex( direction: Axis.vertical, @@ -79,10 +84,11 @@ class ActivityCardState extends State { 'Activity Removal', 'Would you like to permanently remove this activity from the current session?', context, () { - ActivitiesDao(Provider.of( - context, - listen: false)) - .remove(widget.activity); + SessionActivitiesDao( + Provider.of(context, + listen: false)) + .removeAssociation(widget.activity.id, + widget.session.id); }).then((result) { setState(() {}); }); diff --git a/lib/widgets/activities/activity_view.dart b/lib/widgets/activities/activity_view.dart index 573c2d8..4285a0d 100644 --- a/lib/widgets/activities/activity_view.dart +++ b/lib/widgets/activities/activity_view.dart @@ -11,8 +11,7 @@ import 'package:sendtrain/widgets/activities/activity_view_media.dart'; import 'package:sendtrain/widgets/activities/activity_view_types.dart'; class ActivityView extends StatefulWidget { - const ActivityView( - {super.key, required this.activity}); + const ActivityView({super.key, required this.activity}); final Activity activity; @override @@ -20,6 +19,76 @@ class ActivityView extends StatefulWidget { } class _ActivityViewState extends State { + List action(actions) { + if (actions.isNotEmpty) { + return [ + Padding( + padding: const EdgeInsets.only(left: 10, right: 10), + child: Card( + clipBehavior: Clip.antiAlias, + shape: const RoundedRectangleBorder( + borderRadius: BorderRadius.only( + topLeft: Radius.circular(10), + topRight: Radius.circular(10)), + ), + color: Theme.of(context).colorScheme.onPrimary, + child: Row(children: [ + Ink( + width: 70, + color: Theme.of(context).colorScheme.primaryContainer, + child: Consumer( + builder: (context, atm, child) { + return IconButton( + alignment: AlignmentDirectional.center, + icon: atm.isActive + ? const Icon(Icons.pause_rounded) + : const Icon(Icons.play_arrow_rounded), + onPressed: () => + {atm.isActive ? atm.pause() : atm.start()}); + }, + )), + Expanded( + flex: 1, + child: Stack(alignment: Alignment.center, children: [ + Container( + alignment: Alignment.center, + child: Consumer( + builder: (context, atm, child) { + return Text( + style: const TextStyle(fontSize: 20), + textAlign: TextAlign.center, + '${atm.actionCount} ${atm.currentAction['type']}' + .toTitleCase()); + }, + ), + ), + Container( + alignment: Alignment.centerRight, + padding: EdgeInsets.only(right: 15), + child: Consumer( + builder: (context, atm, child) { + return Text( + style: const TextStyle(fontSize: 12), + textAlign: TextAlign.right, + '${atm.currentAction['actionID'] + 1} of ${atm.totalActions()}'); + })), + ])), + ]))), + Padding( + padding: EdgeInsets.only(left: 14, right: 14), + child: Consumer(builder: (context, atm, child) { + return LinearProgressIndicator( + value: atm.progress, + semanticsLabel: 'Activity Progress', + ); + })), + ActivityActionView(actions: actions) + ]; + } else { + return [Text('add an action')]; + } + } + @override Widget build(BuildContext context) { final Activity activity = widget.activity; @@ -44,11 +113,11 @@ class _ActivityViewState extends State { blur: 10, ), children: [ - FloatingActionButton.extended( - icon: const Icon(Icons.upload_outlined), - label: Text('Upload Media'), - onPressed: () {}, - ), + // FloatingActionButton.extended( + // icon: const Icon(Icons.upload_outlined), + // label: Text('Upload Media'), + // onPressed: () {}, + // ), FloatingActionButton.extended( icon: const Icon(Icons.note_add_outlined), label: Text('Add Note'), @@ -68,125 +137,159 @@ class _ActivityViewState extends State { body: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - AppBar( - titleSpacing: 0, - centerTitle: true, - title: const Text('Activity', - style: 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), - activity.title.toTitleCase())), - Padding( - padding: const EdgeInsets.fromLTRB(10, 0, 0, 10), - child: Flex(direction: Axis.horizontal, children: [ - ActivityViewCategories( - categories: activity.category != null ? [activity.category!] : []), - ActivityViewTypes(types: [activity.type!]) - ])), - Padding( - padding: const EdgeInsets.only( - top: 0, bottom: 10, left: 15, right: 15), - child: Text( - textAlign: TextAlign.left, - style: const TextStyle(fontSize: 15), - activity.description ?? "")), - const Padding( - padding: EdgeInsets.fromLTRB(15, 20, 0, 10), - child: Text( - style: TextStyle( - fontSize: 20, fontWeight: FontWeight.bold), - 'Media:')), - ActivityViewMedia(activity: activity), - const Padding( - padding: EdgeInsets.fromLTRB(15, 30, 0, 10), - child: Text( - textAlign: TextAlign.left, - style: TextStyle( - fontSize: 20, fontWeight: FontWeight.bold), - 'Actions')), - Padding( - padding: const EdgeInsets.only(left: 10, right: 10), - child: Card( - clipBehavior: Clip.antiAlias, - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.only( - topLeft: Radius.circular(10), - topRight: Radius.circular(10)), - ), - color: Theme.of(context).colorScheme.onPrimary, - child: Row(children: [ - Ink( - width: 70, - color: Theme.of(context) - .colorScheme - .primaryContainer, - child: Consumer( - builder: (context, atm, child) { - return IconButton( - alignment: - AlignmentDirectional.center, - icon: atm.isActive - ? const Icon( - Icons.pause_rounded) - : const Icon( - Icons.play_arrow_rounded), - onPressed: () => { - atm.isActive - ? atm.pause() - : atm.start() - }); - }, - )), - Expanded( - flex: 1, - child: Stack( - alignment: Alignment.center, - children: [ - Container( - alignment: Alignment.center, - child: Consumer( - builder: (context, atm, child) { - return Text( - style: const TextStyle( - fontSize: 20), - textAlign: TextAlign.center, - '${atm.actionCount} ${atm.currentAction['type']}'.toTitleCase()); - }, - ), - ), - Container( - alignment: Alignment.centerRight, - padding: - EdgeInsets.only(right: 15), - child: - Consumer( - builder: (context, atm, - child) { - return Text( - style: const TextStyle( - fontSize: 12), - textAlign: TextAlign.right, - '${atm.currentAction['actionID'] + 1} of ${atm.totalActions()}'); - })), - ])), - ]))), - Padding( - padding: EdgeInsets.only(left: 14, right: 14), - child: Consumer( - builder: (context, atm, child) { - return LinearProgressIndicator( - value: atm.progress, - semanticsLabel: 'Activity Progress', - ); - })), - ActivityActionView(actions: actions), - ])); + AppBar( + titleSpacing: 0, + centerTitle: true, + title: const Text('Activity', + style: 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), + activity.title.toTitleCase())), + Padding( + padding: const EdgeInsets.fromLTRB(10, 0, 0, 10), + child: + Flex(direction: Axis.horizontal, children: [ + ActivityViewCategories>( + icon: Icon(Icons.stairs_rounded), + text: "Activity Level", + object: activity.level != null + ? [activity.level!] + : []), + // ActivityViewCategories>( + // icon: Icon(Icons.), + // text: 'Activity Mechanic', + // object: activity.mechanic != null + // ? [activity.mechanic!] + // : []), + ActivityViewCategories>( + icon: Icon(Icons.fitness_center_rounded), + text: 'Activity Equipments', + object: activity.equipment != null + ? [activity.equipment!] + : []), + ActivityViewCategories>( + icon: Icon(Icons.type_specimen_rounded), + text: 'Activity Equipments', + object: activity.equipment != null + ? [activity.type!] + : []), + ])), + Padding( + padding: const EdgeInsets.only( + top: 0, bottom: 10, left: 15, right: 15), + child: Text( + maxLines: 5, + textAlign: TextAlign.left, + style: const TextStyle(fontSize: 15), + activity.description ?? "")), + Padding( + padding: EdgeInsets.only(left: 15), + child: Text("read more...", + style: TextStyle( + color: Colors.deepPurpleAccent))), + const Padding( + padding: EdgeInsets.fromLTRB(15, 20, 0, 10), + child: Text( + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.bold), + 'Media:')), + ActivityViewMedia(activity: activity), + const Padding( + padding: EdgeInsets.fromLTRB(15, 30, 0, 10), + child: Text( + textAlign: TextAlign.left, + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.bold), + 'Actions')), + + // Padding( + // padding: const EdgeInsets.only(left: 10, right: 10), + // child: Card( + // clipBehavior: Clip.antiAlias, + // shape: const RoundedRectangleBorder( + // borderRadius: BorderRadius.only( + // topLeft: Radius.circular(10), + // topRight: Radius.circular(10)), + // ), + // color: Theme.of(context).colorScheme.onPrimary, + // child: Row(children: [ + // Ink( + // width: 70, + // color: Theme.of(context) + // .colorScheme + // .primaryContainer, + // child: Consumer( + // builder: (context, atm, child) { + // return IconButton( + // alignment: + // AlignmentDirectional.center, + // icon: atm.isActive + // ? const Icon( + // Icons.pause_rounded) + // : const Icon( + // Icons.play_arrow_rounded), + // onPressed: () => { + // atm.isActive + // ? atm.pause() + // : atm.start() + // }); + // }, + // )), + // Expanded( + // flex: 1, + // child: Stack( + // alignment: Alignment.center, + // children: [ + // Container( + // alignment: Alignment.center, + // child: Consumer( + // builder: (context, atm, child) { + // return Text( + // style: const TextStyle( + // fontSize: 20), + // textAlign: TextAlign.center, + // '${atm.actionCount} ${atm.currentAction['type']}' + // .toTitleCase()); + // }, + // ), + // ), + // Container( + // alignment: Alignment.centerRight, + // padding: + // EdgeInsets.only(right: 15), + // child: + // Consumer( + // builder: (context, atm, + // child) { + // return Text( + // style: const TextStyle( + // fontSize: 12), + // textAlign: TextAlign.right, + // '${atm.currentAction['actionID'] + 1} of ${atm.totalActions()}'); + // })), + // ])), + // ]))), + // Padding( + // padding: EdgeInsets.only(left: 14, right: 14), + // child: Consumer( + // builder: (context, atm, child) { + // return LinearProgressIndicator( + // value: atm.progress, + // semanticsLabel: 'Activity Progress', + // ); + // })), + // ActivityActionView(actions: actions), + ] + + action(actions))); } else { return Container( alignment: Alignment.center, diff --git a/lib/widgets/activities/activity_view_categories.dart b/lib/widgets/activities/activity_view_categories.dart index 60ec09b..57f51e6 100644 --- a/lib/widgets/activities/activity_view_categories.dart +++ b/lib/widgets/activities/activity_view_categories.dart @@ -1,11 +1,12 @@ import 'package:flutter/material.dart'; -import 'package:sendtrain/database/database.dart'; import 'package:sendtrain/extensions/string_extensions.dart'; -class ActivityViewCategories extends StatelessWidget { - const ActivityViewCategories({super.key, required this.categories}); +class ActivityViewCategories> extends StatelessWidget { + const ActivityViewCategories({super.key, required this.object, required this.icon, required this.text}); - final List categories; + final T object; + final Icon icon; + final String text; @override Widget build(BuildContext context) { @@ -15,13 +16,13 @@ class ActivityViewCategories extends StatelessWidget { shrinkWrap: true, scrollDirection: Axis.horizontal, padding: const EdgeInsets.only(right: 10), - itemCount: categories.length, + itemCount: object.length, itemBuilder: (BuildContext context, int index) { return ActionChip( visualDensity: VisualDensity.compact, - avatar: const Icon(Icons.category_rounded), - label: Text(maxLines: 1, categories[index].name.toTitleCase()), - tooltip: "Activity Category", + avatar: icon, + label: Text(maxLines: 1, object[index].name.toTitleCase()), + tooltip: text, onPressed: () {}, ); }, diff --git a/lib/widgets/generic/elements/form_search_input.dart b/lib/widgets/generic/elements/form_search_input.dart index ed78401..1836f25 100644 --- a/lib/widgets/generic/elements/form_search_input.dart +++ b/lib/widgets/generic/elements/form_search_input.dart @@ -57,8 +57,7 @@ class _FormSearchInputState extends State { _currentQuery = query; // In a real application, there should be some error handling here. - // final Iterable options = await _FakeAPI.search(_currentQuery!); - if (query.isNotEmpty) { + if (query.isNotEmpty && query.length > 3) { final List? suggestions = await service.fetchSuggestions(_currentQuery!); diff --git a/lib/widgets/sessions/session_view_activities.dart b/lib/widgets/sessions/session_view_activities.dart index 2f8683c..3048712 100644 --- a/lib/widgets/sessions/session_view_activities.dart +++ b/lib/widgets/sessions/session_view_activities.dart @@ -32,7 +32,7 @@ class _SessionViewActivitiesState extends State { padding: const EdgeInsets.fromLTRB(10, 0, 10, 0), itemCount: activities.length, itemBuilder: (BuildContext context, int index) { - return ActivityCard(activity: activities[index]); + return ActivityCard(activity: activities[index], session: widget.session); }, )); } else { From 6917754933a3111e5bf2b1ee0279414384ba1a7e Mon Sep 17 00:00:00 2001 From: Joshua Burman Date: Mon, 6 Jan 2025 14:47:14 -0500 Subject: [PATCH 2/5] acivity description management, seed data mods --- lib/database/seed.dart | 2 +- lib/helpers/widget_helpers.dart | 23 ++++++++++-- lib/widgets/activities/activity_card.dart | 11 +++++- lib/widgets/activities/activity_view.dart | 44 ++++++++++++++++++----- 4 files changed, 68 insertions(+), 12 deletions(-) diff --git a/lib/database/seed.dart b/lib/database/seed.dart index 0bdc8dd..6664161 100644 --- a/lib/database/seed.dart +++ b/lib/database/seed.dart @@ -73,7 +73,7 @@ Future seedDb(AppDatabase database) async { Map payload = { Symbol('title'): Value(exercise['name']), - Symbol('description'): Value(exercise['instructions'].toString()), + Symbol('description'): Value(json.encode(exercise['instructions'])), Symbol('force'): Value(exercise['force'] ?? "") }; diff --git a/lib/helpers/widget_helpers.dart b/lib/helpers/widget_helpers.dart index 3b98f20..bb6483f 100644 --- a/lib/helpers/widget_helpers.dart +++ b/lib/helpers/widget_helpers.dart @@ -6,10 +6,11 @@ showMediaDetailWidget(BuildContext context, MediaItem media) { showEditorSheet(context, MediaDetails(media: media)); } -showEditorSheet(BuildContext context, Widget widget) { +showGenericSheet(BuildContext context, Widget widget) { showModalBottomSheet( shape: RoundedRectangleBorder( - borderRadius: BorderRadius.only(topLeft: Radius.circular(10.0), topRight: Radius.circular(10.0)), + borderRadius: BorderRadius.only( + topLeft: Radius.circular(10.0), topRight: Radius.circular(10.0)), ), context: context, showDragHandle: true, @@ -19,3 +20,21 @@ showEditorSheet(BuildContext context, Widget widget) { return widget; }); } + +showEditorSheet(BuildContext context, Widget widget) { + showGenericSheet(context, widget); +} + +String jsonToDescription(List text) { + String content = ''; + + for (int i = 0; i < text.length; i++) { + if (content.isEmpty) { + content = text[i]; + } else { + content = "$content\n\n${text[i]}"; + } + } + + return content; + } diff --git a/lib/widgets/activities/activity_card.dart b/lib/widgets/activities/activity_card.dart index 95de21a..78e9130 100644 --- a/lib/widgets/activities/activity_card.dart +++ b/lib/widgets/activities/activity_card.dart @@ -1,3 +1,5 @@ +import 'dart:convert'; + import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:sendtrain/daos/media_items_dao.dart'; @@ -6,6 +8,7 @@ import 'package:sendtrain/database/database.dart'; import 'package:sendtrain/extensions/string_extensions.dart'; import 'package:sendtrain/helpers/date_time_helpers.dart'; import 'package:sendtrain/helpers/media_helpers.dart'; +import 'package:sendtrain/helpers/widget_helpers.dart'; import 'package:sendtrain/models/activity_timer_model.dart'; import 'package:sendtrain/widgets/activities/activity_view.dart'; import 'package:sendtrain/widgets/builders/dialogs.dart'; @@ -59,16 +62,22 @@ class ActivityCardState extends State { if (atm.activity?.id == widget.activity.id) { return Text( maxLines: 1, + overflow: TextOverflow.ellipsis, "${widget.activity.title.toTitleCase()} (${formattedTime(atm.totalTime)})"); } else { return Text( maxLines: 1, + overflow: TextOverflow.ellipsis, widget.activity.title.toTitleCase()); } }, ), subtitle: Text( - maxLines: 2, widget.activity.description ?? ""), + overflow: TextOverflow.ellipsis, + maxLines: 2, + softWrap: true, + jsonToDescription(json + .decode(widget.activity.description ?? ""))), contentPadding: EdgeInsets.only(left: 13), trailing: Flex( direction: Axis.vertical, diff --git a/lib/widgets/activities/activity_view.dart b/lib/widgets/activities/activity_view.dart index 4285a0d..a31f14e 100644 --- a/lib/widgets/activities/activity_view.dart +++ b/lib/widgets/activities/activity_view.dart @@ -1,14 +1,16 @@ +import 'dart:convert'; + import 'package:flutter/material.dart'; import 'package:flutter_expandable_fab/flutter_expandable_fab.dart'; import 'package:provider/provider.dart'; import 'package:sendtrain/daos/actions_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/models/activity_timer_model.dart'; import 'package:sendtrain/widgets/activities/activity_action_view.dart'; import 'package:sendtrain/widgets/activities/activity_view_categories.dart'; import 'package:sendtrain/widgets/activities/activity_view_media.dart'; -import 'package:sendtrain/widgets/activities/activity_view_types.dart'; class ActivityView extends StatefulWidget { const ActivityView({super.key, required this.activity}); @@ -185,17 +187,43 @@ class _ActivityViewState extends State { padding: const EdgeInsets.only( top: 0, bottom: 10, left: 15, right: 15), child: Text( - maxLines: 5, + maxLines: 4, + overflow: TextOverflow. ellipsis, + softWrap: true, textAlign: TextAlign.left, style: const TextStyle(fontSize: 15), - activity.description ?? "")), + jsonToDescription(json.decode(activity.description ?? "")))), Padding( - padding: EdgeInsets.only(left: 15), - child: Text("read more...", - style: TextStyle( - color: Colors.deepPurpleAccent))), + padding: EdgeInsets.only(right: 15), + child: Align( + alignment: Alignment.topRight, + child: TextButton( + style: ButtonStyle( + textStyle: + WidgetStateProperty.all( + TextStyle( + fontWeight: + FontWeight.normal)), + shape: WidgetStateProperty.all< + RoundedRectangleBorder>( + RoundedRectangleBorder( + borderRadius: + BorderRadius.circular(10.0), + ))), + onPressed: () { + showGenericSheet( + context, + Padding( + padding: EdgeInsets.all(15), + child: Text(jsonToDescription( + json.decode(activity.description ?? + ""))))); + }, + child: Text("Read More...", + textAlign: TextAlign.right), + ))), const Padding( - padding: EdgeInsets.fromLTRB(15, 20, 0, 10), + padding: EdgeInsets.fromLTRB(15, 10, 0, 10), child: Text( style: TextStyle( fontSize: 20, From 8ec531c0ea6db24ad771552447c70978a1e88740 Mon Sep 17 00:00:00 2001 From: Joshua Burman Date: Mon, 6 Jan 2025 16:46:22 -0500 Subject: [PATCH 3/5] activity read --- lib/database/database.dart | 4 +- lib/database/database.g.dart | 70 +- lib/database/database.steps.dart | 180 ++ .../sendtrain/drift_schema_v20.json | 1 + lib/database/seed.dart | 4 +- lib/widgets/activities/activity_view.dart | 6 +- test/drift/sendtrain/generated/schema.dart | 36 +- .../drift/sendtrain/generated/schema_v20.dart | 2219 +++++++++++++++++ 8 files changed, 2430 insertions(+), 90 deletions(-) create mode 100644 lib/database/drift_schemas/sendtrain/drift_schema_v20.json create mode 100644 test/drift/sendtrain/generated/schema_v20.dart diff --git a/lib/database/database.dart b/lib/database/database.dart index 9f9eb0a..5aee3f1 100644 --- a/lib/database/database.dart +++ b/lib/database/database.dart @@ -35,7 +35,7 @@ class AppDatabase extends _$AppDatabase { AppDatabase() : super(_openConnection()); @override - int get schemaVersion => 19; + int get schemaVersion => 20; @override MigrationStrategy get migration { @@ -193,7 +193,7 @@ enum MediaType { youtube, image, location, localImage, localVideo } class MediaItems extends Table { IntColumn get id => integer().autoIncrement()(); - TextColumn get title => text().withLength(min: 3, max: 32)(); + TextColumn get title => text().withLength(min: 3, max: 64)(); TextColumn get description => text().named('body')(); TextColumn get reference => text()(); TextColumn get type => textEnum()(); diff --git a/lib/database/database.g.dart b/lib/database/database.g.dart index 5053898..c247680 100644 --- a/lib/database/database.g.dart +++ b/lib/database/database.g.dart @@ -515,11 +515,6 @@ class $ActivitiesTable extends Activities type: DriftSqlType.string, requiredDuringInsert: false) .withConverter( $ActivitiesTable.$convertersecondaryMusclesn); - static const VerificationMeta _imagesMeta = const VerificationMeta('images'); - @override - late final GeneratedColumn images = GeneratedColumn( - 'images', aliasedName, true, - type: DriftSqlType.string, requiredDuringInsert: false); static const VerificationMeta _createdAtMeta = const VerificationMeta('createdAt'); @override @@ -541,7 +536,6 @@ class $ActivitiesTable extends Activities equipment, primaryMuscles, secondaryMuscles, - images, createdAt ]; @override @@ -578,10 +572,6 @@ class $ActivitiesTable extends Activities context.handle(_equipmentMeta, const VerificationResult.success()); context.handle(_primaryMusclesMeta, const VerificationResult.success()); context.handle(_secondaryMusclesMeta, const VerificationResult.success()); - if (data.containsKey('images')) { - context.handle(_imagesMeta, - images.isAcceptableOrUnknown(data['images']!, _imagesMeta)); - } if (data.containsKey('created_at')) { context.handle(_createdAtMeta, createdAt.isAcceptableOrUnknown(data['created_at']!, _createdAtMeta)); @@ -624,8 +614,6 @@ class $ActivitiesTable extends Activities secondaryMuscles: $ActivitiesTable.$convertersecondaryMusclesn.fromSql( attachedDatabase.typeMapping.read(DriftSqlType.string, data['${effectivePrefix}secondary_muscles'])), - images: attachedDatabase.typeMapping - .read(DriftSqlType.string, data['${effectivePrefix}images']), createdAt: attachedDatabase.typeMapping .read(DriftSqlType.dateTime, data['${effectivePrefix}created_at'])!, ); @@ -685,7 +673,6 @@ class Activity extends DataClass implements Insertable { final ActivityEquipment? equipment; final ActivityMuscle? primaryMuscles; final ActivityMuscle? secondaryMuscles; - final String? images; final DateTime createdAt; const Activity( {required this.id, @@ -699,7 +686,6 @@ class Activity extends DataClass implements Insertable { this.equipment, this.primaryMuscles, this.secondaryMuscles, - this.images, required this.createdAt}); @override Map toColumns(bool nullToAbsent) { @@ -740,9 +726,6 @@ class Activity extends DataClass implements Insertable { map['secondary_muscles'] = Variable( $ActivitiesTable.$convertersecondaryMusclesn.toSql(secondaryMuscles)); } - if (!nullToAbsent || images != null) { - map['images'] = Variable(images); - } map['created_at'] = Variable(createdAt); return map; } @@ -774,8 +757,6 @@ class Activity extends DataClass implements Insertable { secondaryMuscles: secondaryMuscles == null && nullToAbsent ? const Value.absent() : Value(secondaryMuscles), - images: - images == null && nullToAbsent ? const Value.absent() : Value(images), createdAt: Value(createdAt), ); } @@ -802,7 +783,6 @@ class Activity extends DataClass implements Insertable { .fromJson(serializer.fromJson(json['primaryMuscles'])), secondaryMuscles: $ActivitiesTable.$convertersecondaryMusclesn .fromJson(serializer.fromJson(json['secondaryMuscles'])), - images: serializer.fromJson(json['images']), createdAt: serializer.fromJson(json['createdAt']), ); } @@ -829,7 +809,6 @@ class Activity extends DataClass implements Insertable { 'secondaryMuscles': serializer.toJson($ActivitiesTable .$convertersecondaryMusclesn .toJson(secondaryMuscles)), - 'images': serializer.toJson(images), 'createdAt': serializer.toJson(createdAt), }; } @@ -846,7 +825,6 @@ class Activity extends DataClass implements Insertable { Value equipment = const Value.absent(), Value primaryMuscles = const Value.absent(), Value secondaryMuscles = const Value.absent(), - Value images = const Value.absent(), DateTime? createdAt}) => Activity( id: id ?? this.id, @@ -863,7 +841,6 @@ class Activity extends DataClass implements Insertable { secondaryMuscles: secondaryMuscles.present ? secondaryMuscles.value : this.secondaryMuscles, - images: images.present ? images.value : this.images, createdAt: createdAt ?? this.createdAt, ); Activity copyWithCompanion(ActivitiesCompanion data) { @@ -884,7 +861,6 @@ class Activity extends DataClass implements Insertable { secondaryMuscles: data.secondaryMuscles.present ? data.secondaryMuscles.value : this.secondaryMuscles, - images: data.images.present ? data.images.value : this.images, createdAt: data.createdAt.present ? data.createdAt.value : this.createdAt, ); } @@ -903,27 +879,14 @@ class Activity extends DataClass implements Insertable { ..write('equipment: $equipment, ') ..write('primaryMuscles: $primaryMuscles, ') ..write('secondaryMuscles: $secondaryMuscles, ') - ..write('images: $images, ') ..write('createdAt: $createdAt') ..write(')')) .toString(); } @override - int get hashCode => Object.hash( - id, - title, - type, - description, - category, - force, - level, - mechanic, - equipment, - primaryMuscles, - secondaryMuscles, - images, - createdAt); + int get hashCode => Object.hash(id, title, type, description, category, force, + level, mechanic, equipment, primaryMuscles, secondaryMuscles, createdAt); @override bool operator ==(Object other) => identical(this, other) || @@ -939,7 +902,6 @@ class Activity extends DataClass implements Insertable { other.equipment == this.equipment && other.primaryMuscles == this.primaryMuscles && other.secondaryMuscles == this.secondaryMuscles && - other.images == this.images && other.createdAt == this.createdAt); } @@ -955,7 +917,6 @@ class ActivitiesCompanion extends UpdateCompanion { final Value equipment; final Value primaryMuscles; final Value secondaryMuscles; - final Value images; final Value createdAt; const ActivitiesCompanion({ this.id = const Value.absent(), @@ -969,7 +930,6 @@ class ActivitiesCompanion extends UpdateCompanion { this.equipment = const Value.absent(), this.primaryMuscles = const Value.absent(), this.secondaryMuscles = const Value.absent(), - this.images = const Value.absent(), this.createdAt = const Value.absent(), }); ActivitiesCompanion.insert({ @@ -984,7 +944,6 @@ class ActivitiesCompanion extends UpdateCompanion { this.equipment = const Value.absent(), this.primaryMuscles = const Value.absent(), this.secondaryMuscles = const Value.absent(), - this.images = const Value.absent(), this.createdAt = const Value.absent(), }) : title = Value(title); static Insertable custom({ @@ -999,7 +958,6 @@ class ActivitiesCompanion extends UpdateCompanion { Expression? equipment, Expression? primaryMuscles, Expression? secondaryMuscles, - Expression? images, Expression? createdAt, }) { return RawValuesInsertable({ @@ -1014,7 +972,6 @@ class ActivitiesCompanion extends UpdateCompanion { if (equipment != null) 'equipment': equipment, if (primaryMuscles != null) 'primary_muscles': primaryMuscles, if (secondaryMuscles != null) 'secondary_muscles': secondaryMuscles, - if (images != null) 'images': images, if (createdAt != null) 'created_at': createdAt, }); } @@ -1031,7 +988,6 @@ class ActivitiesCompanion extends UpdateCompanion { Value? equipment, Value? primaryMuscles, Value? secondaryMuscles, - Value? images, Value? createdAt}) { return ActivitiesCompanion( id: id ?? this.id, @@ -1045,7 +1001,6 @@ class ActivitiesCompanion extends UpdateCompanion { equipment: equipment ?? this.equipment, primaryMuscles: primaryMuscles ?? this.primaryMuscles, secondaryMuscles: secondaryMuscles ?? this.secondaryMuscles, - images: images ?? this.images, createdAt: createdAt ?? this.createdAt, ); } @@ -1095,9 +1050,6 @@ class ActivitiesCompanion extends UpdateCompanion { .$convertersecondaryMusclesn .toSql(secondaryMuscles.value)); } - if (images.present) { - map['images'] = Variable(images.value); - } if (createdAt.present) { map['created_at'] = Variable(createdAt.value); } @@ -1118,7 +1070,6 @@ class ActivitiesCompanion extends UpdateCompanion { ..write('equipment: $equipment, ') ..write('primaryMuscles: $primaryMuscles, ') ..write('secondaryMuscles: $secondaryMuscles, ') - ..write('images: $images, ') ..write('createdAt: $createdAt') ..write(')')) .toString(); @@ -2098,7 +2049,7 @@ class $MediaItemsTable extends MediaItems late final GeneratedColumn title = GeneratedColumn( 'title', aliasedName, false, additionalChecks: - GeneratedColumn.checkTextLength(minTextLength: 3, maxTextLength: 32), + GeneratedColumn.checkTextLength(minTextLength: 3, maxTextLength: 64), type: DriftSqlType.string, requiredDuringInsert: true); static const VerificationMeta _descriptionMeta = @@ -3117,7 +3068,6 @@ typedef $$ActivitiesTableCreateCompanionBuilder = ActivitiesCompanion Function({ Value equipment, Value primaryMuscles, Value secondaryMuscles, - Value images, Value createdAt, }); typedef $$ActivitiesTableUpdateCompanionBuilder = ActivitiesCompanion Function({ @@ -3132,7 +3082,6 @@ typedef $$ActivitiesTableUpdateCompanionBuilder = ActivitiesCompanion Function({ Value equipment, Value primaryMuscles, Value secondaryMuscles, - Value images, Value createdAt, }); @@ -3232,9 +3181,6 @@ class $$ActivitiesTableFilterComposer column: $table.secondaryMuscles, builder: (column) => ColumnWithTypeConverterFilters(column)); - ColumnFilters get images => $composableBuilder( - column: $table.images, builder: (column) => ColumnFilters(column)); - ColumnFilters get createdAt => $composableBuilder( column: $table.createdAt, builder: (column) => ColumnFilters(column)); @@ -3325,9 +3271,6 @@ class $$ActivitiesTableOrderingComposer column: $table.secondaryMuscles, builder: (column) => ColumnOrderings(column)); - ColumnOrderings get images => $composableBuilder( - column: $table.images, builder: (column) => ColumnOrderings(column)); - ColumnOrderings get createdAt => $composableBuilder( column: $table.createdAt, builder: (column) => ColumnOrderings(column)); } @@ -3376,9 +3319,6 @@ class $$ActivitiesTableAnnotationComposer get secondaryMuscles => $composableBuilder( column: $table.secondaryMuscles, builder: (column) => column); - GeneratedColumn get images => - $composableBuilder(column: $table.images, builder: (column) => column); - GeneratedColumn get createdAt => $composableBuilder(column: $table.createdAt, builder: (column) => column); @@ -3461,7 +3401,6 @@ class $$ActivitiesTableTableManager extends RootTableManager< Value equipment = const Value.absent(), Value primaryMuscles = const Value.absent(), Value secondaryMuscles = const Value.absent(), - Value images = const Value.absent(), Value createdAt = const Value.absent(), }) => ActivitiesCompanion( @@ -3476,7 +3415,6 @@ class $$ActivitiesTableTableManager extends RootTableManager< equipment: equipment, primaryMuscles: primaryMuscles, secondaryMuscles: secondaryMuscles, - images: images, createdAt: createdAt, ), createCompanionCallback: ({ @@ -3491,7 +3429,6 @@ class $$ActivitiesTableTableManager extends RootTableManager< Value equipment = const Value.absent(), Value primaryMuscles = const Value.absent(), Value secondaryMuscles = const Value.absent(), - Value images = const Value.absent(), Value createdAt = const Value.absent(), }) => ActivitiesCompanion.insert( @@ -3506,7 +3443,6 @@ class $$ActivitiesTableTableManager extends RootTableManager< equipment: equipment, primaryMuscles: primaryMuscles, secondaryMuscles: secondaryMuscles, - images: images, createdAt: createdAt, ), withReferenceMapper: (p0) => p0 diff --git a/lib/database/database.steps.dart b/lib/database/database.steps.dart index 7bd7fd4..86b18c6 100644 --- a/lib/database/database.steps.dart +++ b/lib/database/database.steps.dart @@ -2901,6 +2901,178 @@ i1.GeneratedColumn _column_40(String aliasedName) => additionalChecks: i1.GeneratedColumn.checkTextLength( minTextLength: 3, maxTextLength: 100), type: i1.DriftSqlType.string); + +final class Schema20 extends i0.VersionedSchema { + Schema20({required super.database}) : super(version: 20); + @override + late final List entities = [ + sessions, + activities, + sessionActivities, + actions, + activityActions, + mediaItems, + objectMediaItems, + ]; + late final Shape12 sessions = Shape12( + source: i0.VersionedTable( + entityName: 'sessions', + withoutRowId: false, + isStrict: false, + tableConstraints: [], + columns: [ + _column_0, + _column_1, + _column_2, + _column_3, + _column_11, + _column_20, + _column_4, + _column_5, + ], + attachedDatabase: database, + ), + alias: null); + late final Shape17 activities = Shape17( + source: i0.VersionedTable( + entityName: 'activities', + withoutRowId: false, + isStrict: false, + tableConstraints: [], + columns: [ + _column_0, + _column_40, + _column_36, + _column_37, + _column_38, + _column_27, + _column_28, + _column_29, + _column_35, + _column_31, + _column_32, + _column_5, + ], + attachedDatabase: database, + ), + alias: null); + late final Shape13 sessionActivities = Shape13( + source: i0.VersionedTable( + entityName: 'session_activities', + withoutRowId: false, + isStrict: false, + tableConstraints: [], + columns: [ + _column_0, + _column_21, + _column_22, + _column_19, + _column_10, + _column_5, + ], + attachedDatabase: database, + ), + alias: null); + late final Shape3 actions = Shape3( + source: i0.VersionedTable( + entityName: 'actions', + withoutRowId: false, + isStrict: false, + tableConstraints: [], + columns: [ + _column_0, + _column_1, + _column_2, + _column_12, + _column_5, + ], + attachedDatabase: database, + ), + alias: null); + late final Shape10 activityActions = Shape10( + source: i0.VersionedTable( + entityName: 'activity_actions', + withoutRowId: false, + isStrict: false, + tableConstraints: [], + columns: [ + _column_0, + _column_22, + _column_23, + _column_19, + _column_5, + ], + attachedDatabase: database, + ), + alias: null); + late final Shape5 mediaItems = Shape5( + source: i0.VersionedTable( + entityName: 'media_items', + withoutRowId: false, + isStrict: false, + tableConstraints: [], + columns: [ + _column_0, + _column_41, + _column_2, + _column_25, + _column_6, + _column_5, + ], + attachedDatabase: database, + ), + alias: null); + late final Shape6 objectMediaItems = Shape6( + source: i0.VersionedTable( + entityName: 'object_media_items', + withoutRowId: false, + isStrict: false, + tableConstraints: [], + columns: [ + _column_0, + _column_15, + _column_16, + _column_24, + _column_5, + ], + attachedDatabase: database, + ), + alias: null); +} + +class Shape17 extends i0.VersionedTable { + Shape17({required super.source, required super.alias}) : super.aliased(); + i1.GeneratedColumn get id => + columnsByName['id']! as i1.GeneratedColumn; + i1.GeneratedColumn get title => + columnsByName['title']! as i1.GeneratedColumn; + i1.GeneratedColumn get type => + columnsByName['type']! as i1.GeneratedColumn; + i1.GeneratedColumn get description => + columnsByName['body']! as i1.GeneratedColumn; + i1.GeneratedColumn get category => + columnsByName['category']! as i1.GeneratedColumn; + i1.GeneratedColumn get force => + columnsByName['force']! as i1.GeneratedColumn; + i1.GeneratedColumn get level => + columnsByName['level']! as i1.GeneratedColumn; + i1.GeneratedColumn get mechanic => + columnsByName['mechanic']! as i1.GeneratedColumn; + i1.GeneratedColumn get equipment => + columnsByName['equipment']! as i1.GeneratedColumn; + i1.GeneratedColumn get primaryMuscles => + columnsByName['primary_muscles']! as i1.GeneratedColumn; + i1.GeneratedColumn get secondaryMuscles => + columnsByName['secondary_muscles']! as i1.GeneratedColumn; + i1.GeneratedColumn get createdAt => + columnsByName['created_at']! as i1.GeneratedColumn; +} + +i1.GeneratedColumn _column_41(String aliasedName) => + i1.GeneratedColumn('title', aliasedName, false, + additionalChecks: i1.GeneratedColumn.checkTextLength( + minTextLength: 3, maxTextLength: 64), + type: i1.DriftSqlType.string); i0.MigrationStepWithVersion migrationSteps({ required Future Function(i1.Migrator m, Schema2 schema) from1To2, required Future Function(i1.Migrator m, Schema3 schema) from2To3, @@ -2920,6 +3092,7 @@ i0.MigrationStepWithVersion migrationSteps({ required Future Function(i1.Migrator m, Schema17 schema) from16To17, required Future Function(i1.Migrator m, Schema18 schema) from17To18, required Future Function(i1.Migrator m, Schema19 schema) from18To19, + required Future Function(i1.Migrator m, Schema20 schema) from19To20, }) { return (currentVersion, database) async { switch (currentVersion) { @@ -3013,6 +3186,11 @@ i0.MigrationStepWithVersion migrationSteps({ final migrator = i1.Migrator(database, schema); await from18To19(migrator, schema); return 19; + case 19: + final schema = Schema20(database: database); + final migrator = i1.Migrator(database, schema); + await from19To20(migrator, schema); + return 20; default: throw ArgumentError.value('Unknown migration from $currentVersion'); } @@ -3038,6 +3216,7 @@ i1.OnUpgrade stepByStep({ required Future Function(i1.Migrator m, Schema17 schema) from16To17, required Future Function(i1.Migrator m, Schema18 schema) from17To18, required Future Function(i1.Migrator m, Schema19 schema) from18To19, + required Future Function(i1.Migrator m, Schema20 schema) from19To20, }) => i0.VersionedSchema.stepByStepHelper( step: migrationSteps( @@ -3059,4 +3238,5 @@ i1.OnUpgrade stepByStep({ from16To17: from16To17, from17To18: from17To18, from18To19: from18To19, + from19To20: from19To20, )); diff --git a/lib/database/drift_schemas/sendtrain/drift_schema_v20.json b/lib/database/drift_schemas/sendtrain/drift_schema_v20.json new file mode 100644 index 0000000..5a0fae8 --- /dev/null +++ b/lib/database/drift_schemas/sendtrain/drift_schema_v20.json @@ -0,0 +1 @@ +{"_meta":{"description":"This file contains a serialized version of schema entities for drift.","version":"1.2.0"},"options":{"store_date_time_values_as_text":false},"entities":[{"id":0,"references":[],"type":"table","data":{"name":"sessions","was_declared_in_moor":false,"columns":[{"name":"id","getter_name":"id","moor_type":"int","nullable":false,"customConstraints":null,"defaultConstraints":"PRIMARY KEY AUTOINCREMENT","dialectAwareDefaultConstraints":{"sqlite":"PRIMARY KEY AUTOINCREMENT"},"default_dart":null,"default_client_dart":null,"dsl_features":["auto-increment"]},{"name":"title","getter_name":"title","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[{"allowed-lengths":{"min":3,"max":32}}]},{"name":"body","getter_name":"content","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"status","getter_name":"status","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const EnumNameConverter(SessionStatus.values)","dart_type_name":"SessionStatus"}},{"name":"achievements","getter_name":"achievements","moor_type":"string","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"address","getter_name":"address","moor_type":"string","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[{"allowed-lengths":{"min":3,"max":256}}]},{"name":"date","getter_name":"date","moor_type":"dateTime","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"created_at","getter_name":"createdAt","moor_type":"dateTime","nullable":false,"customConstraints":null,"default_dart":"Variable(DateTime.now())","default_client_dart":null,"dsl_features":[]}],"is_virtual":false,"without_rowid":false,"constraints":[]}},{"id":1,"references":[],"type":"table","data":{"name":"activities","was_declared_in_moor":false,"columns":[{"name":"id","getter_name":"id","moor_type":"int","nullable":false,"customConstraints":null,"defaultConstraints":"PRIMARY KEY AUTOINCREMENT","dialectAwareDefaultConstraints":{"sqlite":"PRIMARY KEY AUTOINCREMENT"},"default_dart":null,"default_client_dart":null,"dsl_features":["auto-increment"]},{"name":"title","getter_name":"title","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[{"allowed-lengths":{"min":3,"max":100}}]},{"name":"type","getter_name":"type","moor_type":"string","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const EnumNameConverter(ActivityType.values)","dart_type_name":"ActivityType"}},{"name":"body","getter_name":"description","moor_type":"string","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"category","getter_name":"category","moor_type":"string","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const EnumNameConverter(ActivityCategories.values)","dart_type_name":"ActivityCategories"}},{"name":"force","getter_name":"force","moor_type":"string","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"level","getter_name":"level","moor_type":"string","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const EnumNameConverter(ActivityLevel.values)","dart_type_name":"ActivityLevel"}},{"name":"mechanic","getter_name":"mechanic","moor_type":"string","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const EnumNameConverter(ActivityMechanic.values)","dart_type_name":"ActivityMechanic"}},{"name":"equipment","getter_name":"equipment","moor_type":"string","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const EnumNameConverter(ActivityEquipment.values)","dart_type_name":"ActivityEquipment"}},{"name":"primary_muscles","getter_name":"primaryMuscles","moor_type":"string","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const EnumNameConverter(ActivityMuscle.values)","dart_type_name":"ActivityMuscle"}},{"name":"secondary_muscles","getter_name":"secondaryMuscles","moor_type":"string","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const EnumNameConverter(ActivityMuscle.values)","dart_type_name":"ActivityMuscle"}},{"name":"created_at","getter_name":"createdAt","moor_type":"dateTime","nullable":false,"customConstraints":null,"default_dart":"Variable(DateTime.now())","default_client_dart":null,"dsl_features":[]}],"is_virtual":false,"without_rowid":false,"constraints":[]}},{"id":2,"references":[0,1],"type":"table","data":{"name":"session_activities","was_declared_in_moor":false,"columns":[{"name":"id","getter_name":"id","moor_type":"int","nullable":false,"customConstraints":null,"defaultConstraints":"PRIMARY KEY AUTOINCREMENT","dialectAwareDefaultConstraints":{"sqlite":"PRIMARY KEY AUTOINCREMENT"},"default_dart":null,"default_client_dart":null,"dsl_features":["auto-increment"]},{"name":"session_id","getter_name":"sessionId","moor_type":"int","nullable":false,"customConstraints":null,"defaultConstraints":"REFERENCES sessions (id) ON DELETE CASCADE","dialectAwareDefaultConstraints":{"sqlite":"REFERENCES sessions (id) ON DELETE CASCADE"},"default_dart":null,"default_client_dart":null,"dsl_features":["unknown"]},{"name":"activity_id","getter_name":"activityId","moor_type":"int","nullable":false,"customConstraints":null,"defaultConstraints":"REFERENCES activities (id) ON DELETE CASCADE","dialectAwareDefaultConstraints":{"sqlite":"REFERENCES activities (id) ON DELETE CASCADE"},"default_dart":null,"default_client_dart":null,"dsl_features":["unknown"]},{"name":"position","getter_name":"position","moor_type":"int","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"results","getter_name":"results","moor_type":"string","nullable":true,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"created_at","getter_name":"createdAt","moor_type":"dateTime","nullable":false,"customConstraints":null,"default_dart":"Variable(DateTime.now())","default_client_dart":null,"dsl_features":[]}],"is_virtual":false,"without_rowid":false,"constraints":[]}},{"id":3,"references":[],"type":"table","data":{"name":"actions","was_declared_in_moor":false,"columns":[{"name":"id","getter_name":"id","moor_type":"int","nullable":false,"customConstraints":null,"defaultConstraints":"PRIMARY KEY AUTOINCREMENT","dialectAwareDefaultConstraints":{"sqlite":"PRIMARY KEY AUTOINCREMENT"},"default_dart":null,"default_client_dart":null,"dsl_features":["auto-increment"]},{"name":"title","getter_name":"title","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[{"allowed-lengths":{"min":3,"max":32}}]},{"name":"body","getter_name":"description","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"set","getter_name":"set","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"created_at","getter_name":"createdAt","moor_type":"dateTime","nullable":false,"customConstraints":null,"default_dart":"Variable(DateTime.now())","default_client_dart":null,"dsl_features":[]}],"is_virtual":false,"without_rowid":false,"constraints":[]}},{"id":4,"references":[1,3],"type":"table","data":{"name":"activity_actions","was_declared_in_moor":false,"columns":[{"name":"id","getter_name":"id","moor_type":"int","nullable":false,"customConstraints":null,"defaultConstraints":"PRIMARY KEY AUTOINCREMENT","dialectAwareDefaultConstraints":{"sqlite":"PRIMARY KEY AUTOINCREMENT"},"default_dart":null,"default_client_dart":null,"dsl_features":["auto-increment"]},{"name":"activity_id","getter_name":"activityId","moor_type":"int","nullable":false,"customConstraints":null,"defaultConstraints":"REFERENCES activities (id) ON DELETE CASCADE","dialectAwareDefaultConstraints":{"sqlite":"REFERENCES activities (id) ON DELETE CASCADE"},"default_dart":null,"default_client_dart":null,"dsl_features":["unknown"]},{"name":"action_id","getter_name":"actionId","moor_type":"int","nullable":false,"customConstraints":null,"defaultConstraints":"REFERENCES actions (id) ON DELETE CASCADE","dialectAwareDefaultConstraints":{"sqlite":"REFERENCES actions (id) ON DELETE CASCADE"},"default_dart":null,"default_client_dart":null,"dsl_features":["unknown"]},{"name":"position","getter_name":"position","moor_type":"int","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"created_at","getter_name":"createdAt","moor_type":"dateTime","nullable":false,"customConstraints":null,"default_dart":"Variable(DateTime.now())","default_client_dart":null,"dsl_features":[]}],"is_virtual":false,"without_rowid":false,"constraints":[]}},{"id":5,"references":[],"type":"table","data":{"name":"media_items","was_declared_in_moor":false,"columns":[{"name":"id","getter_name":"id","moor_type":"int","nullable":false,"customConstraints":null,"defaultConstraints":"PRIMARY KEY AUTOINCREMENT","dialectAwareDefaultConstraints":{"sqlite":"PRIMARY KEY AUTOINCREMENT"},"default_dart":null,"default_client_dart":null,"dsl_features":["auto-increment"]},{"name":"title","getter_name":"title","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[{"allowed-lengths":{"min":3,"max":64}}]},{"name":"body","getter_name":"description","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"reference","getter_name":"reference","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"type","getter_name":"type","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const EnumNameConverter(MediaType.values)","dart_type_name":"MediaType"}},{"name":"created_at","getter_name":"createdAt","moor_type":"dateTime","nullable":false,"customConstraints":null,"default_dart":"Variable(DateTime.now())","default_client_dart":null,"dsl_features":[]}],"is_virtual":false,"without_rowid":false,"constraints":[]}},{"id":6,"references":[5],"type":"table","data":{"name":"object_media_items","was_declared_in_moor":false,"columns":[{"name":"id","getter_name":"id","moor_type":"int","nullable":false,"customConstraints":null,"defaultConstraints":"PRIMARY KEY AUTOINCREMENT","dialectAwareDefaultConstraints":{"sqlite":"PRIMARY KEY AUTOINCREMENT"},"default_dart":null,"default_client_dart":null,"dsl_features":["auto-increment"]},{"name":"object_id","getter_name":"objectId","moor_type":"int","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[]},{"name":"object_type","getter_name":"objectType","moor_type":"string","nullable":false,"customConstraints":null,"default_dart":null,"default_client_dart":null,"dsl_features":[],"type_converter":{"dart_expr":"const EnumNameConverter(ObjectType.values)","dart_type_name":"ObjectType"}},{"name":"media_id","getter_name":"mediaId","moor_type":"int","nullable":false,"customConstraints":null,"defaultConstraints":"REFERENCES media_items (id) ON DELETE CASCADE","dialectAwareDefaultConstraints":{"sqlite":"REFERENCES media_items (id) ON DELETE CASCADE"},"default_dart":null,"default_client_dart":null,"dsl_features":["unknown"]},{"name":"created_at","getter_name":"createdAt","moor_type":"dateTime","nullable":false,"customConstraints":null,"default_dart":"Variable(DateTime.now())","default_client_dart":null,"dsl_features":[]}],"is_virtual":false,"without_rowid":false,"constraints":[]}}]} \ No newline at end of file diff --git a/lib/database/seed.dart b/lib/database/seed.dart index 6664161..26318f4 100644 --- a/lib/database/seed.dart +++ b/lib/database/seed.dart @@ -124,9 +124,9 @@ Future seedDb(AppDatabase database) async { await database .into(database.mediaItems) .insert(MediaItemsCompanion.insert( - title: 'Media title $m', + title: exercise['name'], description: - 'Media description $m Beta pully beta beta pinch one arm crimpy. Futuristic pinch, dyno dynamic drop knee climb. Climbing ondra slopey onsight beta ondra power endurance.', + exercise['name'], reference: mediaItem, type: MediaType.image)) .then((mediaId) async { diff --git a/lib/widgets/activities/activity_view.dart b/lib/widgets/activities/activity_view.dart index a31f14e..908c17c 100644 --- a/lib/widgets/activities/activity_view.dart +++ b/lib/widgets/activities/activity_view.dart @@ -185,7 +185,7 @@ class _ActivityViewState extends State { ])), Padding( padding: const EdgeInsets.only( - top: 0, bottom: 10, left: 15, right: 15), + top: 0, bottom: 0, left: 15, right: 15), child: Text( maxLines: 4, overflow: TextOverflow. ellipsis, @@ -219,8 +219,8 @@ class _ActivityViewState extends State { json.decode(activity.description ?? ""))))); }, - child: Text("Read More...", - textAlign: TextAlign.right), + child: Text("read more", + textAlign: TextAlign.right, style: TextStyle(fontSize: 12),), ))), const Padding( padding: EdgeInsets.fromLTRB(15, 10, 0, 10), diff --git a/test/drift/sendtrain/generated/schema.dart b/test/drift/sendtrain/generated/schema.dart index 3948afd..8558e69 100644 --- a/test/drift/sendtrain/generated/schema.dart +++ b/test/drift/sendtrain/generated/schema.dart @@ -7,11 +7,6 @@ import 'schema_v1.dart' as v1; import 'schema_v2.dart' as v2; import 'schema_v3.dart' as v3; import 'schema_v4.dart' as v4; -import 'schema_v5.dart' as v5; -import 'schema_v6.dart' as v6; -import 'schema_v7.dart' as v7; -import 'schema_v8.dart' as v8; -import 'schema_v9.dart' as v9; import 'schema_v10.dart' as v10; import 'schema_v11.dart' as v11; import 'schema_v12.dart' as v12; @@ -22,6 +17,12 @@ import 'schema_v16.dart' as v16; import 'schema_v17.dart' as v17; import 'schema_v18.dart' as v18; import 'schema_v19.dart' as v19; +import 'schema_v5.dart' as v5; +import 'schema_v6.dart' as v6; +import 'schema_v7.dart' as v7; +import 'schema_v8.dart' as v8; +import 'schema_v9.dart' as v9; +import 'schema_v20.dart' as v20; class GeneratedHelper implements SchemaInstantiationHelper { @override @@ -35,16 +36,6 @@ class GeneratedHelper implements SchemaInstantiationHelper { return v3.DatabaseAtV3(db); case 4: return v4.DatabaseAtV4(db); - case 5: - return v5.DatabaseAtV5(db); - case 6: - return v6.DatabaseAtV6(db); - case 7: - return v7.DatabaseAtV7(db); - case 8: - return v8.DatabaseAtV8(db); - case 9: - return v9.DatabaseAtV9(db); case 10: return v10.DatabaseAtV10(db); case 11: @@ -65,6 +56,18 @@ class GeneratedHelper implements SchemaInstantiationHelper { return v18.DatabaseAtV18(db); case 19: return v19.DatabaseAtV19(db); + case 5: + return v5.DatabaseAtV5(db); + case 6: + return v6.DatabaseAtV6(db); + case 7: + return v7.DatabaseAtV7(db); + case 8: + return v8.DatabaseAtV8(db); + case 9: + return v9.DatabaseAtV9(db); + case 20: + return v20.DatabaseAtV20(db); default: throw MissingSchemaException(version, versions); } @@ -89,6 +92,7 @@ class GeneratedHelper implements SchemaInstantiationHelper { 16, 17, 18, - 19 + 19, + 20 ]; } diff --git a/test/drift/sendtrain/generated/schema_v20.dart b/test/drift/sendtrain/generated/schema_v20.dart new file mode 100644 index 0000000..ceafab7 --- /dev/null +++ b/test/drift/sendtrain/generated/schema_v20.dart @@ -0,0 +1,2219 @@ +// dart format width=80 +// GENERATED CODE, DO NOT EDIT BY HAND. +// ignore_for_file: type=lint +import 'package:drift/drift.dart'; + +class Sessions extends Table with TableInfo { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + Sessions(this.attachedDatabase, [this._alias]); + late final GeneratedColumn id = GeneratedColumn( + 'id', aliasedName, false, + hasAutoIncrement: true, + type: DriftSqlType.int, + requiredDuringInsert: false, + defaultConstraints: + GeneratedColumn.constraintIsAlways('PRIMARY KEY AUTOINCREMENT')); + late final GeneratedColumn title = GeneratedColumn( + 'title', aliasedName, false, + additionalChecks: + GeneratedColumn.checkTextLength(minTextLength: 3, maxTextLength: 32), + type: DriftSqlType.string, + requiredDuringInsert: true); + late final GeneratedColumn content = GeneratedColumn( + 'body', aliasedName, false, + type: DriftSqlType.string, requiredDuringInsert: true); + late final GeneratedColumn status = GeneratedColumn( + 'status', aliasedName, false, + type: DriftSqlType.string, requiredDuringInsert: true); + late final GeneratedColumn achievements = GeneratedColumn( + 'achievements', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false); + late final GeneratedColumn address = GeneratedColumn( + 'address', aliasedName, true, + additionalChecks: + GeneratedColumn.checkTextLength(minTextLength: 3, maxTextLength: 256), + type: DriftSqlType.string, + requiredDuringInsert: false); + late final GeneratedColumn date = GeneratedColumn( + 'date', aliasedName, true, + type: DriftSqlType.dateTime, requiredDuringInsert: false); + late final GeneratedColumn createdAt = GeneratedColumn( + 'created_at', aliasedName, false, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + defaultValue: Variable(DateTime.now())); + @override + List get $columns => + [id, title, content, status, achievements, address, date, createdAt]; + @override + String get aliasedName => _alias ?? actualTableName; + @override + String get actualTableName => $name; + static const String $name = 'sessions'; + @override + Set get $primaryKey => {id}; + @override + SessionsData map(Map data, {String? tablePrefix}) { + final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; + return SessionsData( + id: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}id'])!, + title: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}title'])!, + content: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}body'])!, + status: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}status'])!, + achievements: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}achievements']), + address: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}address']), + date: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}date']), + createdAt: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}created_at'])!, + ); + } + + @override + Sessions createAlias(String alias) { + return Sessions(attachedDatabase, alias); + } +} + +class SessionsData extends DataClass implements Insertable { + final int id; + final String title; + final String content; + final String status; + final String? achievements; + final String? address; + final DateTime? date; + final DateTime createdAt; + const SessionsData( + {required this.id, + required this.title, + required this.content, + required this.status, + this.achievements, + this.address, + this.date, + required this.createdAt}); + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + map['id'] = Variable(id); + map['title'] = Variable(title); + map['body'] = Variable(content); + map['status'] = Variable(status); + if (!nullToAbsent || achievements != null) { + map['achievements'] = Variable(achievements); + } + if (!nullToAbsent || address != null) { + map['address'] = Variable(address); + } + if (!nullToAbsent || date != null) { + map['date'] = Variable(date); + } + map['created_at'] = Variable(createdAt); + return map; + } + + SessionsCompanion toCompanion(bool nullToAbsent) { + return SessionsCompanion( + id: Value(id), + title: Value(title), + content: Value(content), + status: Value(status), + achievements: achievements == null && nullToAbsent + ? const Value.absent() + : Value(achievements), + address: address == null && nullToAbsent + ? const Value.absent() + : Value(address), + date: date == null && nullToAbsent ? const Value.absent() : Value(date), + createdAt: Value(createdAt), + ); + } + + factory SessionsData.fromJson(Map json, + {ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return SessionsData( + id: serializer.fromJson(json['id']), + title: serializer.fromJson(json['title']), + content: serializer.fromJson(json['content']), + status: serializer.fromJson(json['status']), + achievements: serializer.fromJson(json['achievements']), + address: serializer.fromJson(json['address']), + date: serializer.fromJson(json['date']), + createdAt: serializer.fromJson(json['createdAt']), + ); + } + @override + Map toJson({ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return { + 'id': serializer.toJson(id), + 'title': serializer.toJson(title), + 'content': serializer.toJson(content), + 'status': serializer.toJson(status), + 'achievements': serializer.toJson(achievements), + 'address': serializer.toJson(address), + 'date': serializer.toJson(date), + 'createdAt': serializer.toJson(createdAt), + }; + } + + SessionsData copyWith( + {int? id, + String? title, + String? content, + String? status, + Value achievements = const Value.absent(), + Value address = const Value.absent(), + Value date = const Value.absent(), + DateTime? createdAt}) => + SessionsData( + id: id ?? this.id, + title: title ?? this.title, + content: content ?? this.content, + status: status ?? this.status, + achievements: + achievements.present ? achievements.value : this.achievements, + address: address.present ? address.value : this.address, + date: date.present ? date.value : this.date, + createdAt: createdAt ?? this.createdAt, + ); + SessionsData copyWithCompanion(SessionsCompanion data) { + return SessionsData( + id: data.id.present ? data.id.value : this.id, + title: data.title.present ? data.title.value : this.title, + content: data.content.present ? data.content.value : this.content, + status: data.status.present ? data.status.value : this.status, + achievements: data.achievements.present + ? data.achievements.value + : this.achievements, + address: data.address.present ? data.address.value : this.address, + date: data.date.present ? data.date.value : this.date, + createdAt: data.createdAt.present ? data.createdAt.value : this.createdAt, + ); + } + + @override + String toString() { + return (StringBuffer('SessionsData(') + ..write('id: $id, ') + ..write('title: $title, ') + ..write('content: $content, ') + ..write('status: $status, ') + ..write('achievements: $achievements, ') + ..write('address: $address, ') + ..write('date: $date, ') + ..write('createdAt: $createdAt') + ..write(')')) + .toString(); + } + + @override + int get hashCode => Object.hash( + id, title, content, status, achievements, address, date, createdAt); + @override + bool operator ==(Object other) => + identical(this, other) || + (other is SessionsData && + other.id == this.id && + other.title == this.title && + other.content == this.content && + other.status == this.status && + other.achievements == this.achievements && + other.address == this.address && + other.date == this.date && + other.createdAt == this.createdAt); +} + +class SessionsCompanion extends UpdateCompanion { + final Value id; + final Value title; + final Value content; + final Value status; + final Value achievements; + final Value address; + final Value date; + final Value createdAt; + const SessionsCompanion({ + this.id = const Value.absent(), + this.title = const Value.absent(), + this.content = const Value.absent(), + this.status = const Value.absent(), + this.achievements = const Value.absent(), + this.address = const Value.absent(), + this.date = const Value.absent(), + this.createdAt = const Value.absent(), + }); + SessionsCompanion.insert({ + this.id = const Value.absent(), + required String title, + required String content, + required String status, + this.achievements = const Value.absent(), + this.address = const Value.absent(), + this.date = const Value.absent(), + this.createdAt = const Value.absent(), + }) : title = Value(title), + content = Value(content), + status = Value(status); + static Insertable custom({ + Expression? id, + Expression? title, + Expression? content, + Expression? status, + Expression? achievements, + Expression? address, + Expression? date, + Expression? createdAt, + }) { + return RawValuesInsertable({ + if (id != null) 'id': id, + if (title != null) 'title': title, + if (content != null) 'body': content, + if (status != null) 'status': status, + if (achievements != null) 'achievements': achievements, + if (address != null) 'address': address, + if (date != null) 'date': date, + if (createdAt != null) 'created_at': createdAt, + }); + } + + SessionsCompanion copyWith( + {Value? id, + Value? title, + Value? content, + Value? status, + Value? achievements, + Value? address, + Value? date, + Value? createdAt}) { + return SessionsCompanion( + id: id ?? this.id, + title: title ?? this.title, + content: content ?? this.content, + status: status ?? this.status, + achievements: achievements ?? this.achievements, + address: address ?? this.address, + date: date ?? this.date, + createdAt: createdAt ?? this.createdAt, + ); + } + + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (id.present) { + map['id'] = Variable(id.value); + } + if (title.present) { + map['title'] = Variable(title.value); + } + if (content.present) { + map['body'] = Variable(content.value); + } + if (status.present) { + map['status'] = Variable(status.value); + } + if (achievements.present) { + map['achievements'] = Variable(achievements.value); + } + if (address.present) { + map['address'] = Variable(address.value); + } + if (date.present) { + map['date'] = Variable(date.value); + } + if (createdAt.present) { + map['created_at'] = Variable(createdAt.value); + } + return map; + } + + @override + String toString() { + return (StringBuffer('SessionsCompanion(') + ..write('id: $id, ') + ..write('title: $title, ') + ..write('content: $content, ') + ..write('status: $status, ') + ..write('achievements: $achievements, ') + ..write('address: $address, ') + ..write('date: $date, ') + ..write('createdAt: $createdAt') + ..write(')')) + .toString(); + } +} + +class Activities extends Table with TableInfo { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + Activities(this.attachedDatabase, [this._alias]); + late final GeneratedColumn id = GeneratedColumn( + 'id', aliasedName, false, + hasAutoIncrement: true, + type: DriftSqlType.int, + requiredDuringInsert: false, + defaultConstraints: + GeneratedColumn.constraintIsAlways('PRIMARY KEY AUTOINCREMENT')); + late final GeneratedColumn title = GeneratedColumn( + 'title', aliasedName, false, + additionalChecks: + GeneratedColumn.checkTextLength(minTextLength: 3, maxTextLength: 100), + type: DriftSqlType.string, + requiredDuringInsert: true); + late final GeneratedColumn type = GeneratedColumn( + 'type', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false); + late final GeneratedColumn description = GeneratedColumn( + 'body', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false); + late final GeneratedColumn category = GeneratedColumn( + 'category', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false); + late final GeneratedColumn force = GeneratedColumn( + 'force', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false); + late final GeneratedColumn level = GeneratedColumn( + 'level', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false); + late final GeneratedColumn mechanic = GeneratedColumn( + 'mechanic', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false); + late final GeneratedColumn equipment = GeneratedColumn( + 'equipment', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false); + late final GeneratedColumn primaryMuscles = GeneratedColumn( + 'primary_muscles', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false); + late final GeneratedColumn secondaryMuscles = GeneratedColumn( + 'secondary_muscles', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false); + late final GeneratedColumn createdAt = GeneratedColumn( + 'created_at', aliasedName, false, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + defaultValue: Variable(DateTime.now())); + @override + List get $columns => [ + id, + title, + type, + description, + category, + force, + level, + mechanic, + equipment, + primaryMuscles, + secondaryMuscles, + createdAt + ]; + @override + String get aliasedName => _alias ?? actualTableName; + @override + String get actualTableName => $name; + static const String $name = 'activities'; + @override + Set get $primaryKey => {id}; + @override + ActivitiesData map(Map data, {String? tablePrefix}) { + final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; + return ActivitiesData( + id: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}id'])!, + title: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}title'])!, + type: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}type']), + description: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}body']), + category: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}category']), + force: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}force']), + level: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}level']), + mechanic: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}mechanic']), + equipment: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}equipment']), + primaryMuscles: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}primary_muscles']), + secondaryMuscles: attachedDatabase.typeMapping.read( + DriftSqlType.string, data['${effectivePrefix}secondary_muscles']), + createdAt: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}created_at'])!, + ); + } + + @override + Activities createAlias(String alias) { + return Activities(attachedDatabase, alias); + } +} + +class ActivitiesData extends DataClass implements Insertable { + final int id; + final String title; + final String? type; + final String? description; + final String? category; + final String? force; + final String? level; + final String? mechanic; + final String? equipment; + final String? primaryMuscles; + final String? secondaryMuscles; + final DateTime createdAt; + const ActivitiesData( + {required this.id, + required this.title, + this.type, + this.description, + this.category, + this.force, + this.level, + this.mechanic, + this.equipment, + this.primaryMuscles, + this.secondaryMuscles, + required this.createdAt}); + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + map['id'] = Variable(id); + map['title'] = Variable(title); + if (!nullToAbsent || type != null) { + map['type'] = Variable(type); + } + if (!nullToAbsent || description != null) { + map['body'] = Variable(description); + } + if (!nullToAbsent || category != null) { + map['category'] = Variable(category); + } + if (!nullToAbsent || force != null) { + map['force'] = Variable(force); + } + if (!nullToAbsent || level != null) { + map['level'] = Variable(level); + } + if (!nullToAbsent || mechanic != null) { + map['mechanic'] = Variable(mechanic); + } + if (!nullToAbsent || equipment != null) { + map['equipment'] = Variable(equipment); + } + if (!nullToAbsent || primaryMuscles != null) { + map['primary_muscles'] = Variable(primaryMuscles); + } + if (!nullToAbsent || secondaryMuscles != null) { + map['secondary_muscles'] = Variable(secondaryMuscles); + } + map['created_at'] = Variable(createdAt); + return map; + } + + ActivitiesCompanion toCompanion(bool nullToAbsent) { + return ActivitiesCompanion( + id: Value(id), + title: Value(title), + type: type == null && nullToAbsent ? const Value.absent() : Value(type), + description: description == null && nullToAbsent + ? const Value.absent() + : Value(description), + category: category == null && nullToAbsent + ? const Value.absent() + : Value(category), + force: + force == null && nullToAbsent ? const Value.absent() : Value(force), + level: + level == null && nullToAbsent ? const Value.absent() : Value(level), + mechanic: mechanic == null && nullToAbsent + ? const Value.absent() + : Value(mechanic), + equipment: equipment == null && nullToAbsent + ? const Value.absent() + : Value(equipment), + primaryMuscles: primaryMuscles == null && nullToAbsent + ? const Value.absent() + : Value(primaryMuscles), + secondaryMuscles: secondaryMuscles == null && nullToAbsent + ? const Value.absent() + : Value(secondaryMuscles), + createdAt: Value(createdAt), + ); + } + + factory ActivitiesData.fromJson(Map json, + {ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return ActivitiesData( + id: serializer.fromJson(json['id']), + title: serializer.fromJson(json['title']), + type: serializer.fromJson(json['type']), + description: serializer.fromJson(json['description']), + category: serializer.fromJson(json['category']), + force: serializer.fromJson(json['force']), + level: serializer.fromJson(json['level']), + mechanic: serializer.fromJson(json['mechanic']), + equipment: serializer.fromJson(json['equipment']), + primaryMuscles: serializer.fromJson(json['primaryMuscles']), + secondaryMuscles: serializer.fromJson(json['secondaryMuscles']), + createdAt: serializer.fromJson(json['createdAt']), + ); + } + @override + Map toJson({ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return { + 'id': serializer.toJson(id), + 'title': serializer.toJson(title), + 'type': serializer.toJson(type), + 'description': serializer.toJson(description), + 'category': serializer.toJson(category), + 'force': serializer.toJson(force), + 'level': serializer.toJson(level), + 'mechanic': serializer.toJson(mechanic), + 'equipment': serializer.toJson(equipment), + 'primaryMuscles': serializer.toJson(primaryMuscles), + 'secondaryMuscles': serializer.toJson(secondaryMuscles), + 'createdAt': serializer.toJson(createdAt), + }; + } + + ActivitiesData copyWith( + {int? id, + String? title, + Value type = const Value.absent(), + Value description = const Value.absent(), + Value category = const Value.absent(), + Value force = const Value.absent(), + Value level = const Value.absent(), + Value mechanic = const Value.absent(), + Value equipment = const Value.absent(), + Value primaryMuscles = const Value.absent(), + Value secondaryMuscles = const Value.absent(), + DateTime? createdAt}) => + ActivitiesData( + id: id ?? this.id, + title: title ?? this.title, + type: type.present ? type.value : this.type, + description: description.present ? description.value : this.description, + category: category.present ? category.value : this.category, + force: force.present ? force.value : this.force, + level: level.present ? level.value : this.level, + mechanic: mechanic.present ? mechanic.value : this.mechanic, + equipment: equipment.present ? equipment.value : this.equipment, + primaryMuscles: + primaryMuscles.present ? primaryMuscles.value : this.primaryMuscles, + secondaryMuscles: secondaryMuscles.present + ? secondaryMuscles.value + : this.secondaryMuscles, + createdAt: createdAt ?? this.createdAt, + ); + ActivitiesData copyWithCompanion(ActivitiesCompanion data) { + return ActivitiesData( + id: data.id.present ? data.id.value : this.id, + title: data.title.present ? data.title.value : this.title, + type: data.type.present ? data.type.value : this.type, + description: + data.description.present ? data.description.value : this.description, + category: data.category.present ? data.category.value : this.category, + force: data.force.present ? data.force.value : this.force, + level: data.level.present ? data.level.value : this.level, + mechanic: data.mechanic.present ? data.mechanic.value : this.mechanic, + equipment: data.equipment.present ? data.equipment.value : this.equipment, + primaryMuscles: data.primaryMuscles.present + ? data.primaryMuscles.value + : this.primaryMuscles, + secondaryMuscles: data.secondaryMuscles.present + ? data.secondaryMuscles.value + : this.secondaryMuscles, + createdAt: data.createdAt.present ? data.createdAt.value : this.createdAt, + ); + } + + @override + String toString() { + return (StringBuffer('ActivitiesData(') + ..write('id: $id, ') + ..write('title: $title, ') + ..write('type: $type, ') + ..write('description: $description, ') + ..write('category: $category, ') + ..write('force: $force, ') + ..write('level: $level, ') + ..write('mechanic: $mechanic, ') + ..write('equipment: $equipment, ') + ..write('primaryMuscles: $primaryMuscles, ') + ..write('secondaryMuscles: $secondaryMuscles, ') + ..write('createdAt: $createdAt') + ..write(')')) + .toString(); + } + + @override + int get hashCode => Object.hash(id, title, type, description, category, force, + level, mechanic, equipment, primaryMuscles, secondaryMuscles, createdAt); + @override + bool operator ==(Object other) => + identical(this, other) || + (other is ActivitiesData && + other.id == this.id && + other.title == this.title && + other.type == this.type && + other.description == this.description && + other.category == this.category && + other.force == this.force && + other.level == this.level && + other.mechanic == this.mechanic && + other.equipment == this.equipment && + other.primaryMuscles == this.primaryMuscles && + other.secondaryMuscles == this.secondaryMuscles && + other.createdAt == this.createdAt); +} + +class ActivitiesCompanion extends UpdateCompanion { + final Value id; + final Value title; + final Value type; + final Value description; + final Value category; + final Value force; + final Value level; + final Value mechanic; + final Value equipment; + final Value primaryMuscles; + final Value secondaryMuscles; + final Value createdAt; + const ActivitiesCompanion({ + this.id = const Value.absent(), + this.title = const Value.absent(), + this.type = const Value.absent(), + this.description = const Value.absent(), + this.category = const Value.absent(), + this.force = const Value.absent(), + this.level = const Value.absent(), + this.mechanic = const Value.absent(), + this.equipment = const Value.absent(), + this.primaryMuscles = const Value.absent(), + this.secondaryMuscles = const Value.absent(), + this.createdAt = const Value.absent(), + }); + ActivitiesCompanion.insert({ + this.id = const Value.absent(), + required String title, + this.type = const Value.absent(), + this.description = const Value.absent(), + this.category = const Value.absent(), + this.force = const Value.absent(), + this.level = const Value.absent(), + this.mechanic = const Value.absent(), + this.equipment = const Value.absent(), + this.primaryMuscles = const Value.absent(), + this.secondaryMuscles = const Value.absent(), + this.createdAt = const Value.absent(), + }) : title = Value(title); + static Insertable custom({ + Expression? id, + Expression? title, + Expression? type, + Expression? description, + Expression? category, + Expression? force, + Expression? level, + Expression? mechanic, + Expression? equipment, + Expression? primaryMuscles, + Expression? secondaryMuscles, + Expression? createdAt, + }) { + return RawValuesInsertable({ + if (id != null) 'id': id, + if (title != null) 'title': title, + if (type != null) 'type': type, + if (description != null) 'body': description, + if (category != null) 'category': category, + if (force != null) 'force': force, + if (level != null) 'level': level, + if (mechanic != null) 'mechanic': mechanic, + if (equipment != null) 'equipment': equipment, + if (primaryMuscles != null) 'primary_muscles': primaryMuscles, + if (secondaryMuscles != null) 'secondary_muscles': secondaryMuscles, + if (createdAt != null) 'created_at': createdAt, + }); + } + + ActivitiesCompanion copyWith( + {Value? id, + Value? title, + Value? type, + Value? description, + Value? category, + Value? force, + Value? level, + Value? mechanic, + Value? equipment, + Value? primaryMuscles, + Value? secondaryMuscles, + Value? createdAt}) { + return ActivitiesCompanion( + id: id ?? this.id, + title: title ?? this.title, + type: type ?? this.type, + description: description ?? this.description, + category: category ?? this.category, + force: force ?? this.force, + level: level ?? this.level, + mechanic: mechanic ?? this.mechanic, + equipment: equipment ?? this.equipment, + primaryMuscles: primaryMuscles ?? this.primaryMuscles, + secondaryMuscles: secondaryMuscles ?? this.secondaryMuscles, + createdAt: createdAt ?? this.createdAt, + ); + } + + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (id.present) { + map['id'] = Variable(id.value); + } + if (title.present) { + map['title'] = Variable(title.value); + } + if (type.present) { + map['type'] = Variable(type.value); + } + if (description.present) { + map['body'] = Variable(description.value); + } + if (category.present) { + map['category'] = Variable(category.value); + } + if (force.present) { + map['force'] = Variable(force.value); + } + if (level.present) { + map['level'] = Variable(level.value); + } + if (mechanic.present) { + map['mechanic'] = Variable(mechanic.value); + } + if (equipment.present) { + map['equipment'] = Variable(equipment.value); + } + if (primaryMuscles.present) { + map['primary_muscles'] = Variable(primaryMuscles.value); + } + if (secondaryMuscles.present) { + map['secondary_muscles'] = Variable(secondaryMuscles.value); + } + if (createdAt.present) { + map['created_at'] = Variable(createdAt.value); + } + return map; + } + + @override + String toString() { + return (StringBuffer('ActivitiesCompanion(') + ..write('id: $id, ') + ..write('title: $title, ') + ..write('type: $type, ') + ..write('description: $description, ') + ..write('category: $category, ') + ..write('force: $force, ') + ..write('level: $level, ') + ..write('mechanic: $mechanic, ') + ..write('equipment: $equipment, ') + ..write('primaryMuscles: $primaryMuscles, ') + ..write('secondaryMuscles: $secondaryMuscles, ') + ..write('createdAt: $createdAt') + ..write(')')) + .toString(); + } +} + +class SessionActivities extends Table + with TableInfo { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + SessionActivities(this.attachedDatabase, [this._alias]); + late final GeneratedColumn id = GeneratedColumn( + 'id', aliasedName, false, + hasAutoIncrement: true, + type: DriftSqlType.int, + requiredDuringInsert: false, + defaultConstraints: + GeneratedColumn.constraintIsAlways('PRIMARY KEY AUTOINCREMENT')); + late final GeneratedColumn sessionId = GeneratedColumn( + 'session_id', aliasedName, false, + type: DriftSqlType.int, + requiredDuringInsert: true, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'REFERENCES sessions (id) ON DELETE CASCADE')); + late final GeneratedColumn activityId = GeneratedColumn( + 'activity_id', aliasedName, false, + type: DriftSqlType.int, + requiredDuringInsert: true, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'REFERENCES activities (id) ON DELETE CASCADE')); + late final GeneratedColumn position = GeneratedColumn( + 'position', aliasedName, false, + type: DriftSqlType.int, requiredDuringInsert: true); + late final GeneratedColumn results = GeneratedColumn( + 'results', aliasedName, true, + type: DriftSqlType.string, requiredDuringInsert: false); + late final GeneratedColumn createdAt = GeneratedColumn( + 'created_at', aliasedName, false, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + defaultValue: Variable(DateTime.now())); + @override + List get $columns => + [id, sessionId, activityId, position, results, createdAt]; + @override + String get aliasedName => _alias ?? actualTableName; + @override + String get actualTableName => $name; + static const String $name = 'session_activities'; + @override + Set get $primaryKey => {id}; + @override + SessionActivitiesData map(Map data, {String? tablePrefix}) { + final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; + return SessionActivitiesData( + id: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}id'])!, + sessionId: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}session_id'])!, + activityId: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}activity_id'])!, + position: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}position'])!, + results: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}results']), + createdAt: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}created_at'])!, + ); + } + + @override + SessionActivities createAlias(String alias) { + return SessionActivities(attachedDatabase, alias); + } +} + +class SessionActivitiesData extends DataClass + implements Insertable { + final int id; + final int sessionId; + final int activityId; + final int position; + final String? results; + final DateTime createdAt; + const SessionActivitiesData( + {required this.id, + required this.sessionId, + required this.activityId, + required this.position, + this.results, + required this.createdAt}); + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + map['id'] = Variable(id); + map['session_id'] = Variable(sessionId); + map['activity_id'] = Variable(activityId); + map['position'] = Variable(position); + if (!nullToAbsent || results != null) { + map['results'] = Variable(results); + } + map['created_at'] = Variable(createdAt); + return map; + } + + SessionActivitiesCompanion toCompanion(bool nullToAbsent) { + return SessionActivitiesCompanion( + id: Value(id), + sessionId: Value(sessionId), + activityId: Value(activityId), + position: Value(position), + results: results == null && nullToAbsent + ? const Value.absent() + : Value(results), + createdAt: Value(createdAt), + ); + } + + factory SessionActivitiesData.fromJson(Map json, + {ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return SessionActivitiesData( + id: serializer.fromJson(json['id']), + sessionId: serializer.fromJson(json['sessionId']), + activityId: serializer.fromJson(json['activityId']), + position: serializer.fromJson(json['position']), + results: serializer.fromJson(json['results']), + createdAt: serializer.fromJson(json['createdAt']), + ); + } + @override + Map toJson({ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return { + 'id': serializer.toJson(id), + 'sessionId': serializer.toJson(sessionId), + 'activityId': serializer.toJson(activityId), + 'position': serializer.toJson(position), + 'results': serializer.toJson(results), + 'createdAt': serializer.toJson(createdAt), + }; + } + + SessionActivitiesData copyWith( + {int? id, + int? sessionId, + int? activityId, + int? position, + Value results = const Value.absent(), + DateTime? createdAt}) => + SessionActivitiesData( + id: id ?? this.id, + sessionId: sessionId ?? this.sessionId, + activityId: activityId ?? this.activityId, + position: position ?? this.position, + results: results.present ? results.value : this.results, + createdAt: createdAt ?? this.createdAt, + ); + SessionActivitiesData copyWithCompanion(SessionActivitiesCompanion data) { + return SessionActivitiesData( + id: data.id.present ? data.id.value : this.id, + sessionId: data.sessionId.present ? data.sessionId.value : this.sessionId, + activityId: + data.activityId.present ? data.activityId.value : this.activityId, + position: data.position.present ? data.position.value : this.position, + results: data.results.present ? data.results.value : this.results, + createdAt: data.createdAt.present ? data.createdAt.value : this.createdAt, + ); + } + + @override + String toString() { + return (StringBuffer('SessionActivitiesData(') + ..write('id: $id, ') + ..write('sessionId: $sessionId, ') + ..write('activityId: $activityId, ') + ..write('position: $position, ') + ..write('results: $results, ') + ..write('createdAt: $createdAt') + ..write(')')) + .toString(); + } + + @override + int get hashCode => + Object.hash(id, sessionId, activityId, position, results, createdAt); + @override + bool operator ==(Object other) => + identical(this, other) || + (other is SessionActivitiesData && + other.id == this.id && + other.sessionId == this.sessionId && + other.activityId == this.activityId && + other.position == this.position && + other.results == this.results && + other.createdAt == this.createdAt); +} + +class SessionActivitiesCompanion + extends UpdateCompanion { + final Value id; + final Value sessionId; + final Value activityId; + final Value position; + final Value results; + final Value createdAt; + const SessionActivitiesCompanion({ + this.id = const Value.absent(), + this.sessionId = const Value.absent(), + this.activityId = const Value.absent(), + this.position = const Value.absent(), + this.results = const Value.absent(), + this.createdAt = const Value.absent(), + }); + SessionActivitiesCompanion.insert({ + this.id = const Value.absent(), + required int sessionId, + required int activityId, + required int position, + this.results = const Value.absent(), + this.createdAt = const Value.absent(), + }) : sessionId = Value(sessionId), + activityId = Value(activityId), + position = Value(position); + static Insertable custom({ + Expression? id, + Expression? sessionId, + Expression? activityId, + Expression? position, + Expression? results, + Expression? createdAt, + }) { + return RawValuesInsertable({ + if (id != null) 'id': id, + if (sessionId != null) 'session_id': sessionId, + if (activityId != null) 'activity_id': activityId, + if (position != null) 'position': position, + if (results != null) 'results': results, + if (createdAt != null) 'created_at': createdAt, + }); + } + + SessionActivitiesCompanion copyWith( + {Value? id, + Value? sessionId, + Value? activityId, + Value? position, + Value? results, + Value? createdAt}) { + return SessionActivitiesCompanion( + id: id ?? this.id, + sessionId: sessionId ?? this.sessionId, + activityId: activityId ?? this.activityId, + position: position ?? this.position, + results: results ?? this.results, + createdAt: createdAt ?? this.createdAt, + ); + } + + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (id.present) { + map['id'] = Variable(id.value); + } + if (sessionId.present) { + map['session_id'] = Variable(sessionId.value); + } + if (activityId.present) { + map['activity_id'] = Variable(activityId.value); + } + if (position.present) { + map['position'] = Variable(position.value); + } + if (results.present) { + map['results'] = Variable(results.value); + } + if (createdAt.present) { + map['created_at'] = Variable(createdAt.value); + } + return map; + } + + @override + String toString() { + return (StringBuffer('SessionActivitiesCompanion(') + ..write('id: $id, ') + ..write('sessionId: $sessionId, ') + ..write('activityId: $activityId, ') + ..write('position: $position, ') + ..write('results: $results, ') + ..write('createdAt: $createdAt') + ..write(')')) + .toString(); + } +} + +class Actions extends Table with TableInfo { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + Actions(this.attachedDatabase, [this._alias]); + late final GeneratedColumn id = GeneratedColumn( + 'id', aliasedName, false, + hasAutoIncrement: true, + type: DriftSqlType.int, + requiredDuringInsert: false, + defaultConstraints: + GeneratedColumn.constraintIsAlways('PRIMARY KEY AUTOINCREMENT')); + late final GeneratedColumn title = GeneratedColumn( + 'title', aliasedName, false, + additionalChecks: + GeneratedColumn.checkTextLength(minTextLength: 3, maxTextLength: 32), + type: DriftSqlType.string, + requiredDuringInsert: true); + late final GeneratedColumn description = GeneratedColumn( + 'body', aliasedName, false, + type: DriftSqlType.string, requiredDuringInsert: true); + late final GeneratedColumn set = GeneratedColumn( + 'set', aliasedName, false, + type: DriftSqlType.string, requiredDuringInsert: true); + late final GeneratedColumn createdAt = GeneratedColumn( + 'created_at', aliasedName, false, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + defaultValue: Variable(DateTime.now())); + @override + List get $columns => + [id, title, description, set, createdAt]; + @override + String get aliasedName => _alias ?? actualTableName; + @override + String get actualTableName => $name; + static const String $name = 'actions'; + @override + Set get $primaryKey => {id}; + @override + ActionsData map(Map data, {String? tablePrefix}) { + final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; + return ActionsData( + id: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}id'])!, + title: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}title'])!, + description: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}body'])!, + set: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}set'])!, + createdAt: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}created_at'])!, + ); + } + + @override + Actions createAlias(String alias) { + return Actions(attachedDatabase, alias); + } +} + +class ActionsData extends DataClass implements Insertable { + final int id; + final String title; + final String description; + final String set; + final DateTime createdAt; + const ActionsData( + {required this.id, + required this.title, + required this.description, + required this.set, + required this.createdAt}); + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + map['id'] = Variable(id); + map['title'] = Variable(title); + map['body'] = Variable(description); + map['set'] = Variable(set); + map['created_at'] = Variable(createdAt); + return map; + } + + ActionsCompanion toCompanion(bool nullToAbsent) { + return ActionsCompanion( + id: Value(id), + title: Value(title), + description: Value(description), + set: Value(set), + createdAt: Value(createdAt), + ); + } + + factory ActionsData.fromJson(Map json, + {ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return ActionsData( + id: serializer.fromJson(json['id']), + title: serializer.fromJson(json['title']), + description: serializer.fromJson(json['description']), + set: serializer.fromJson(json['set']), + createdAt: serializer.fromJson(json['createdAt']), + ); + } + @override + Map toJson({ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return { + 'id': serializer.toJson(id), + 'title': serializer.toJson(title), + 'description': serializer.toJson(description), + 'set': serializer.toJson(set), + 'createdAt': serializer.toJson(createdAt), + }; + } + + ActionsData copyWith( + {int? id, + String? title, + String? description, + String? set, + DateTime? createdAt}) => + ActionsData( + id: id ?? this.id, + title: title ?? this.title, + description: description ?? this.description, + set: set ?? this.set, + createdAt: createdAt ?? this.createdAt, + ); + ActionsData copyWithCompanion(ActionsCompanion data) { + return ActionsData( + id: data.id.present ? data.id.value : this.id, + title: data.title.present ? data.title.value : this.title, + description: + data.description.present ? data.description.value : this.description, + set: data.set.present ? data.set.value : this.set, + createdAt: data.createdAt.present ? data.createdAt.value : this.createdAt, + ); + } + + @override + String toString() { + return (StringBuffer('ActionsData(') + ..write('id: $id, ') + ..write('title: $title, ') + ..write('description: $description, ') + ..write('set: $set, ') + ..write('createdAt: $createdAt') + ..write(')')) + .toString(); + } + + @override + int get hashCode => Object.hash(id, title, description, set, createdAt); + @override + bool operator ==(Object other) => + identical(this, other) || + (other is ActionsData && + other.id == this.id && + other.title == this.title && + other.description == this.description && + other.set == this.set && + other.createdAt == this.createdAt); +} + +class ActionsCompanion extends UpdateCompanion { + final Value id; + final Value title; + final Value description; + final Value set; + final Value createdAt; + const ActionsCompanion({ + this.id = const Value.absent(), + this.title = const Value.absent(), + this.description = const Value.absent(), + this.set = const Value.absent(), + this.createdAt = const Value.absent(), + }); + ActionsCompanion.insert({ + this.id = const Value.absent(), + required String title, + required String description, + required String set, + this.createdAt = const Value.absent(), + }) : title = Value(title), + description = Value(description), + set = Value(set); + static Insertable custom({ + Expression? id, + Expression? title, + Expression? description, + Expression? set, + Expression? createdAt, + }) { + return RawValuesInsertable({ + if (id != null) 'id': id, + if (title != null) 'title': title, + if (description != null) 'body': description, + if (set != null) 'set': set, + if (createdAt != null) 'created_at': createdAt, + }); + } + + ActionsCompanion copyWith( + {Value? id, + Value? title, + Value? description, + Value? set, + Value? createdAt}) { + return ActionsCompanion( + id: id ?? this.id, + title: title ?? this.title, + description: description ?? this.description, + set: set ?? this.set, + createdAt: createdAt ?? this.createdAt, + ); + } + + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (id.present) { + map['id'] = Variable(id.value); + } + if (title.present) { + map['title'] = Variable(title.value); + } + if (description.present) { + map['body'] = Variable(description.value); + } + if (set.present) { + map['set'] = Variable(set.value); + } + if (createdAt.present) { + map['created_at'] = Variable(createdAt.value); + } + return map; + } + + @override + String toString() { + return (StringBuffer('ActionsCompanion(') + ..write('id: $id, ') + ..write('title: $title, ') + ..write('description: $description, ') + ..write('set: $set, ') + ..write('createdAt: $createdAt') + ..write(')')) + .toString(); + } +} + +class ActivityActions extends Table + with TableInfo { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + ActivityActions(this.attachedDatabase, [this._alias]); + late final GeneratedColumn id = GeneratedColumn( + 'id', aliasedName, false, + hasAutoIncrement: true, + type: DriftSqlType.int, + requiredDuringInsert: false, + defaultConstraints: + GeneratedColumn.constraintIsAlways('PRIMARY KEY AUTOINCREMENT')); + late final GeneratedColumn activityId = GeneratedColumn( + 'activity_id', aliasedName, false, + type: DriftSqlType.int, + requiredDuringInsert: true, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'REFERENCES activities (id) ON DELETE CASCADE')); + late final GeneratedColumn actionId = GeneratedColumn( + 'action_id', aliasedName, false, + type: DriftSqlType.int, + requiredDuringInsert: true, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'REFERENCES actions (id) ON DELETE CASCADE')); + late final GeneratedColumn position = GeneratedColumn( + 'position', aliasedName, false, + type: DriftSqlType.int, requiredDuringInsert: true); + late final GeneratedColumn createdAt = GeneratedColumn( + 'created_at', aliasedName, false, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + defaultValue: Variable(DateTime.now())); + @override + List get $columns => + [id, activityId, actionId, position, createdAt]; + @override + String get aliasedName => _alias ?? actualTableName; + @override + String get actualTableName => $name; + static const String $name = 'activity_actions'; + @override + Set get $primaryKey => {id}; + @override + ActivityActionsData map(Map data, {String? tablePrefix}) { + final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; + return ActivityActionsData( + id: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}id'])!, + activityId: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}activity_id'])!, + actionId: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}action_id'])!, + position: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}position'])!, + createdAt: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}created_at'])!, + ); + } + + @override + ActivityActions createAlias(String alias) { + return ActivityActions(attachedDatabase, alias); + } +} + +class ActivityActionsData extends DataClass + implements Insertable { + final int id; + final int activityId; + final int actionId; + final int position; + final DateTime createdAt; + const ActivityActionsData( + {required this.id, + required this.activityId, + required this.actionId, + required this.position, + required this.createdAt}); + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + map['id'] = Variable(id); + map['activity_id'] = Variable(activityId); + map['action_id'] = Variable(actionId); + map['position'] = Variable(position); + map['created_at'] = Variable(createdAt); + return map; + } + + ActivityActionsCompanion toCompanion(bool nullToAbsent) { + return ActivityActionsCompanion( + id: Value(id), + activityId: Value(activityId), + actionId: Value(actionId), + position: Value(position), + createdAt: Value(createdAt), + ); + } + + factory ActivityActionsData.fromJson(Map json, + {ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return ActivityActionsData( + id: serializer.fromJson(json['id']), + activityId: serializer.fromJson(json['activityId']), + actionId: serializer.fromJson(json['actionId']), + position: serializer.fromJson(json['position']), + createdAt: serializer.fromJson(json['createdAt']), + ); + } + @override + Map toJson({ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return { + 'id': serializer.toJson(id), + 'activityId': serializer.toJson(activityId), + 'actionId': serializer.toJson(actionId), + 'position': serializer.toJson(position), + 'createdAt': serializer.toJson(createdAt), + }; + } + + ActivityActionsData copyWith( + {int? id, + int? activityId, + int? actionId, + int? position, + DateTime? createdAt}) => + ActivityActionsData( + id: id ?? this.id, + activityId: activityId ?? this.activityId, + actionId: actionId ?? this.actionId, + position: position ?? this.position, + createdAt: createdAt ?? this.createdAt, + ); + ActivityActionsData copyWithCompanion(ActivityActionsCompanion data) { + return ActivityActionsData( + id: data.id.present ? data.id.value : this.id, + activityId: + data.activityId.present ? data.activityId.value : this.activityId, + actionId: data.actionId.present ? data.actionId.value : this.actionId, + position: data.position.present ? data.position.value : this.position, + createdAt: data.createdAt.present ? data.createdAt.value : this.createdAt, + ); + } + + @override + String toString() { + return (StringBuffer('ActivityActionsData(') + ..write('id: $id, ') + ..write('activityId: $activityId, ') + ..write('actionId: $actionId, ') + ..write('position: $position, ') + ..write('createdAt: $createdAt') + ..write(')')) + .toString(); + } + + @override + int get hashCode => + Object.hash(id, activityId, actionId, position, createdAt); + @override + bool operator ==(Object other) => + identical(this, other) || + (other is ActivityActionsData && + other.id == this.id && + other.activityId == this.activityId && + other.actionId == this.actionId && + other.position == this.position && + other.createdAt == this.createdAt); +} + +class ActivityActionsCompanion extends UpdateCompanion { + final Value id; + final Value activityId; + final Value actionId; + final Value position; + final Value createdAt; + const ActivityActionsCompanion({ + this.id = const Value.absent(), + this.activityId = const Value.absent(), + this.actionId = const Value.absent(), + this.position = const Value.absent(), + this.createdAt = const Value.absent(), + }); + ActivityActionsCompanion.insert({ + this.id = const Value.absent(), + required int activityId, + required int actionId, + required int position, + this.createdAt = const Value.absent(), + }) : activityId = Value(activityId), + actionId = Value(actionId), + position = Value(position); + static Insertable custom({ + Expression? id, + Expression? activityId, + Expression? actionId, + Expression? position, + Expression? createdAt, + }) { + return RawValuesInsertable({ + if (id != null) 'id': id, + if (activityId != null) 'activity_id': activityId, + if (actionId != null) 'action_id': actionId, + if (position != null) 'position': position, + if (createdAt != null) 'created_at': createdAt, + }); + } + + ActivityActionsCompanion copyWith( + {Value? id, + Value? activityId, + Value? actionId, + Value? position, + Value? createdAt}) { + return ActivityActionsCompanion( + id: id ?? this.id, + activityId: activityId ?? this.activityId, + actionId: actionId ?? this.actionId, + position: position ?? this.position, + createdAt: createdAt ?? this.createdAt, + ); + } + + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (id.present) { + map['id'] = Variable(id.value); + } + if (activityId.present) { + map['activity_id'] = Variable(activityId.value); + } + if (actionId.present) { + map['action_id'] = Variable(actionId.value); + } + if (position.present) { + map['position'] = Variable(position.value); + } + if (createdAt.present) { + map['created_at'] = Variable(createdAt.value); + } + return map; + } + + @override + String toString() { + return (StringBuffer('ActivityActionsCompanion(') + ..write('id: $id, ') + ..write('activityId: $activityId, ') + ..write('actionId: $actionId, ') + ..write('position: $position, ') + ..write('createdAt: $createdAt') + ..write(')')) + .toString(); + } +} + +class MediaItems extends Table with TableInfo { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + MediaItems(this.attachedDatabase, [this._alias]); + late final GeneratedColumn id = GeneratedColumn( + 'id', aliasedName, false, + hasAutoIncrement: true, + type: DriftSqlType.int, + requiredDuringInsert: false, + defaultConstraints: + GeneratedColumn.constraintIsAlways('PRIMARY KEY AUTOINCREMENT')); + late final GeneratedColumn title = GeneratedColumn( + 'title', aliasedName, false, + additionalChecks: + GeneratedColumn.checkTextLength(minTextLength: 3, maxTextLength: 64), + type: DriftSqlType.string, + requiredDuringInsert: true); + late final GeneratedColumn description = GeneratedColumn( + 'body', aliasedName, false, + type: DriftSqlType.string, requiredDuringInsert: true); + late final GeneratedColumn reference = GeneratedColumn( + 'reference', aliasedName, false, + type: DriftSqlType.string, requiredDuringInsert: true); + late final GeneratedColumn type = GeneratedColumn( + 'type', aliasedName, false, + type: DriftSqlType.string, requiredDuringInsert: true); + late final GeneratedColumn createdAt = GeneratedColumn( + 'created_at', aliasedName, false, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + defaultValue: Variable(DateTime.now())); + @override + List get $columns => + [id, title, description, reference, type, createdAt]; + @override + String get aliasedName => _alias ?? actualTableName; + @override + String get actualTableName => $name; + static const String $name = 'media_items'; + @override + Set get $primaryKey => {id}; + @override + MediaItemsData map(Map data, {String? tablePrefix}) { + final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; + return MediaItemsData( + id: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}id'])!, + title: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}title'])!, + description: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}body'])!, + reference: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}reference'])!, + type: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}type'])!, + createdAt: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}created_at'])!, + ); + } + + @override + MediaItems createAlias(String alias) { + return MediaItems(attachedDatabase, alias); + } +} + +class MediaItemsData extends DataClass implements Insertable { + final int id; + final String title; + final String description; + final String reference; + final String type; + final DateTime createdAt; + const MediaItemsData( + {required this.id, + required this.title, + required this.description, + required this.reference, + required this.type, + required this.createdAt}); + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + map['id'] = Variable(id); + map['title'] = Variable(title); + map['body'] = Variable(description); + map['reference'] = Variable(reference); + map['type'] = Variable(type); + map['created_at'] = Variable(createdAt); + return map; + } + + MediaItemsCompanion toCompanion(bool nullToAbsent) { + return MediaItemsCompanion( + id: Value(id), + title: Value(title), + description: Value(description), + reference: Value(reference), + type: Value(type), + createdAt: Value(createdAt), + ); + } + + factory MediaItemsData.fromJson(Map json, + {ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return MediaItemsData( + id: serializer.fromJson(json['id']), + title: serializer.fromJson(json['title']), + description: serializer.fromJson(json['description']), + reference: serializer.fromJson(json['reference']), + type: serializer.fromJson(json['type']), + createdAt: serializer.fromJson(json['createdAt']), + ); + } + @override + Map toJson({ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return { + 'id': serializer.toJson(id), + 'title': serializer.toJson(title), + 'description': serializer.toJson(description), + 'reference': serializer.toJson(reference), + 'type': serializer.toJson(type), + 'createdAt': serializer.toJson(createdAt), + }; + } + + MediaItemsData copyWith( + {int? id, + String? title, + String? description, + String? reference, + String? type, + DateTime? createdAt}) => + MediaItemsData( + id: id ?? this.id, + title: title ?? this.title, + description: description ?? this.description, + reference: reference ?? this.reference, + type: type ?? this.type, + createdAt: createdAt ?? this.createdAt, + ); + MediaItemsData copyWithCompanion(MediaItemsCompanion data) { + return MediaItemsData( + id: data.id.present ? data.id.value : this.id, + title: data.title.present ? data.title.value : this.title, + description: + data.description.present ? data.description.value : this.description, + reference: data.reference.present ? data.reference.value : this.reference, + type: data.type.present ? data.type.value : this.type, + createdAt: data.createdAt.present ? data.createdAt.value : this.createdAt, + ); + } + + @override + String toString() { + return (StringBuffer('MediaItemsData(') + ..write('id: $id, ') + ..write('title: $title, ') + ..write('description: $description, ') + ..write('reference: $reference, ') + ..write('type: $type, ') + ..write('createdAt: $createdAt') + ..write(')')) + .toString(); + } + + @override + int get hashCode => + Object.hash(id, title, description, reference, type, createdAt); + @override + bool operator ==(Object other) => + identical(this, other) || + (other is MediaItemsData && + other.id == this.id && + other.title == this.title && + other.description == this.description && + other.reference == this.reference && + other.type == this.type && + other.createdAt == this.createdAt); +} + +class MediaItemsCompanion extends UpdateCompanion { + final Value id; + final Value title; + final Value description; + final Value reference; + final Value type; + final Value createdAt; + const MediaItemsCompanion({ + this.id = const Value.absent(), + this.title = const Value.absent(), + this.description = const Value.absent(), + this.reference = const Value.absent(), + this.type = const Value.absent(), + this.createdAt = const Value.absent(), + }); + MediaItemsCompanion.insert({ + this.id = const Value.absent(), + required String title, + required String description, + required String reference, + required String type, + this.createdAt = const Value.absent(), + }) : title = Value(title), + description = Value(description), + reference = Value(reference), + type = Value(type); + static Insertable custom({ + Expression? id, + Expression? title, + Expression? description, + Expression? reference, + Expression? type, + Expression? createdAt, + }) { + return RawValuesInsertable({ + if (id != null) 'id': id, + if (title != null) 'title': title, + if (description != null) 'body': description, + if (reference != null) 'reference': reference, + if (type != null) 'type': type, + if (createdAt != null) 'created_at': createdAt, + }); + } + + MediaItemsCompanion copyWith( + {Value? id, + Value? title, + Value? description, + Value? reference, + Value? type, + Value? createdAt}) { + return MediaItemsCompanion( + id: id ?? this.id, + title: title ?? this.title, + description: description ?? this.description, + reference: reference ?? this.reference, + type: type ?? this.type, + createdAt: createdAt ?? this.createdAt, + ); + } + + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (id.present) { + map['id'] = Variable(id.value); + } + if (title.present) { + map['title'] = Variable(title.value); + } + if (description.present) { + map['body'] = Variable(description.value); + } + if (reference.present) { + map['reference'] = Variable(reference.value); + } + if (type.present) { + map['type'] = Variable(type.value); + } + if (createdAt.present) { + map['created_at'] = Variable(createdAt.value); + } + return map; + } + + @override + String toString() { + return (StringBuffer('MediaItemsCompanion(') + ..write('id: $id, ') + ..write('title: $title, ') + ..write('description: $description, ') + ..write('reference: $reference, ') + ..write('type: $type, ') + ..write('createdAt: $createdAt') + ..write(')')) + .toString(); + } +} + +class ObjectMediaItems extends Table + with TableInfo { + @override + final GeneratedDatabase attachedDatabase; + final String? _alias; + ObjectMediaItems(this.attachedDatabase, [this._alias]); + late final GeneratedColumn id = GeneratedColumn( + 'id', aliasedName, false, + hasAutoIncrement: true, + type: DriftSqlType.int, + requiredDuringInsert: false, + defaultConstraints: + GeneratedColumn.constraintIsAlways('PRIMARY KEY AUTOINCREMENT')); + late final GeneratedColumn objectId = GeneratedColumn( + 'object_id', aliasedName, false, + type: DriftSqlType.int, requiredDuringInsert: true); + late final GeneratedColumn objectType = GeneratedColumn( + 'object_type', aliasedName, false, + type: DriftSqlType.string, requiredDuringInsert: true); + late final GeneratedColumn mediaId = GeneratedColumn( + 'media_id', aliasedName, false, + type: DriftSqlType.int, + requiredDuringInsert: true, + defaultConstraints: GeneratedColumn.constraintIsAlways( + 'REFERENCES media_items (id) ON DELETE CASCADE')); + late final GeneratedColumn createdAt = GeneratedColumn( + 'created_at', aliasedName, false, + type: DriftSqlType.dateTime, + requiredDuringInsert: false, + defaultValue: Variable(DateTime.now())); + @override + List get $columns => + [id, objectId, objectType, mediaId, createdAt]; + @override + String get aliasedName => _alias ?? actualTableName; + @override + String get actualTableName => $name; + static const String $name = 'object_media_items'; + @override + Set get $primaryKey => {id}; + @override + ObjectMediaItemsData map(Map data, {String? tablePrefix}) { + final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; + return ObjectMediaItemsData( + id: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}id'])!, + objectId: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}object_id'])!, + objectType: attachedDatabase.typeMapping + .read(DriftSqlType.string, data['${effectivePrefix}object_type'])!, + mediaId: attachedDatabase.typeMapping + .read(DriftSqlType.int, data['${effectivePrefix}media_id'])!, + createdAt: attachedDatabase.typeMapping + .read(DriftSqlType.dateTime, data['${effectivePrefix}created_at'])!, + ); + } + + @override + ObjectMediaItems createAlias(String alias) { + return ObjectMediaItems(attachedDatabase, alias); + } +} + +class ObjectMediaItemsData extends DataClass + implements Insertable { + final int id; + final int objectId; + final String objectType; + final int mediaId; + final DateTime createdAt; + const ObjectMediaItemsData( + {required this.id, + required this.objectId, + required this.objectType, + required this.mediaId, + required this.createdAt}); + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + map['id'] = Variable(id); + map['object_id'] = Variable(objectId); + map['object_type'] = Variable(objectType); + map['media_id'] = Variable(mediaId); + map['created_at'] = Variable(createdAt); + return map; + } + + ObjectMediaItemsCompanion toCompanion(bool nullToAbsent) { + return ObjectMediaItemsCompanion( + id: Value(id), + objectId: Value(objectId), + objectType: Value(objectType), + mediaId: Value(mediaId), + createdAt: Value(createdAt), + ); + } + + factory ObjectMediaItemsData.fromJson(Map json, + {ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return ObjectMediaItemsData( + id: serializer.fromJson(json['id']), + objectId: serializer.fromJson(json['objectId']), + objectType: serializer.fromJson(json['objectType']), + mediaId: serializer.fromJson(json['mediaId']), + createdAt: serializer.fromJson(json['createdAt']), + ); + } + @override + Map toJson({ValueSerializer? serializer}) { + serializer ??= driftRuntimeOptions.defaultSerializer; + return { + 'id': serializer.toJson(id), + 'objectId': serializer.toJson(objectId), + 'objectType': serializer.toJson(objectType), + 'mediaId': serializer.toJson(mediaId), + 'createdAt': serializer.toJson(createdAt), + }; + } + + ObjectMediaItemsData copyWith( + {int? id, + int? objectId, + String? objectType, + int? mediaId, + DateTime? createdAt}) => + ObjectMediaItemsData( + id: id ?? this.id, + objectId: objectId ?? this.objectId, + objectType: objectType ?? this.objectType, + mediaId: mediaId ?? this.mediaId, + createdAt: createdAt ?? this.createdAt, + ); + ObjectMediaItemsData copyWithCompanion(ObjectMediaItemsCompanion data) { + return ObjectMediaItemsData( + id: data.id.present ? data.id.value : this.id, + objectId: data.objectId.present ? data.objectId.value : this.objectId, + objectType: + data.objectType.present ? data.objectType.value : this.objectType, + mediaId: data.mediaId.present ? data.mediaId.value : this.mediaId, + createdAt: data.createdAt.present ? data.createdAt.value : this.createdAt, + ); + } + + @override + String toString() { + return (StringBuffer('ObjectMediaItemsData(') + ..write('id: $id, ') + ..write('objectId: $objectId, ') + ..write('objectType: $objectType, ') + ..write('mediaId: $mediaId, ') + ..write('createdAt: $createdAt') + ..write(')')) + .toString(); + } + + @override + int get hashCode => Object.hash(id, objectId, objectType, mediaId, createdAt); + @override + bool operator ==(Object other) => + identical(this, other) || + (other is ObjectMediaItemsData && + other.id == this.id && + other.objectId == this.objectId && + other.objectType == this.objectType && + other.mediaId == this.mediaId && + other.createdAt == this.createdAt); +} + +class ObjectMediaItemsCompanion extends UpdateCompanion { + final Value id; + final Value objectId; + final Value objectType; + final Value mediaId; + final Value createdAt; + const ObjectMediaItemsCompanion({ + this.id = const Value.absent(), + this.objectId = const Value.absent(), + this.objectType = const Value.absent(), + this.mediaId = const Value.absent(), + this.createdAt = const Value.absent(), + }); + ObjectMediaItemsCompanion.insert({ + this.id = const Value.absent(), + required int objectId, + required String objectType, + required int mediaId, + this.createdAt = const Value.absent(), + }) : objectId = Value(objectId), + objectType = Value(objectType), + mediaId = Value(mediaId); + static Insertable custom({ + Expression? id, + Expression? objectId, + Expression? objectType, + Expression? mediaId, + Expression? createdAt, + }) { + return RawValuesInsertable({ + if (id != null) 'id': id, + if (objectId != null) 'object_id': objectId, + if (objectType != null) 'object_type': objectType, + if (mediaId != null) 'media_id': mediaId, + if (createdAt != null) 'created_at': createdAt, + }); + } + + ObjectMediaItemsCompanion copyWith( + {Value? id, + Value? objectId, + Value? objectType, + Value? mediaId, + Value? createdAt}) { + return ObjectMediaItemsCompanion( + id: id ?? this.id, + objectId: objectId ?? this.objectId, + objectType: objectType ?? this.objectType, + mediaId: mediaId ?? this.mediaId, + createdAt: createdAt ?? this.createdAt, + ); + } + + @override + Map toColumns(bool nullToAbsent) { + final map = {}; + if (id.present) { + map['id'] = Variable(id.value); + } + if (objectId.present) { + map['object_id'] = Variable(objectId.value); + } + if (objectType.present) { + map['object_type'] = Variable(objectType.value); + } + if (mediaId.present) { + map['media_id'] = Variable(mediaId.value); + } + if (createdAt.present) { + map['created_at'] = Variable(createdAt.value); + } + return map; + } + + @override + String toString() { + return (StringBuffer('ObjectMediaItemsCompanion(') + ..write('id: $id, ') + ..write('objectId: $objectId, ') + ..write('objectType: $objectType, ') + ..write('mediaId: $mediaId, ') + ..write('createdAt: $createdAt') + ..write(')')) + .toString(); + } +} + +class DatabaseAtV20 extends GeneratedDatabase { + DatabaseAtV20(QueryExecutor e) : super(e); + late final Sessions sessions = Sessions(this); + late final Activities activities = Activities(this); + late final SessionActivities sessionActivities = SessionActivities(this); + late final Actions actions = Actions(this); + late final ActivityActions activityActions = ActivityActions(this); + late final MediaItems mediaItems = MediaItems(this); + late final ObjectMediaItems objectMediaItems = ObjectMediaItems(this); + @override + Iterable> get allTables => + allSchemaEntities.whereType>(); + @override + List get allSchemaEntities => [ + sessions, + activities, + sessionActivities, + actions, + activityActions, + mediaItems, + objectMediaItems + ]; + @override + int get schemaVersion => 20; +} From 0b0ca884bcb0754c316e77d0d81b03f8edbe2aa3 Mon Sep 17 00:00:00 2001 From: Joshua Burman Date: Tue, 7 Jan 2025 12:37:17 -0500 Subject: [PATCH 4/5] genericizing add card, activity ui tweaks --- .../search/activity_finder_service.dart | 8 ++-- lib/widgets/activities/activity_view.dart | 38 +++++++++++++----- .../generic/elements/add_card_generic.dart | 37 +++++++++++++++++ lib/widgets/media/media_card.dart | 12 ++++-- lib/widgets/sessions/session_view.dart | 10 ++--- .../sessions/session_view_activities.dart | 40 ++++++------------- lib/widgets/sessions/session_view_media.dart | 2 +- 7 files changed, 97 insertions(+), 50 deletions(-) create mode 100644 lib/widgets/generic/elements/add_card_generic.dart diff --git a/lib/services/search/activity_finder_service.dart b/lib/services/search/activity_finder_service.dart index 984123c..0eb5767 100644 --- a/lib/services/search/activity_finder_service.dart +++ b/lib/services/search/activity_finder_service.dart @@ -1,8 +1,10 @@ +import 'dart:convert'; + 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/widgets/activities/activity_card.dart'; +import 'package:sendtrain/helpers/widget_helpers.dart'; import 'package:sendtrain/widgets/generic/elements/form_search_input.dart'; class ActivityFinderService { @@ -27,10 +29,10 @@ class ActivityFinderService { } Widget resultWidget(Activity activity, Function? callback) { - // return ActivityCard(activity: activity, callback: callback); return ListTile( title: Text(activity.title), - subtitle: Text(activity.description ?? ""), + subtitle: Text(jsonToDescription(json.decode(activity.description ?? "")), + maxLines: 2, softWrap: true, overflow: TextOverflow.ellipsis), onTap: () { if (callback != null) { callback(); diff --git a/lib/widgets/activities/activity_view.dart b/lib/widgets/activities/activity_view.dart index 908c17c..1a96e31 100644 --- a/lib/widgets/activities/activity_view.dart +++ b/lib/widgets/activities/activity_view.dart @@ -11,6 +11,7 @@ import 'package:sendtrain/models/activity_timer_model.dart'; import 'package:sendtrain/widgets/activities/activity_action_view.dart'; import 'package:sendtrain/widgets/activities/activity_view_categories.dart'; import 'package:sendtrain/widgets/activities/activity_view_media.dart'; +import 'package:sendtrain/widgets/generic/elements/add_card_generic.dart'; class ActivityView extends StatefulWidget { const ActivityView({super.key, required this.activity}); @@ -87,7 +88,15 @@ class _ActivityViewState extends State { ActivityActionView(actions: actions) ]; } else { - return [Text('add an action')]; + return [ + AddCardGeneric( + title: 'Add an Action!', + description: + 'Click here to create an exercise template (sets and reps, etc) for your activity!', + action: () { + print('teset'); + }) + ]; } } @@ -178,8 +187,8 @@ class _ActivityViewState extends State { : []), ActivityViewCategories>( icon: Icon(Icons.type_specimen_rounded), - text: 'Activity Equipments', - object: activity.equipment != null + text: 'Activity Type', + object: activity.type != null ? [activity.type!] : []), ])), @@ -188,11 +197,12 @@ class _ActivityViewState extends State { top: 0, bottom: 0, left: 15, right: 15), child: Text( maxLines: 4, - overflow: TextOverflow. ellipsis, - softWrap: true, + overflow: TextOverflow.ellipsis, + // softWrap: true, textAlign: TextAlign.left, style: const TextStyle(fontSize: 15), - jsonToDescription(json.decode(activity.description ?? "")))), + jsonToDescription([json + .decode(activity.description ?? "")[0]]))), Padding( padding: EdgeInsets.only(right: 15), child: Align( @@ -215,12 +225,18 @@ class _ActivityViewState extends State { context, Padding( padding: EdgeInsets.all(15), - child: Text(jsonToDescription( - json.decode(activity.description ?? - ""))))); + child: Text( + style: + TextStyle(fontSize: 18), + jsonToDescription(json.decode( + activity.description ?? + ""))))); }, - child: Text("read more", - textAlign: TextAlign.right, style: TextStyle(fontSize: 12),), + child: Text( + "read more", + textAlign: TextAlign.right, + style: TextStyle(fontSize: 12), + ), ))), const Padding( padding: EdgeInsets.fromLTRB(15, 10, 0, 10), diff --git a/lib/widgets/generic/elements/add_card_generic.dart b/lib/widgets/generic/elements/add_card_generic.dart new file mode 100644 index 0000000..2988cbf --- /dev/null +++ b/lib/widgets/generic/elements/add_card_generic.dart @@ -0,0 +1,37 @@ +import 'package:flutter/material.dart'; + +class AddCardGeneric extends StatelessWidget { + const AddCardGeneric( + {super.key, required this.title, required this.description, this.action}); + + final String title; + final String description; + final Function? action; + + @override + Widget build(BuildContext context) { + return Expanded( + child: ListView( + padding: const EdgeInsets.fromLTRB(10, 0, 10, 0), + children: [ + Card.outlined( + child: InkWell( + customBorder: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(10), + ), + onTap: () { + if (action != null) { + action!(); + } + }, + child: ListTile( + contentPadding: + EdgeInsets.only(top: 5, left: 15, right: 5, bottom: 5), + autofocus: true, + leading: Icon(Icons.add_box_rounded), + title: Text(title), + subtitle: Text(description), + ))) + ])); + } +} diff --git a/lib/widgets/media/media_card.dart b/lib/widgets/media/media_card.dart index 27c102f..042b933 100644 --- a/lib/widgets/media/media_card.dart +++ b/lib/widgets/media/media_card.dart @@ -11,9 +11,11 @@ import 'package:sendtrain/widgets/builders/dialogs.dart'; import 'package:video_player/video_player.dart'; class MediaCard extends StatelessWidget { - const MediaCard({super.key, required this.media, this.callback}); + const MediaCard( + {super.key, required this.media, this.callback, this.canDelete}); final MediaItem media; + final bool? canDelete; final Function? callback; @override @@ -44,7 +46,9 @@ class MediaCard extends StatelessWidget { RoundedRectangleBorder(borderRadius: BorderRadius.circular(10)), shadowColor: const Color.fromARGB(0, 255, 255, 255), child: TextButton( - onLongPress: () => showRemovalDialog( + onLongPress: () { + if (canDelete == true) { + showRemovalDialog( 'Media Removal', 'Would you like to permanently remove this media from the current session?', context, () { @@ -55,7 +59,9 @@ class MediaCard extends StatelessWidget { if (callback != null) { callback!(); } - }), + }); + } + }, onPressed: () => showMediaDetailWidget(context, media), child: const ListTile( title: Text(''), diff --git a/lib/widgets/sessions/session_view.dart b/lib/widgets/sessions/session_view.dart index 41c884b..217ffc3 100644 --- a/lib/widgets/sessions/session_view.dart +++ b/lib/widgets/sessions/session_view.dart @@ -83,7 +83,7 @@ class _SessionViewState extends State { ), children: [ FloatingActionButton.extended( - icon: const Icon(Icons.edit_outlined), + icon: const Icon(Icons.military_tech_rounded), label: Text('Add Achievement'), onPressed: () { showEditorSheet( @@ -93,7 +93,7 @@ class _SessionViewState extends State { }, ), FloatingActionButton.extended( - icon: const Icon(Icons.edit_outlined), + icon: const Icon(Icons.sports_gymnastics_rounded), label: Text('Add Activity'), onPressed: () { showEditorSheet( @@ -104,7 +104,7 @@ class _SessionViewState extends State { ), FloatingActionButton.extended( icon: const Icon(Icons.edit_outlined), - label: Text('Edit'), + label: Text('Edit Session'), onPressed: () { showEditorSheet( context, @@ -114,7 +114,7 @@ class _SessionViewState extends State { ), FloatingActionButton.extended( icon: const Icon(Icons.history_outlined), - label: Text('Restart'), + label: Text('Restart Session'), onPressed: () { Session newSession = session.copyWith(status: SessionStatus.pending); @@ -131,7 +131,7 @@ class _SessionViewState extends State { ), FloatingActionButton.extended( icon: const Icon(Icons.done_all_outlined), - label: Text('Done'), + label: Text('Finish Session'), onPressed: () { Session newSession = session.copyWith(status: SessionStatus.completed); diff --git a/lib/widgets/sessions/session_view_activities.dart b/lib/widgets/sessions/session_view_activities.dart index 3048712..d50aed1 100644 --- a/lib/widgets/sessions/session_view_activities.dart +++ b/lib/widgets/sessions/session_view_activities.dart @@ -4,6 +4,7 @@ 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/add_card_generic.dart'; import 'package:sendtrain/widgets/generic/elements/generic_progress_indicator.dart'; import 'package:sendtrain/widgets/sessions/session_activities_editor.dart'; @@ -32,36 +33,21 @@ class _SessionViewActivitiesState extends State { padding: const EdgeInsets.fromLTRB(10, 0, 10, 0), itemCount: activities.length, itemBuilder: (BuildContext context, int index) { - return ActivityCard(activity: activities[index], session: widget.session); + return ActivityCard( + activity: activities[index], session: widget.session); }, )); } else { - return Expanded( - child: ListView( - padding: const EdgeInsets.fromLTRB(10, 0, 10, 0), - children: [ - Card.outlined( - child: InkWell( - customBorder: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(10), - ), - onTap: () { - showEditorSheet( - context, - SessionActivitiesEditor( - session: widget.session, - callback: () {})); - }, - child: ListTile( - contentPadding: EdgeInsets.only( - top: 5, left: 15, right: 5, bottom: 5), - 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 along with during your session.'), - ))) - ])); + return AddCardGeneric( + title: 'Add an Activity!', + description: + 'Here you can associate one or more activities that you can follow along with during your session.', + action: () { + showEditorSheet( + context, + SessionActivitiesEditor( + session: widget.session, callback: () {})); + }); } } else { return GenericProgressIndicator(); diff --git a/lib/widgets/sessions/session_view_media.dart b/lib/widgets/sessions/session_view_media.dart index 4167121..34bc468 100644 --- a/lib/widgets/sessions/session_view_media.dart +++ b/lib/widgets/sessions/session_view_media.dart @@ -32,7 +32,7 @@ class _SessionViewMediaState extends State { List content; if (mediaItems.isNotEmpty) { List mediaCards = List.generate(mediaItems.length, - (i) => MediaCard(media: mediaItems[i], callback: resetState)); + (i) => MediaCard(media: mediaItems[i], callback: resetState, canDelete: true)); content = mediaCards; } else { content = [ From d9a5599a4bd074b0c60aff8583ace98a95a04dfc Mon Sep 17 00:00:00 2001 From: Joshua Burman Date: Tue, 7 Jan 2025 15:49:44 -0500 Subject: [PATCH 5/5] activity categories ui --- lib/widgets/activities/activity_view.dart | 90 ++++++++++++------- .../activities/activity_view_categories.dart | 30 ++++--- 2 files changed, 75 insertions(+), 45 deletions(-) diff --git a/lib/widgets/activities/activity_view.dart b/lib/widgets/activities/activity_view.dart index 1a96e31..b15770d 100644 --- a/lib/widgets/activities/activity_view.dart +++ b/lib/widgets/activities/activity_view.dart @@ -22,6 +22,20 @@ class ActivityView extends StatefulWidget { } class _ActivityViewState extends State { + List activity_muscle(Activity activity) { + List muscles = []; + + if (activity.primaryMuscles != null) { + muscles.add(activity.primaryMuscles!); + } + + if (activity.secondaryMuscles != null) { + muscles.add(activity.secondaryMuscles!); + } + + return muscles; + } + List action(actions) { if (actions.isNotEmpty) { return [ @@ -163,46 +177,58 @@ class _ActivityViewState extends State { fontSize: 25, fontWeight: FontWeight.bold), activity.title.toTitleCase())), - Padding( - padding: const EdgeInsets.fromLTRB(10, 0, 0, 10), - child: - Flex(direction: Axis.horizontal, children: [ - ActivityViewCategories>( - icon: Icon(Icons.stairs_rounded), - text: "Activity Level", - object: activity.level != null - ? [activity.level!] - : []), - // ActivityViewCategories>( - // icon: Icon(Icons.), - // text: 'Activity Mechanic', - // object: activity.mechanic != null - // ? [activity.mechanic!] - // : []), - ActivityViewCategories>( - icon: Icon(Icons.fitness_center_rounded), - text: 'Activity Equipments', - object: activity.equipment != null - ? [activity.equipment!] - : []), - ActivityViewCategories>( - icon: Icon(Icons.type_specimen_rounded), - text: 'Activity Type', - object: activity.type != null - ? [activity.type!] - : []), - ])), + SizedBox( + height: 40, + child: ListView( + scrollDirection: Axis.horizontal, + padding: + const EdgeInsets.fromLTRB(10, 0, 10, 0), + shrinkWrap: true, + children: [ + ActivityViewCategories>( + icon: Icon(Icons.stairs_rounded), + text: "Activity Level", + object: activity.level != null + ? [activity.level!] + : []), + // ActivityViewCategories>( + // icon: Icon(Icons.), + // text: 'Activity Mechanic', + // object: activity.mechanic != null + // ? [activity.mechanic!] + // : []), + ActivityViewCategories< + List>( + icon: + Icon(Icons.fitness_center_rounded), + text: 'Equipment Used', + object: activity.equipment != null + ? [activity.equipment!] + : []), + ActivityViewCategories>( + icon: Icon(Icons.type_specimen_rounded), + text: 'Activity Type', + object: activity.type != null + ? [activity.type!] + : []), + ActivityViewCategories< + List>( + icon: Icon(Icons.person), + text: 'Muscles used', + object: activity_muscle(activity)) + ])), Padding( padding: const EdgeInsets.only( - top: 0, bottom: 0, left: 15, right: 15), + top: 10, bottom: 0, left: 15, right: 15), child: Text( maxLines: 4, overflow: TextOverflow.ellipsis, // softWrap: true, textAlign: TextAlign.left, style: const TextStyle(fontSize: 15), - jsonToDescription([json - .decode(activity.description ?? "")[0]]))), + jsonToDescription([ + json.decode(activity.description ?? "")[0] + ]))), Padding( padding: EdgeInsets.only(right: 15), child: Align( diff --git a/lib/widgets/activities/activity_view_categories.dart b/lib/widgets/activities/activity_view_categories.dart index 57f51e6..97d8ee6 100644 --- a/lib/widgets/activities/activity_view_categories.dart +++ b/lib/widgets/activities/activity_view_categories.dart @@ -2,7 +2,11 @@ import 'package:flutter/material.dart'; import 'package:sendtrain/extensions/string_extensions.dart'; class ActivityViewCategories> extends StatelessWidget { - const ActivityViewCategories({super.key, required this.object, required this.icon, required this.text}); + const ActivityViewCategories( + {super.key, + required this.object, + required this.icon, + required this.text}); final T object; final Icon icon; @@ -10,22 +14,22 @@ class ActivityViewCategories> extends StatelessWidget { @override Widget build(BuildContext context) { - return SizedBox( - height: 40, - child: ListView.builder( - shrinkWrap: true, - scrollDirection: Axis.horizontal, - padding: const EdgeInsets.only(right: 10), - itemCount: object.length, - itemBuilder: (BuildContext context, int index) { - return ActionChip( + return ListView.builder( + shrinkWrap: true, + scrollDirection: Axis.horizontal, + // padding: const EdgeInsets.only(right: 10, left: 10), + itemCount: object.length, + itemBuilder: (BuildContext context, int index) { + return Padding( + padding: EdgeInsets.only(right: 10), + child: ActionChip( visualDensity: VisualDensity.compact, avatar: icon, label: Text(maxLines: 1, object[index].name.toTitleCase()), tooltip: text, onPressed: () {}, - ); - }, - )); + )); + }, + ); } }