mirror of
https://github.com/wger-project/flutter.git
synced 2026-02-18 00:17:48 +01:00
Show set notes on the workout and the gym mode
https://github.com/wger-project/wger/issues/702
This commit is contained in:
@@ -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 ?? [];
|
||||
|
||||
@@ -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,
|
||||
};
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user