From 6917754933a3111e5bf2b1ee0279414384ba1a7e Mon Sep 17 00:00:00 2001 From: Joshua Burman Date: Mon, 6 Jan 2025 14:47:14 -0500 Subject: [PATCH] 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,