Reorder Sets

Now updates order upon deletion as well. Order will be set to length of sets upon adding a new one.
This commit is contained in:
Arun Muralidharan
2021-06-28 21:56:25 +02:00
parent 22993a0151
commit 7eb26da243
3 changed files with 13 additions and 11 deletions

View File

@@ -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<void> reorderSets(List<Set> sets, int startIndex) async {
Future<List<Set>> reorderSets(List<Set> 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<void> fetchComputedSettings(Set workoutSet) async {

View File

@@ -99,6 +99,7 @@ class _WorkoutDayWidgetState extends State<WorkoutDayWidget> {
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<WorkoutDayWidget> {
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<WorkoutPlansProvider>(context, listen: false).reorderSets(_sets, _startIndex);
Provider.of<WorkoutPlansProvider>(context, listen: false).deleteSet(set);
},
),
@@ -145,7 +151,6 @@ class _WorkoutDayWidgetState extends State<WorkoutDayWidget> {
@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<WorkoutDayWidget> {
_startIndex = _newIndex;
}
setState(() {
final Set _set = _sets.removeAt(_oldIndex);
_sets.insert(_newIndex, _set);
_sets.insert(_newIndex, _sets.removeAt(_oldIndex));
});
Provider.of<WorkoutPlansProvider>(context, listen: false).reorderSets(_sets, _startIndex);
_sets = await Provider.of<WorkoutPlansProvider>(context, listen: false).reorderSets(_sets, _startIndex);
},
children: [
for (final _set in widget._day.sets)
for (final _set in _sets)
getSetRow(_set),
],
),

View File

@@ -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