Show set notes on the workout and the gym mode

https://github.com/wger-project/wger/issues/702
This commit is contained in:
Roland Geider
2021-07-17 13:25:04 +02:00
parent d1a4088708
commit 6646640b9c
7 changed files with 44 additions and 4 deletions

View File

@@ -38,6 +38,9 @@ class Set {
@JsonKey(required: true)
int? order;
@JsonKey(required: true, defaultValue: '')
late String comment;
@JsonKey(ignore: true)
List<Exercise> exercisesObj = [];
@@ -64,6 +67,7 @@ class Set {
this.id,
sets,
day,
comment,
order,
exercises,
settings,
@@ -71,6 +75,7 @@ class Set {
}) {
this.sets = sets ?? DEFAULT_NR_SETS;
this.order = order ?? 1;
this.comment = comment ?? '';
this.exercisesObj = exercises ?? [];
this.exercisesIds = exercisesObj.map((e) => e.id).toList();
this.settings = settings ?? [];

View File

@@ -7,12 +7,14 @@ part of 'set.dart';
// **************************************************************************
Set _$SetFromJson(Map<String, dynamic> json) {
$checkKeys(json, requiredKeys: const ['id', 'sets', 'order']);
$checkKeys(json, requiredKeys: const ['id', 'sets', 'order', 'comment']);
return Set(
day: json['exerciseday'] as int,
sets: json['sets'] as int,
order: json['order'] as int?,
)..id = json['id'] as int?;
)
..id = json['id'] as int?
..comment = json['comment'] as String? ?? '';
}
Map<String, dynamic> _$SetToJson(Set instance) => <String, dynamic>{
@@ -20,4 +22,5 @@ Map<String, dynamic> _$SetToJson(Set instance) => <String, dynamic>{
'sets': instance.sets,
'exerciseday': instance.day,
'order': instance.order,
'comment': instance.comment,
};

View File

@@ -27,6 +27,7 @@ import 'package:wger/providers/workout_plans.dart';
import 'package:wger/screens/form_screen.dart';
import 'package:wger/screens/gym_mode.dart';
import 'package:wger/theme/theme.dart';
import 'package:wger/widgets/core/core.dart';
import 'package:wger/widgets/exercises/exercises.dart';
import 'package:wger/widgets/exercises/images.dart';
import 'package:wger/widgets/workouts/forms.dart';
@@ -125,6 +126,7 @@ class _WorkoutDayWidgetState extends State<WorkoutDayWidget> {
Expanded(
child: Column(
children: [
if (set.comment != '') MutedText(set.comment),
...set.settingsFiltered
.map(
(setting) => SettingWidget(

View File

@@ -440,6 +440,25 @@ class _SetFormWidgetState extends State<SetFormWidget> {
),
),
SizedBox(height: 10),
TextFormField(
decoration: InputDecoration(
labelText: AppLocalizations.of(context).comment,
errorMaxLines: 2,
),
keyboardType: TextInputType.text,
validator: (value) {
const minLength = 0;
const maxLength = 200;
if (value!.length > maxLength) {
return AppLocalizations.of(context).enterCharacters(minLength, maxLength);
}
return null;
},
onSaved: (newValue) {
widget._set.comment = newValue!;
},
),
SizedBox(height: 10),
...widget._set.exercisesObj.asMap().entries.map((entry) {
final index = entry.key;
final exercise = entry.value;

View File

@@ -26,13 +26,14 @@ import 'package:provider/provider.dart';
import 'package:wger/helpers/consts.dart';
import 'package:wger/helpers/gym_mode.dart';
import 'package:wger/helpers/json.dart';
import 'package:wger/helpers/ui.dart';
import 'package:wger/helpers/misc.dart';
import 'package:wger/helpers/ui.dart';
import 'package:wger/models/exercises/exercise.dart';
import 'package:wger/models/http_exception.dart';
import 'package:wger/models/workouts/day.dart';
import 'package:wger/models/workouts/log.dart';
import 'package:wger/models/workouts/session.dart';
import 'package:wger/models/workouts/set.dart';
import 'package:wger/models/workouts/setting.dart';
import 'package:wger/models/workouts/workout_plan.dart';
import 'package:wger/providers/exercises.dart';
@@ -131,6 +132,7 @@ class _GymModeState extends State<GymMode> {
out.add(LogPage(
_controller,
setting,
set,
exercise,
workoutProvider.findById(widget._workoutDay.workoutId),
ratioCompleted,
@@ -229,6 +231,7 @@ class StartPage extends StatelessWidget {
class LogPage extends StatefulWidget {
PageController _controller;
Setting _setting;
Set _set;
Exercise _exercise;
WorkoutPlan _workoutPlan;
final double _ratioCompleted;
@@ -238,6 +241,7 @@ class LogPage extends StatefulWidget {
LogPage(
this._controller,
this._setting,
this._set,
this._exercise,
this._workoutPlan,
this._ratioCompleted,
@@ -590,11 +594,16 @@ class _LogPageState extends State<LogPage> {
),
Center(
child: Text(
'${widget._setting.singleSettingRepText}',
widget._setting.singleSettingRepText,
style: Theme.of(context).textTheme.headline3,
textAlign: TextAlign.center,
),
),
if (widget._set.comment != '')
Text(
widget._set.comment,
textAlign: TextAlign.center,
),
SizedBox(height: 10),
Expanded(
child: (widget._workoutPlan.filterLogsByExercise(widget._exercise).length > 0)

View File

@@ -108,6 +108,7 @@ void main() {
expect(find.byType(ListTile), findsNWidgets(3), reason: 'Two logs and the switch tile');
expect(find.text('10 × 10 kg (1.5 RiR)'), findsOneWidget);
expect(find.text('12 × 10 kg (2 RiR)'), findsOneWidget);
expect(find.text('Important to do exercises correctly'), findsOneWidget, reason: 'Set comment');
expect(find.byIcon(Icons.close), findsOneWidget);
expect(find.byIcon(Icons.menu), findsOneWidget);
expect(find.byIcon(Icons.chevron_left), findsOneWidget);

View File

@@ -86,6 +86,7 @@ WorkoutPlan getWorkout() {
day: 1,
sets: 3,
order: 1,
comment: 'Important to do exercises correctly',
);
set1.addExercise(exercise1);
set1.settings.add(setting1);