From 6ab3e26db4bf645404ce40e122f8a22c25364435 Mon Sep 17 00:00:00 2001 From: Roland Geider Date: Thu, 6 May 2021 13:18:32 +0200 Subject: [PATCH] Rename workout description to name --- lib/l10n/app_en.arb | 4 +++ lib/models/workouts/workout_plan.dart | 11 +++++-- lib/models/workouts/workout_plan.g.dart | 9 ++++-- lib/screens/workout_plan_screen.dart | 2 +- lib/widgets/dashboard/widgets.dart | 2 +- lib/widgets/workouts/forms.dart | 31 ++++++++++++++++--- lib/widgets/workouts/workout_plan_detail.dart | 13 +++----- lib/widgets/workouts/workout_plans_list.dart | 4 +-- test/workout_form_test.dart | 4 +-- test/workout_plans_screen_test.dart | 4 +-- test_data/workouts.dart | 2 +- 11 files changed, 57 insertions(+), 29 deletions(-) diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index 6b5a99f8..fd0e7ac0 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -186,6 +186,10 @@ "@logHelpEntriesUnits": {}, "description": "Description", "@description": {}, + "name": "Name", + "@name": { + "description": "Name for a workout or nutritional plan" + }, "save": "Save", "@save": {}, "addSet": "Add set", diff --git a/lib/models/workouts/workout_plan.dart b/lib/models/workouts/workout_plan.dart index f6c502c8..71a15f45 100644 --- a/lib/models/workouts/workout_plan.dart +++ b/lib/models/workouts/workout_plan.dart @@ -33,7 +33,10 @@ class WorkoutPlan { @JsonKey(required: true, name: 'creation_date') late DateTime creationDate; - @JsonKey(required: true, name: 'comment') + @JsonKey(required: true, name: 'name') + late String name; + + @JsonKey(required: true, name: 'description') late String description; @JsonKey(ignore: true) @@ -45,17 +48,19 @@ class WorkoutPlan { WorkoutPlan({ this.id, required this.creationDate, - required this.description, + required this.name, + String? description, List? days, List? logs, }) { this.days = days ?? []; this.logs = logs ?? []; + this.description = description ?? ''; } WorkoutPlan.empty() { creationDate = DateTime.now(); - description = ''; + name = ''; } // Boilerplate diff --git a/lib/models/workouts/workout_plan.g.dart b/lib/models/workouts/workout_plan.g.dart index 176b71c6..412986f2 100644 --- a/lib/models/workouts/workout_plan.g.dart +++ b/lib/models/workouts/workout_plan.g.dart @@ -7,11 +7,13 @@ part of 'workout_plan.dart'; // ************************************************************************** WorkoutPlan _$WorkoutPlanFromJson(Map json) { - $checkKeys(json, requiredKeys: const ['id', 'creation_date', 'comment']); + $checkKeys(json, + requiredKeys: const ['id', 'creation_date', 'name', 'description']); return WorkoutPlan( id: json['id'] as int?, creationDate: DateTime.parse(json['creation_date'] as String), - description: json['comment'] as String, + name: json['name'] as String, + description: json['description'] as String?, ); } @@ -19,5 +21,6 @@ Map _$WorkoutPlanToJson(WorkoutPlan instance) => { 'id': instance.id, 'creation_date': instance.creationDate.toIso8601String(), - 'comment': instance.description, + 'name': instance.name, + 'description': instance.description, }; diff --git a/lib/screens/workout_plan_screen.dart b/lib/screens/workout_plan_screen.dart index dba89f1e..96817940 100644 --- a/lib/screens/workout_plan_screen.dart +++ b/lib/screens/workout_plan_screen.dart @@ -77,7 +77,7 @@ class _WorkoutPlanScreenState extends State { expandedHeight: 250, pinned: true, flexibleSpace: FlexibleSpaceBar( - title: Text(workoutPlan.description), + title: Text(workoutPlan.name), background: Image( image: AssetImage('assets/images/backgrounds/workout_plans.jpg'), fit: BoxFit.cover, diff --git a/lib/widgets/dashboard/widgets.dart b/lib/widgets/dashboard/widgets.dart index 11f2f4b1..9d0f883a 100644 --- a/lib/widgets/dashboard/widgets.dart +++ b/lib/widgets/dashboard/widgets.dart @@ -351,7 +351,7 @@ class _DashboardWorkoutWidgetState extends State { ), TextButton( child: Text( - _workoutPlan.description, + _workoutPlan.name, style: TextStyle(fontSize: 20), ), onPressed: () { diff --git a/lib/widgets/workouts/forms.dart b/lib/widgets/workouts/forms.dart index 57e0542c..7b5dc565 100644 --- a/lib/widgets/workouts/forms.dart +++ b/lib/widgets/workouts/forms.dart @@ -39,12 +39,14 @@ class WorkoutForm extends StatelessWidget { WorkoutForm(this._plan); - final TextEditingController workoutController = TextEditingController(); + final TextEditingController workoutNameController = TextEditingController(); + final TextEditingController workoutDescriptionController = TextEditingController(); @override Widget build(BuildContext context) { if (_plan.id != null) { - workoutController.text = _plan.description; + workoutNameController.text = _plan.name; + workoutDescriptionController.text = _plan.description; } return Form( @@ -52,9 +54,9 @@ class WorkoutForm extends StatelessWidget { child: Column( children: [ TextFormField( - key: Key('field-description'), - decoration: InputDecoration(labelText: AppLocalizations.of(context)!.description), - controller: workoutController, + key: Key('field-name'), + decoration: InputDecoration(labelText: AppLocalizations.of(context)!.name), + controller: workoutNameController, validator: (value) { const minLength = 5; const maxLength = 100; @@ -64,6 +66,25 @@ class WorkoutForm extends StatelessWidget { return null; }, onFieldSubmitted: (_) {}, + onSaved: (newValue) { + _plan.name = newValue!; + }, + ), + TextFormField( + key: Key('field-description'), + decoration: InputDecoration(labelText: AppLocalizations.of(context)!.description), + minLines: 3, + maxLines: 10, + controller: workoutDescriptionController, + validator: (value) { + const minLength = 0; + const maxLength = 1000; + if (value!.isEmpty || value.length < minLength || value.length > maxLength) { + return AppLocalizations.of(context)!.enterCharacters(minLength, maxLength); + } + return null; + }, + onFieldSubmitted: (_) {}, onSaved: (newValue) { _plan.description = newValue!; }, diff --git a/lib/widgets/workouts/workout_plan_detail.dart b/lib/widgets/workouts/workout_plan_detail.dart index bbd969bb..fbca0ca3 100644 --- a/lib/widgets/workouts/workout_plan_detail.dart +++ b/lib/widgets/workouts/workout_plan_detail.dart @@ -41,16 +41,11 @@ class _WorkoutPlanDetailState extends State { [ Column( children: [ - /* - Padding( - padding: const EdgeInsets.symmetric(vertical: 10), - child: Text( - DateFormat.yMd().format(widget._workoutPlan.creationDate).toString(), - style: Theme.of(context).textTheme.headline6, + if (widget._workoutPlan.description != '') + Padding( + padding: const EdgeInsets.all(15), + child: Text(widget._workoutPlan.description), ), - ), - - */ ...widget._workoutPlan.days .map((workoutDay) => WorkoutDayWidget(workoutDay)) .toList(), diff --git a/lib/widgets/workouts/workout_plans_list.dart b/lib/widgets/workouts/workout_plans_list.dart index f6612a84..a5474183 100644 --- a/lib/widgets/workouts/workout_plans_list.dart +++ b/lib/widgets/workouts/workout_plans_list.dart @@ -44,7 +44,7 @@ class WorkoutPlansList extends StatelessWidget { builder: (BuildContext contextDialog) { return AlertDialog( content: Text( - AppLocalizations.of(context)!.confirmDelete(currentWorkout.description), + AppLocalizations.of(context)!.confirmDelete(currentWorkout.name), ), actions: [ TextButton( @@ -102,7 +102,7 @@ class WorkoutPlansList extends StatelessWidget { Navigator.of(context) .pushNamed(WorkoutPlanScreen.routeName, arguments: currentWorkout); }, - title: Text(currentWorkout.description), + title: Text(currentWorkout.name), subtitle: Text( DateFormat.yMd(Localizations.localeOf(context).languageCode) .format(currentWorkout.creationDate), diff --git a/test/workout_form_test.dart b/test/workout_form_test.dart index 8cbe5685..402c8e6e 100644 --- a/test/workout_form_test.dart +++ b/test/workout_form_test.dart @@ -33,8 +33,8 @@ import 'workout_form_test.mocks.dart'; @GenerateMocks([WorkoutPlans]) void main() { var mockWorkoutPlans = MockWorkoutPlans(); - final plan1 = WorkoutPlan(id: 1, creationDate: DateTime(2021, 1, 1), description: 'test 1'); - final plan2 = WorkoutPlan(creationDate: DateTime(2021, 1, 2), description: ''); + final plan1 = WorkoutPlan(id: 1, creationDate: DateTime(2021, 1, 1), name: 'test 1'); + final plan2 = WorkoutPlan(creationDate: DateTime(2021, 1, 2), name: ''); setUp(() { mockWorkoutPlans = MockWorkoutPlans(); diff --git a/test/workout_plans_screen_test.dart b/test/workout_plans_screen_test.dart index 57facade..bc8ec5a4 100644 --- a/test/workout_plans_screen_test.dart +++ b/test/workout_plans_screen_test.dart @@ -45,8 +45,8 @@ void main() { testAuthProvider, testExercisesProvider, [ - WorkoutPlan(id: 1, creationDate: DateTime(2021, 01, 01), description: 'test 1'), - WorkoutPlan(id: 2, creationDate: DateTime(2021, 02, 12), description: 'test 2'), + WorkoutPlan(id: 1, creationDate: DateTime(2021, 01, 01), name: 'test 1'), + WorkoutPlan(id: 2, creationDate: DateTime(2021, 02, 12), name: 'test 2'), ], client, ), diff --git a/test_data/workouts.dart b/test_data/workouts.dart index 2b9430b7..a6ee3563 100644 --- a/test_data/workouts.dart +++ b/test_data/workouts.dart @@ -106,7 +106,7 @@ WorkoutPlan getWorkout() { var workout = WorkoutPlan( id: 1, creationDate: DateTime(2021, 01, 01), - description: 'test workout 1', + name: 'test workout 1', days: [day1, day2], logs: [log1, log2, log3]);