diff --git a/lib/providers/workout_plans.dart b/lib/providers/workout_plans.dart index ffdc9541..a58084ce 100644 --- a/lib/providers/workout_plans.dart +++ b/lib/providers/workout_plans.dart @@ -408,15 +408,13 @@ class WorkoutPlansProvider extends WgerBaseProvider with ChangeNotifier { notifyListeners(); } - // Sets the order field for the given list of sets, starting from startIndex. - // Better than calling editSet for each set after reordering as it will notify - // for every element, rebuilding for each notification. - Future reorderSets(List sets, int startIndex) async { + Future> reorderSets(List sets, int startIndex) async { for (int i = startIndex; i < sets.length; i++) { sets[i].order = i; await patch(sets[i].toJson(), makeUrl(_setsUrlPath, id: sets[i].id)); } notifyListeners(); + return sets; } Future fetchComputedSettings(Set workoutSet) async { diff --git a/lib/widgets/workouts/day.dart b/lib/widgets/workouts/day.dart index 58a26baa..c29507a7 100644 --- a/lib/widgets/workouts/day.dart +++ b/lib/widgets/workouts/day.dart @@ -99,6 +99,7 @@ class _WorkoutDayWidgetState extends State { void initState() { super.initState(); _sets = widget._day.sets; + _sets.sort((a, b) => a.order!.compareTo(b.order!)); } void _toggleExpanded() { @@ -135,7 +136,12 @@ class _WorkoutDayWidgetState extends State { visualDensity: VisualDensity.compact, icon: Icon(Icons.delete), iconSize: ICON_SIZE_SMALL, - onPressed: () { + onPressed: () async { + int _startIndex = _sets.indexOf(set); + setState(() { + _sets.remove(set); + }); + _sets = await Provider.of(context, listen: false).reorderSets(_sets, _startIndex); Provider.of(context, listen: false).deleteSet(set); }, ), @@ -145,7 +151,6 @@ class _WorkoutDayWidgetState extends State { @override Widget build(BuildContext context) { - _sets.sort((a, b) => a.order!.compareTo(b.order!)); return Padding( padding: const EdgeInsets.only(left: 8, right: 8, bottom: 12), child: Card( @@ -219,13 +224,12 @@ class _WorkoutDayWidgetState extends State { _startIndex = _newIndex; } setState(() { - final Set _set = _sets.removeAt(_oldIndex); - _sets.insert(_newIndex, _set); + _sets.insert(_newIndex, _sets.removeAt(_oldIndex)); }); - Provider.of(context, listen: false).reorderSets(_sets, _startIndex); + _sets = await Provider.of(context, listen: false).reorderSets(_sets, _startIndex); }, children: [ - for (final _set in widget._day.sets) + for (final _set in _sets) getSetRow(_set), ], ), diff --git a/lib/widgets/workouts/forms.dart b/lib/widgets/workouts/forms.dart index b6baff1f..03e8099e 100644 --- a/lib/widgets/workouts/forms.dart +++ b/lib/widgets/workouts/forms.dart @@ -259,7 +259,7 @@ class SetFormWidget extends StatefulWidget { late Set _set; SetFormWidget(this._day, [Set? set]) { - this._set = set ?? Set.withData(day: _day.id, sets: 4); + this._set = set ?? Set.withData(day: _day.id, order: _day.sets.length, sets: 4); } @override