Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"dart.lineLength": 100
}
63 changes: 29 additions & 34 deletions AUTHORS.md
Original file line number Diff line number Diff line change
@@ -1,52 +1,47 @@
# Authors


## Developers

* Roland Geider – <https://github.com/rolandgeider>
* Dylan Aird - <https://github.com/Dolaned>
* Jannik Norden - <https://github.com/Jannik-dev>
* Arun Muralidharan - <https://github.com/arun-muralidharan>
* Khushbu Bora - <https://github.com/KhushbuBora>
* Patrick Witter - <https://github.com/patrickwitter>
* Tomer Ben-Rachel - <https://github.com/tomerpacific>
* Thilina Herath - <https://github.com/ThilinaTCH>
- Roland Geider – <https://github.com/rolandgeider>
- Dylan Aird - <https://github.com/Dolaned>
- Jannik Norden - <https://github.com/Jannik-dev>
- Arun Muralidharan - <https://github.com/arun-muralidharan>
- Khushbu Bora - <https://github.com/KhushbuBora>
- Patrick Witter - <https://github.com/patrickwitter>
- Tomer Ben-Rachel - <https://github.com/tomerpacific>
- Thilina Herath - <https://github.com/ThilinaTCH>
- Marko Milosevic - <https://github.com/TaarnStar>

## Translators

* German

* mondstern <mondstern@snopyta.org> (2)
* J. Lavoie <j.lavoie@net-c.ca> (19)
* Roland Geider <roland@geider.net> (142)


* English

* Roland Geider <roland@geider.net> (3)
* Allan Nordhøy <epost@anotheragency.no> (8)

- German

* Italian
- mondstern <mondstern@snopyta.org> (2)
- J. Lavoie <j.lavoie@net-c.ca> (19)
- Roland Geider <roland@geider.net> (142)

* mondstern <mondstern@snopyta.org> (2)
* DT <semperpeppe@tracciabi.li> (4)
* J. Lavoie <j.lavoie@net-c.ca> (24)
* Stefano Rossi <stefanorossi.ti@gmail.com> (120)
- English

- Roland Geider <roland@geider.net> (3)
- Allan Nordhøy <epost@anotheragency.no> (8)

* Spanish
- Italian

* Roland Geider <roland@geider.net> (1)
* martingetzel <martingetzel@gmail.com> (119)
- mondstern <mondstern@snopyta.org> (2)
- DT <semperpeppe@tracciabi.li> (4)
- J. Lavoie <j.lavoie@net-c.ca> (24)
- Stefano Rossi <stefanorossi.ti@gmail.com> (120)

- Spanish

* French
- Roland Geider <roland@geider.net> (1)
- martingetzel <martingetzel@gmail.com> (119)

* J. Lavoie <j.lavoie@net-c.ca> (92)
* Stefano Rossi <stefanorossi.ti@gmail.com> (94)
- French

- J. Lavoie <j.lavoie@net-c.ca> (92)
- Stefano Rossi <stefanorossi.ti@gmail.com> (94)

* Norwegian Bokmål
- Norwegian Bokmål

* Allan Nordhøy <epost@anotheragency.no> (98)
- Allan Nordhøy <epost@anotheragency.no> (98)
47 changes: 47 additions & 0 deletions lib/helpers/ui.dart
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,11 @@ import 'dart:developer';

import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:provider/provider.dart';
import 'package:wger/exceptions/http_exception.dart';
import 'package:wger/models/exercises/exercise.dart';
import 'package:wger/models/workouts/log.dart';
import 'package:wger/providers/workout_plans.dart';

