mirror of
https://github.com/wger-project/flutter.git
synced 2026-02-18 00:17:48 +01:00
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:
@@ -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 {
|
||||
|
||||
@@ -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),
|
||||
],
|
||||
),
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user