void showErrorDialog(dynamic exception, BuildContext context) {
log('showErrorDialog: ');
Expand Down Expand Up @@ -88,3 +92,46 @@ void showHttpExceptionErrorDialog(WgerHttpException exception, BuildContext cont
// unless this dummy call is present
showDialog(context: context, builder: (context) => Container());
}

dynamic showDeleteDialog(BuildContext context, String confirmDeleteName, Log log, Exercise exercise,
Map<Exercise, List<Log>> _exerciseData) async {
final res = await showDialog(
context: context,
builder: (BuildContext contextDialog) {
return AlertDialog(
content: Text(
AppLocalizations.of(context).confirmDelete(confirmDeleteName),
),
actions: [
TextButton(
child: Text(MaterialLocalizations.of(context).cancelButtonLabel),
onPressed: () => Navigator.of(contextDialog).pop(),
),
TextButton(
child: Text(
AppLocalizations.of(context).delete,
style: TextStyle(color: Theme.of(context).errorColor),
),
onPressed: () {
_exerciseData[exercise]!.removeWhere((el) => el.id == log.id);
Provider.of<WorkoutPlansProvider>(context, listen: false).deleteLog(
log,
);

Navigator.of(contextDialog).pop();

ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text(
AppLocalizations.of(context).successfullyDeleted,
textAlign: TextAlign.center,
),
),
);
},
),
],
);
});
return res;
}
13 changes: 13 additions & 0 deletions lib/providers/workout_plans.dart
Original file line number Diff line number Diff line change
Expand Up @@ -506,4 +506,17 @@ class WorkoutPlansProvider extends WgerBaseProvider with ChangeNotifier {
notifyListeners();
return newLog;
}

/*Future<void> editLog(Log log) async {
await patch(log.toJson(), makeUrl(_logsUrlPath, id: log.id));
notifyListeners();
}*/

Future<void> deleteLog(Log log) async {
await deleteRequest(_logsUrlPath, log.id!);
for (final workout in _workoutPlans) {
workout.logs.removeWhere((element) => element.id == log.id);
}
notifyListeners();
}
}
50 changes: 40 additions & 10 deletions lib/widgets/workouts/log.dart
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:intl/intl.dart';
import 'package:provider/provider.dart';
import 'package:wger/helpers/ui.dart';
import 'package:wger/models/exercises/exercise.dart';
import 'package:wger/models/workouts/log.dart';
import 'package:wger/models/workouts/session.dart';
Expand Down Expand Up @@ -53,32 +54,61 @@ class ExerciseLogChart extends StatelessWidget {
}
}

class DayLogWidget extends StatelessWidget {
class DayLogWidget extends StatefulWidget {
final DateTime _date;
final WorkoutSession? _session;
final Map<Exercise, List<Log>> _exerciseData;

const DayLogWidget(this._date, this._exerciseData, this._session);

@override
_DayLogWidgetState createState() => _DayLogWidgetState();
}

class _DayLogWidgetState extends State<DayLogWidget> {
@override
void initState() {
super.initState();
}

@override
Widget build(BuildContext context) {
return Card(
child: Column(
children: [
Text(
DateFormat.yMd(Localizations.localeOf(context).languageCode).format(_date),
DateFormat.yMd(Localizations.localeOf(context).languageCode).format(widget._date),
style: Theme.of(context).textTheme.headline5,
),
if (_session != null) Text('Session data here'),
..._exerciseData.keys.map((exercise) {
if (widget._session != null) Text('Session data here'),
...widget._exerciseData.keys.map((exercise) {
return Column(
children: [
Text(
exercise.name,
style: Theme.of(context).textTheme.headline6,
),
..._exerciseData[exercise]!.map((log) => Text(log.singleLogRepTextNoNl)).toList(),
ExerciseLogChart(exercise, _date),
if (widget._exerciseData[exercise]!.isNotEmpty)
Text(
exercise.name,
style: Theme.of(context).textTheme.headline6,
)
else
Container(),
...widget._exerciseData[exercise]!
.map(
(log) => Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(log.singleLogRepTextNoNl),
IconButton(
icon: Icon(Icons.delete),
onPressed: () async {
showDeleteDialog(
context, exercise.name, log, exercise, widget._exerciseData);
},
),
],
),
)
.toList(),
ExerciseLogChart(exercise, widget._date),
SizedBox(height: 30),
],
);
Expand Down