diff --git a/.github/ISSUE_TEMPLATE/1_bug.md b/.github/ISSUE_TEMPLATE/1_bug.md
deleted file mode 100644
index e12f7506..00000000
--- a/.github/ISSUE_TEMPLATE/1_bug.md
+++ /dev/null
@@ -1,34 +0,0 @@
----
-name: I found a problem with wger
-about: While using wger the application crashes or throws an exception, a
- widget is buggy, or something looks wrong.
-title: ''
-labels: ''
-assignees: ''
-
----
-
-## Steps to Reproduce
-
-
-
-1. ...
-2. ...
-3. ...
-
-**Expected results:**
-
-**Actual results:**
-
-
- Logs
-
-
-
-```
-```
-
-
-
diff --git a/.github/ISSUE_TEMPLATE/1_bug.yml b/.github/ISSUE_TEMPLATE/1_bug.yml
new file mode 100644
index 00000000..385e5cc8
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/1_bug.yml
@@ -0,0 +1,53 @@
+# https://docs.github.com/en/communities/using-templates-to-encourage-useful-issues-and-pull-requests/syntax-for-issue-forms
+# https://docs.github.com/en/communities/using-templates-to-encourage-useful-issues-and-pull-requests/syntax-for-githubs-form-schema
+
+name: Bug report
+description: Report an error or unexpected behavior
+type: bug
+body:
+ - type: dropdown
+ id: priority
+ attributes:
+ label: Priority/Impact
+ description: How severe is the issue?
+ options:
+ - Low (minor inconvenience)
+ - Medium (affects some functionality)
+ - High (critical issue, blocks workflow)
+
+ - type: textarea
+ id: description
+ attributes:
+ label: Description
+ description: |
+ A clear and concise description of the bug.
+ placeholder: |
+ Please include any information you think is relevant to the issue you are experiencing.
+ This could include any steps to reproduce it (if it happens consistently), expected vs.
+ actual behavior, logs, screenshots, links to related issues, etc.
+ validations:
+ required: true
+
+ - type: input
+ id: server-version
+ attributes:
+ label: Server version
+ description: |
+ What version of wger are you using and how did you install it (you use our server,
+ docker compose, manual installation, etc)?
+ placeholder: |
+ Check https:///software/about-us or the git sha1 of the last commit you pulled
+ validations:
+ required: false
+
+ - type: input
+ id: app-version
+ attributes:
+ label: Mobile app version
+ description: |
+ What version of the mobile app are you using and how did you install it
+ (Play Store, App Store, Flathub, self compiled, etc.)?
+ placeholder: |
+ Check the "about wger" dialog
+ validations:
+ required: false
diff --git a/.github/ISSUE_TEMPLATE/2_feature_request.md b/.github/ISSUE_TEMPLATE/2_feature_request.md
deleted file mode 100644
index 924b1e42..00000000
--- a/.github/ISSUE_TEMPLATE/2_feature_request.md
+++ /dev/null
@@ -1,26 +0,0 @@
----
-name: Feature request
-about: Suggest a new idea for wger.
-title: ''
-labels: ''
-assignees: ''
-
----
-
-## Use case
-
-
-
-## Proposal
-
-
diff --git a/.github/ISSUE_TEMPLATE/2_feature_request.yml b/.github/ISSUE_TEMPLATE/2_feature_request.yml
new file mode 100644
index 00000000..5ea0dff8
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/2_feature_request.yml
@@ -0,0 +1,33 @@
+name: Feature request
+description: Suggest a new idea for wger
+type: enhancement
+body:
+ - type: textarea
+ id: description
+ attributes:
+ label: Use case
+ description: |
+ A description of what new feature or behavior you would like to see.
+ validations:
+ required: true
+
+ - type: textarea
+ id: proposal
+ attributes:
+ label: Proposal
+ description: |
+ Why is this feature needed? What problems does it solve?
+ validations:
+ required: false
+
+ - type: textarea
+ id: additional-context
+ attributes:
+ label: Additional Context
+ description: |
+ Any extra details, related issues, or mockups
+ placeholder: |
+ Screenshots or mockups, links to similar features in other applications, or other relevant
+ information.
+ validations:
+ required: false
diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md
index 4cf8375a..073681dc 100644
--- a/.github/pull_request_template.md
+++ b/.github/pull_request_template.md
@@ -1,25 +1,17 @@
-## Description (Proposed Changes)
-(Please try to mention in bullet points.)
+# Proposed Changes
-
-
-## Link to the issue :
+## Related Issue(s)
-(Add link of the issue you have proposed changes to)
+If applicable, please link to any related issues (`Closes #123`,
+`Closes wger-project/other-repo#123`, `See also #123`, etc.)
-- Link :
+## Please check that the PR fulfills these requirements
-## Tests
-
-Please make sure to add tests when implementing new features.
-
-## Checklist
-
-Please check that the PR fulfills all requirements listed below by checking the relevant checkboxes (`[x]`). This will ensure a smooth and quick review process.
-
-- [ ] Set a 100 character limit in your editor/IDE to avoid white space diffs in the PR
- [ ] Tests for the changes have been added (for bug fixes / features)
-- [ ] Added yourself to AUTHORS.md
+- [ ] Set a 100 character limit in your editor/IDE to avoid white space diffs in the PR
+ (run `dart format --line-length=100 .`)
- [ ] Updated/added relevant documentation (doc comments with `///`).
- [ ] Added relevant reviewers.
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 8eb14605..57d410b4 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -35,6 +35,6 @@ jobs:
run: flutter test --coverage
- name: Coveralls
- uses: coverallsapp/github-action@master
+ uses: coverallsapp/github-action@v2
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
diff --git a/AUTHORS.md b/AUTHORS.md
index f4bf87d3..f39c304f 100644
--- a/AUTHORS.md
+++ b/AUTHORS.md
@@ -1,85 +1,350 @@
-# Authors
+# Contributors and translators to this repository
-## Developers
+Thank you all for contributing to the project, you are true heroes! 🫶
-- Jigar Prajapati -
-- Roland Geider –
-- Dylan Aird -
-- Jannik Norden -
-- Arun Muralidharan -
-- Khushbu Bora -
-- Patrick Witter -
-- Tomer Ben-Rachel -
-- Thilina Herath -
-- Marko Milosevic -
-- Karthik Reddy (Axel) -
-- Ogundoyin Toluwani -
-- Nenza Nurfirmansyah -
-- Florian Schmitz -
-- Adam Bujdoš -
-- Aman Negi -
-- Sandi Milohanic -
-- Miroslav Mazel -
-- artchiee -
-- Tejas Bir Singh -
-- Abhishek Saini -
-- Hanaa Allohibi -
-- Shey Alnasrawi -
-- Costas Korai -
-- Bassam Mutairi -
-- Dieter Plaetinck -
-- Dennis van Peer -
-- sizzlesloth -
-- Arya Singh -
-- Xianglin Zeng -
-- Sangharsh Sulke -
-- Yashas H Majmudar -
+## Contributors
+
+- thisisyoussef - [https://github.com/thisisyoussef](https://github.com/thisisyoussef)
+- Roland Geider - [https://github.com/rolandgeider](https://github.com/rolandgeider)
+- Yashas H Majmudar - [https://github.com/yashas-hm](https://github.com/yashas-hm)
+- Github-actions - [https://github.com/invalid-email-address](https://github.com/invalid-email-address)
+- Christijan - [https://github.com/ChrispyM](https://github.com/ChrispyM)
+- Jackpkn - [https://github.com/Jackpkn](https://github.com/Jackpkn)
+- sangharshdeveloper - [https://github.com/Sangharshdeveloper](https://github.com/Sangharshdeveloper)
+- ImgBotApp - [https://github.com/ImgBotApp](https://github.com/ImgBotApp)
+- தமிழ்நேரம் - [https://github.com/TamilNeram](https://github.com/TamilNeram)
+- Xianglin Zeng - [https://github.com/FutureYL3](https://github.com/FutureYL3)
+- Arya Pratap Singh - [https://github.com/ARYPROGRAMMER](https://github.com/ARYPROGRAMMER)
+- ARYPROGRAMMER - [https://github.com/ARYPROGRAMMER](https://github.com/ARYPROGRAMMER)
+- Dieter Plaetinck - [https://github.com/Dieterbe](https://github.com/Dieterbe)
+- szalas - [https://github.com/szalas](https://github.com/szalas)
+- dan - [https://github.com/sizzlesloth](https://github.com/sizzlesloth)
+- DVPeer - [https://github.com/Denpeer](https://github.com/Denpeer)
+- Marco Rimoldi - [https://github.com/marcor](https://github.com/marcor)
+- Licaon_Kter - [https://github.com/licaon-kter](https://github.com/licaon-kter)
+- Bassam A - [https://github.com/mutairibassam](https://github.com/mutairibassam)
+- Costas Korai
+- null - [https://github.com/hn-n](https://github.com/hn-n)
+- Miroslav Mazel
+- Milksheyke - [https://github.com/sheyaln](https://github.com/sheyaln)
+- Abhishek Saini - [https://github.com/Abhisheksainii](https://github.com/Abhisheksainii)
+- dimii27 - [https://github.com/dimii27](https://github.com/dimii27)
+- Antonis-geo - [https://github.com/Antonis-geo](https://github.com/Antonis-geo)
+- artchiee - [https://github.com/artchiee](https://github.com/artchiee)
+- artchiee - [https://github.com/artchiee](https://github.com/artchiee)
+- Jigar Prajapati - [https://github.com/Jiggy9](https://github.com/Jiggy9)
+- Dalton Scavassa
+- Jigar - [https://github.com/Jiggy9](https://github.com/Jiggy9)
+- Deepanshu - [https://github.com/Deepanshu-Sharma-18](https://github.com/Deepanshu-Sharma-18)
+- tejasbirsingh - [https://github.com/tejasbirsingh](https://github.com/tejasbirsingh)
+- Freddy Cunningham - [https://github.com/freddy-c](https://github.com/freddy-c)
+- Freddy Cunningham - [https://github.com/freddy-c](https://github.com/freddy-c)
+- Malay Pandit - [https://github.com/DeveloperMalay](https://github.com/DeveloperMalay)
+- Mirek Mazel - [https://github.com/12people](https://github.com/12people)
+- Miroslav Mazel
+- Roman Kalivoda - [https://github.com/RKCZ](https://github.com/RKCZ)
+- Tiisetso Dinoko - [https://github.com/Dinokojt7](https://github.com/Dinokojt7)
+- Harshit - [https://github.com/Harshit933](https://github.com/Harshit933)
+- Harshit - [https://github.com/Harshit933](https://github.com/Harshit933)
+- Raman Tank - [https://github.com/raman04-byte](https://github.com/raman04-byte)
+- Mohammad Rafigh - [https://github.com/mohammadrafigh](https://github.com/mohammadrafigh)
+- Edmundo Meyer - [https://github.com/e-meyer](https://github.com/e-meyer)
+- Bujdy - [https://github.com/bujdy](https://github.com/bujdy)
+- amannegi - [https://github.com/AmanNegi](https://github.com/AmanNegi)
+- Aman Negi - [https://github.com/AmanNegi](https://github.com/AmanNegi)
+- Aaliya Ali - [https://github.com/Aaliya-Ali](https://github.com/Aaliya-Ali)
+- Aaliya Ali - [https://github.com/Aaliya-Ali](https://github.com/Aaliya-Ali)
+- Sandi Milohanic
+- Hissabat Manager - [https://github.com/Chinguetti-Quizz](https://github.com/Chinguetti-Quizz)
+- Nenza Nurfirmansyah - [https://github.com/nenzan](https://github.com/nenzan)
+- Vinod - [https://github.com/skdotv](https://github.com/skdotv)
+- Aditya - [https://github.com/adeeteya](https://github.com/adeeteya)
+- JustinBenito - [https://github.com/JustinBenito](https://github.com/JustinBenito)
+- Florian Schmitz - [https://github.com/floodoo](https://github.com/floodoo)
+- avinash - [https://github.com/HeyAvi](https://github.com/HeyAvi)
+- Tolu ogundoyin - [https://github.com/Tolu007](https://github.com/Tolu007)
+- Daniil Kovalev - [https://github.com/kovdan01](https://github.com/kovdan01)
+- Saint Gabriel - [https://github.com/saintgabriel0](https://github.com/saintgabriel0)
+- Artem - [https://github.com/defaultpage](https://github.com/defaultpage)
+- WMs784 - [https://github.com/WMs784](https://github.com/WMs784)
+- KenXRan - [https://github.com/kenxran](https://github.com/kenxran)
+- João Goulart - [https://github.com/usehalter](https://github.com/usehalter)
+- yaseenagwan - [https://github.com/agwanyaseen](https://github.com/agwanyaseen)
+- G. Buendía - [https://github.com/gbuendia](https://github.com/gbuendia)
+- Sylvia van Os - [https://github.com/TheLastProject](https://github.com/TheLastProject)
+- Debayan Sutradhar - [https://github.com/rnayabed](https://github.com/rnayabed)
+- Poussinou - [https://github.com/Poussinou](https://github.com/Poussinou)
+- Nikita Epifanov
+- Ady - [https://github.com/adyhnat](https://github.com/adyhnat)
+- Adrian Halko
+- Tomáš Konkoľ - [https://github.com/TomasKonkol](https://github.com/TomasKonkol)
+- Marko Milosevic - [https://github.com/TaarnStar](https://github.com/TaarnStar)
+- Sandi Milohanić - [https://github.com/sandimilohanic](https://github.com/sandimilohanic)
+- AxelBlaz3 - [https://github.com/AxelBlaz3](https://github.com/AxelBlaz3)
+- Marvin M - [https://github.com/M123-dev](https://github.com/M123-dev)
+- himikat89 - [https://github.com/himikat89](https://github.com/himikat89)
+- infiniteoverflow - [https://github.com/infiniteoverflow](https://github.com/infiniteoverflow)
+- Tomer Ben Rachel - [https://github.com/TomerPacific](https://github.com/TomerPacific)
+- Thilina TCH - [https://github.com/ThilinaTCH](https://github.com/ThilinaTCH)
+- Thilina Herath - [https://github.com/thilinatnt](https://github.com/thilinatnt)
+- ToldYouThat
+- Yair Chen - [https://github.com/chenyair](https://github.com/chenyair)
+- henok3878 - [https://github.com/henok3878](https://github.com/henok3878)
+- Patrick Witter - [https://github.com/patrickwitter](https://github.com/patrickwitter)
+- ton-An - [https://github.com/ton-An](https://github.com/ton-An)
+- Prakash Shekhar - [https://github.com/prakash-shekhar](https://github.com/prakash-shekhar)
+- Khushbu Bora - [https://github.com/KhushbuBora](https://github.com/KhushbuBora)
+- Arun Muralidharan - [https://github.com/arun-muralidharan](https://github.com/arun-muralidharan)
+- yiter
+- Henio Szewczyk - [https://github.com/hszewczyk](https://github.com/hszewczyk)
+- Jannik Norden
+- Allan Nordhøy - [https://github.com/comradekingu](https://github.com/comradekingu)
+- Stefano Rossi - [https://github.com/stefanorossiti](https://github.com/stefanorossiti)
+- Dylan Aird - [https://github.com/Dolaned](https://github.com/Dolaned)
## Translators
-- Saudi Arabian
- - Hanaa Allohibi
-- German
+### Chinese (Traditional Han script)
- - mondstern (2)
- - J. Lavoie (19)
- - Roland Geider (142)
+- Peter Dave Hello - [https://github.com/PeterDaveHello](https://github.com/PeterDaveHello)
-- English
+### Polish
- - Roland Geider (3)
- - Allan Nordhøy (8)
+- Karol Solecki - [https://github.com/karolsol](https://github.com/karolsol)
+- Piotr Strebski - [https://github.com/strebski](https://github.com/strebski)
+- Dawid Panyło
+- Anonymous - [https://github.com/weblate](https://github.com/weblate)
+- Marcin Schoenknecht
+- Patryk - [https://github.com/byakurau](https://github.com/byakurau)
+- Michał Homza - [https://github.com/HagiaHaya](https://github.com/HagiaHaya)
+- Jacob - [https://github.com/devzom](https://github.com/devzom)
-- Italian
+### Serbian
- - mondstern (2)
- - DT (4)
- - J. Lavoie (24)
- - Stefano Rossi (120)
+- Mladen Trišić - [https://github.com/mtrisic](https://github.com/mtrisic)
-- Spanish
+### Dutch
- - Roland Geider (1)
- - martingetzel (119)
+- Joey Haalboom - [https://github.com/JoeyHaalboom](https://github.com/JoeyHaalboom)
-- French
+### Russian
- - J. Lavoie (92)
- - Stefano Rossi (94)
+- Алексей Курышко - [https://github.com/alexkuryshko](https://github.com/alexkuryshko)
+- lightningcpu - [https://github.com/lightningcpu](https://github.com/lightningcpu)
+- Кирилл Александрович Злобин - [https://github.com/gungstarbeiter](https://github.com/gungstarbeiter)
+- Ivan Katkov - [https://github.com/Porphyrion](https://github.com/Porphyrion)
+- Nikita Epifanov
-- Norwegian Bokmål
+### Croatian
- - Allan Nordhøy (98)
+- Milo Ivir - [https://github.com/milotype](https://github.com/milotype)
+- Roland Geider - [https://github.com/rolandgeider](https://github.com/rolandgeider)
+- SMilohanic - [https://github.com/sandimilohanic](https://github.com/sandimilohanic)
-- Japanese
+### Portuguese
- - Kosei TANAKA (97)
+- Edson Wolf - [https://github.com/edsonblwolf](https://github.com/edsonblwolf)
+- Anonymous - [https://github.com/weblate](https://github.com/weblate)
+- Wilton Rodrigues
+- Guilherme Salomão - [https://github.com/salomaoparkour](https://github.com/salomaoparkour)
+- Bruno de Moura - [https://github.com/bruunomooura](https://github.com/bruunomooura)
+- Dalton Scavassa
+- Stefan Taiguara - [https://github.com/Teitei011](https://github.com/Teitei011)
+- Eduardo Menges Mattje - [https://github.com/EduMenges](https://github.com/EduMenges)
+- Edu Cavalheiro - [https://github.com/EduCavalheiro](https://github.com/EduCavalheiro)
+- João Goulart - [https://github.com/usehalter](https://github.com/usehalter)
-- Bahasa Indonesia
+### Italian
- - Nenza Nurfirmansyah (73)
+- Antenore Gatta - [https://github.com/antenore](https://github.com/antenore)
+- Gab Gat
+- Anonymous - [https://github.com/weblate](https://github.com/weblate)
+- Federico Pierantoni - [https://github.com/F3FFO](https://github.com/F3FFO)
+- oarion - [https://github.com/oarion](https://github.com/oarion)
+- Alessandro Faucci - [https://github.com/Dhy19971](https://github.com/Dhy19971)
+- Sfizio Purea
+- Mirko Ferrati - [https://github.com/MirkoFerrati](https://github.com/MirkoFerrati)
+- Stefano Camillo - [https://github.com/djste](https://github.com/djste)
+- MARCO ACORTE - [https://github.com/marco-acorte](https://github.com/marco-acorte)
+- J. Lavoie
+- DT
+- mondstern
+- Stefano Rossi - [https://github.com/stefanorossiti](https://github.com/stefanorossiti)
-- Croatian
+### French
- - Sandi Milohaic
+- William - [https://github.com/WilliamR312](https://github.com/WilliamR312)
+- florent4014 - [https://github.com/florent4014](https://github.com/florent4014)
+- Anonymous - [https://github.com/weblate](https://github.com/weblate)
+- Xav Basco
+- David Olewski - [https://github.com/Arigowin](https://github.com/Arigowin)
+- yoyomax80400 - [https://github.com/yoyomax80400](https://github.com/yoyomax80400)
+- loued - [https://github.com/Loued](https://github.com/Loued)
+- Célian
+- MrSniikyz - [https://github.com/BabyGeek](https://github.com/BabyGeek)
+- Roland Geider - [https://github.com/rolandgeider](https://github.com/rolandgeider)
+- J. Lavoie
+- Antoine Vibien - [https://github.com/r1llettes](https://github.com/r1llettes)
+- Stefano Rossi - [https://github.com/stefanorossiti](https://github.com/stefanorossiti)
+
+### Ukrainian
+
+- Максим Горпиніч - [https://github.com/Maksim2005UA](https://github.com/Maksim2005UA)
+- Roland Geider - [https://github.com/rolandgeider](https://github.com/rolandgeider)
+- Максим Горпиніч
+- Anonymous - [https://github.com/weblate](https://github.com/weblate)
+- Dan - [https://github.com/Kefir2105](https://github.com/Kefir2105)
+- Dan
+- Tymofii Lytvynenko
+- Artem - [https://github.com/defaultpage](https://github.com/defaultpage)
+
+### Portuguese (Brazil)
+
+- Ricardo Lima - [https://github.com/rhrlima](https://github.com/rhrlima)
+- Clerton Araujo - [https://github.com/clertonraf](https://github.com/clertonraf)
+- Anonymous - [https://github.com/weblate](https://github.com/weblate)
+- Wilton Rodrigues
+- Nao interessa
+- Lucas Mezêncio - [https://github.com/lucasmezencio](https://github.com/lucasmezencio)
+- Felipe Antônio Rodrigues Cardoso
+- Luigi Henrick Feitoza Silva - [https://github.com/luigihenrick](https://github.com/luigihenrick)
+- João Hortêncio Moraes - [https://github.com/joaohortencio](https://github.com/joaohortencio)
+
+### Tamil
+
+- தமிழ்நேரம் - [https://github.com/TamilNeram](https://github.com/TamilNeram)
+
+### Chinese (Simplified Han script)
+
+- Herb Huang
+
+### Hindi
+
+- pavan arun bagwe - [https://github.com/pavanb0](https://github.com/pavanb0)
+- Anonymous - [https://github.com/weblate](https://github.com/weblate)
+- Debayan Sutradhar - [https://github.com/rnayabed](https://github.com/rnayabed)
+
+### Turkish
+
+- Oğuz Ersen - [https://github.com/oersen](https://github.com/oersen)
+- Roland Geider - [https://github.com/rolandgeider](https://github.com/rolandgeider)
+- Cem Avcı - [https://github.com/cem256](https://github.com/cem256)
+- Oğuz Ersen
+- Cenk Cidecio - [https://github.com/ccidecio](https://github.com/ccidecio)
+- ToldYouThat
+
+### German
+
+- kvnrmnn - [https://github.com/rmnn92](https://github.com/rmnn92)
+- Anonymous - [https://github.com/weblate](https://github.com/weblate)
+- Roland Geider - [https://github.com/rolandgeider](https://github.com/rolandgeider)
+- Victor Jouhoff - [https://github.com/jouhoffv](https://github.com/jouhoffv)
+- m4skedbyte
+- Axel Steinbrecher
+- Christoph Suesser - [https://github.com/TheFitzZZ](https://github.com/TheFitzZZ)
+- Luis Lüscher - [https://github.com/lslschr](https://github.com/lslschr)
+- mondstern
+- J. Lavoie
+- Marvin M - [https://github.com/M123-dev](https://github.com/M123-dev)
+- Lydia
+- Allan Nordhøy - [https://github.com/comradekingu](https://github.com/comradekingu)
+
+### Indonesian
+
+- aryakdaniswara - [https://github.com/aryakdaniswara](https://github.com/aryakdaniswara)
+- Anonymous - [https://github.com/weblate](https://github.com/weblate)
+- Debi Maulana Ahsan Halla
+- Roland Geider - [https://github.com/rolandgeider](https://github.com/rolandgeider)
+
+### Catalan
+
+- Zixu Sun - [https://github.com/ziixu](https://github.com/ziixu)
+- Anonymous - [https://github.com/weblate](https://github.com/weblate)
+- guillem - [https://github.com/gbuendia](https://github.com/gbuendia)
+
+### Chinese (Simplified)
+
+- 纪颖志 - [https://github.com/jiyingzhi](https://github.com/jiyingzhi)
+- Yi-Han Hsiung - [https://github.com/AaronHsiung](https://github.com/AaronHsiung)
+- Tsz Hong CHAN - [https://github.com/tomyan112](https://github.com/tomyan112)
+- Eddie Tang - [https://github.com/EDED2314](https://github.com/EDED2314)
+- Jing - [https://github.com/jingcheng16](https://github.com/jingcheng16)
+- sr-c - [https://github.com/sr-c](https://github.com/sr-c)
+- tony - [https://github.com/tonyxxliu](https://github.com/tonyxxliu)
+- yiter
+
+### Greek
+
+- Dimitrys Meliates
+- Antonis-geo - [https://github.com/Antonis-geo](https://github.com/Antonis-geo)
+
+### Czech
+
+- Fjuro - [https://github.com/Fjuro](https://github.com/Fjuro)
+- Fjuro
+- CaptainDolphy - [https://github.com/CaptainDolphy](https://github.com/CaptainDolphy)
+- Roman Kalivoda - [https://github.com/RKCZ](https://github.com/RKCZ)
+
+### Arabic
+
+- Anonymous - [https://github.com/weblate](https://github.com/weblate)
+- Hanaa - [https://github.com/hn-n](https://github.com/hn-n)
+- Ahmed zein - [https://github.com/Ahmed-Zein](https://github.com/Ahmed-Zein)
+
+### Hebrew
+
+- Anonymous - [https://github.com/weblate](https://github.com/weblate)
+- n,rdo
+- Tomer Ben Rachel - [https://github.com/TomerPacific](https://github.com/TomerPacific)
+
+### Japanese
+
+- Anonymous - [https://github.com/weblate](https://github.com/weblate)
+- Tsz Hong CHAN - [https://github.com/tomyan112](https://github.com/tomyan112)
+- sasukeiscool - [https://github.com/sasukeiscool](https://github.com/sasukeiscool)
+- yiter
+
+### Spanish
+
+- Anonymous - [https://github.com/weblate](https://github.com/weblate)
+- Roberto Iglesias - [https://github.com/iglesiasroberto14](https://github.com/iglesiasroberto14)
+- c06c3abb8f
+- Javier - [https://github.com/dysk0zero](https://github.com/dysk0zero)
+- facu-d - [https://github.com/facu-d](https://github.com/facu-d)
+- Biologia Libros - [https://github.com/bio201922](https://github.com/bio201922)
+- guillem - [https://github.com/gbuendia](https://github.com/gbuendia)
+- Chris Klempau - [https://github.com/yoinkers1337](https://github.com/yoinkers1337)
+- Roland Geider - [https://github.com/rolandgeider](https://github.com/rolandgeider)
+- martingetzel - [https://github.com/martingetzel](https://github.com/martingetzel)
+
+### Chinese (Traditional)
+
+- hugoalh
+- Tsz Hong CHAN - [https://github.com/tomyan112](https://github.com/tomyan112)
+- Chung-Wei Chung - [https://github.com/webb790709](https://github.com/webb790709)
+- HY Cheng
+
+### Portuguese (Portugal)
+
+- Anonymous - [https://github.com/weblate](https://github.com/weblate)
+
+### Romanian
+
+- Bogdan Bujor - [https://github.com/qSharpy](https://github.com/qSharpy)
+- dimii27 - [https://github.com/dimii27](https://github.com/dimii27)
+
+### English
+
+- guillem - [https://github.com/gbuendia](https://github.com/gbuendia)
+- Allan Nordhøy - [https://github.com/comradekingu](https://github.com/comradekingu)
+- Roland Geider - [https://github.com/rolandgeider](https://github.com/rolandgeider)
+
+### Norwegian Bokmål
+
+- Roland Geider - [https://github.com/rolandgeider](https://github.com/rolandgeider)
+- Allan Nordhøy - [https://github.com/comradekingu](https://github.com/comradekingu)
+
+### Amharic
+
+- henok3878 - [https://github.com/henok3878](https://github.com/henok3878)
diff --git a/README.md b/README.md
index 2e0d16b9..cb728a73 100644
--- a/README.md
+++ b/README.md
@@ -24,20 +24,33 @@ height="80">](https://play.google.com/store/apps/details?id=de.wger.flutter)
alt="Get it on F-Droid"
height="80">](https://f-droid.org/packages/de.wger.flutter/)
-## Development
+## Developing and contributing
-This is a regular flutter application, so you basically just run `flutter run` in
-the root directory of the project, and optionally use the test server to login
-(the db is reset daily):
+Our goal is to build an awesome and flexible fitness and nutrition manager,
+along with a comprehensive list of exercises and ingredients, all released
+under a free license.
+
+For this, we’d love your help! Whether it’s code, translations, exercises or
+reporting issues and ideas, check out our
+[contribution guide](https://wger.readthedocs.io/en/latest/contributing.html)
+to get started.
+
+A huge thank you to everyone who has contributed so far! ❤️ See the full list
+in [AUTHORS.md](AUTHORS.md).
+
+**TLDR**
+
+```bash
+flutter run
+```
+
+This is a regular flutter application, so there's no magic. You will need a backend
+for this, so feel free to use the test server for this (the db is reset daily):
* URL: `https://wger-master.rge.uber.space`
* username: `user`
* password: `flutteruser`
-For more information consult the development documentation:
-
-
-
## Translation
Translate the app to your language on [Weblate](https://hosted.weblate.org/engage/wger/).
diff --git a/ios/Podfile.lock b/ios/Podfile.lock
index 364cb767..065b1a2a 100644
--- a/ios/Podfile.lock
+++ b/ios/Podfile.lock
@@ -2,8 +2,6 @@ PODS:
- camera_avfoundation (0.0.1):
- Flutter
- Flutter (1.0.0)
- - flutter_barcode_scanner (2.0.0):
- - Flutter
- flutter_keyboard_visibility (0.0.1):
- Flutter
- flutter_zxing (0.0.1):
@@ -24,23 +22,26 @@ PODS:
- shared_preferences_foundation (0.0.1):
- Flutter
- FlutterMacOS
- - sqlite3 (3.48.0):
- - sqlite3/common (= 3.48.0)
- - sqlite3/common (3.48.0)
- - sqlite3/dbstatvtab (3.48.0):
+ - sqlite3 (3.49.1):
+ - sqlite3/common (= 3.49.1)
+ - sqlite3/common (3.49.1)
+ - sqlite3/dbstatvtab (3.49.1):
- sqlite3/common
- - sqlite3/fts5 (3.48.0):
+ - sqlite3/fts5 (3.49.1):
- sqlite3/common
- - sqlite3/perf-threadsafe (3.48.0):
+ - sqlite3/math (3.49.1):
- sqlite3/common
- - sqlite3/rtree (3.48.0):
+ - sqlite3/perf-threadsafe (3.49.1):
+ - sqlite3/common
+ - sqlite3/rtree (3.49.1):
- sqlite3/common
- sqlite3_flutter_libs (0.0.1):
- Flutter
- FlutterMacOS
- - sqlite3 (~> 3.48.0)
+ - sqlite3 (~> 3.49.1)
- sqlite3/dbstatvtab
- sqlite3/fts5
+ - sqlite3/math
- sqlite3/perf-threadsafe
- sqlite3/rtree
- url_launcher_ios (0.0.1):
@@ -52,7 +53,6 @@ PODS:
DEPENDENCIES:
- camera_avfoundation (from `.symlinks/plugins/camera_avfoundation/ios`)
- Flutter (from `Flutter`)
- - flutter_barcode_scanner (from `.symlinks/plugins/flutter_barcode_scanner/ios`)
- flutter_keyboard_visibility (from `.symlinks/plugins/flutter_keyboard_visibility/ios`)
- flutter_zxing (from `.symlinks/plugins/flutter_zxing/ios`)
- image_picker_ios (from `.symlinks/plugins/image_picker_ios/ios`)
@@ -75,8 +75,6 @@ EXTERNAL SOURCES:
:path: ".symlinks/plugins/camera_avfoundation/ios"
Flutter:
:path: Flutter
- flutter_barcode_scanner:
- :path: ".symlinks/plugins/flutter_barcode_scanner/ios"
flutter_keyboard_visibility:
:path: ".symlinks/plugins/flutter_keyboard_visibility/ios"
flutter_zxing:
@@ -105,7 +103,6 @@ EXTERNAL SOURCES:
SPEC CHECKSUMS:
camera_avfoundation: 04b44aeb14070126c6529e5ab82cc7c9fca107cf
Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7
- flutter_barcode_scanner: c5aa9f51c150a6242fa392386bd52b64bb27fcb5
flutter_keyboard_visibility: 4625131e43015dbbe759d9b20daaf77e0e3f6619
flutter_zxing: e741c4f3335db8910e5c396c4291cdfb320859dc
image_picker_ios: 7fe1ff8e34c1790d6fff70a32484959f563a928a
@@ -115,8 +112,8 @@ SPEC CHECKSUMS:
pointer_interceptor_ios: ec847ef8b0915778bed2b2cef636f4d177fa8eed
rive_common: dd421daaf9ae69f0125aa761dd96abd278399952
shared_preferences_foundation: 9e1978ff2562383bd5676f64ec4e9aa8fa06a6f7
- sqlite3: 3da10a59910c809fb584a93aa46a3f05b785e12e
- sqlite3_flutter_libs: c26d86af4ad88f1465dc4e07e6dc6931eef228e4
+ sqlite3: fc1400008a9b3525f5914ed715a5d1af0b8f4983
+ sqlite3_flutter_libs: f6acaa2172e6bb3e2e70c771661905080e8ebcf2
url_launcher_ios: 694010445543906933d732453a59da0a173ae33d
video_player_avfoundation: 2cef49524dd1f16c5300b9cd6efd9611ce03639b
diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj
index 3209bb17..08cbbe00 100644
--- a/ios/Runner.xcodeproj/project.pbxproj
+++ b/ios/Runner.xcodeproj/project.pbxproj
@@ -8,9 +8,9 @@
/* Begin PBXBuildFile section */
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
+ 3845DFE0762714C6680D5DFA /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFA44D9DB464FB85F130C5B5 /* Pods_Runner.framework */; };
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; };
- 78C727F12E8C2C2BF5ED5703 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DAC1C25406C5CD78CE59E547 /* Pods_Runner.framework */; };
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
@@ -30,14 +30,14 @@
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
- 0661B42137D743038BB7032F /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; };
- 0AA56188CB2769B47E250516 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; };
+ 0ED96167FF623FAB319C6E99 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; };
1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; };
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; };
3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; };
74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; };
74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; };
+ 89F44165E15E0A7B109A05EB /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; };
9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; };
9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; };
97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -45,8 +45,8 @@
97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; };
97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
- C19FA8F529BB2B899AB0C23A /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; };
- DAC1C25406C5CD78CE59E547 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ AFA44D9DB464FB85F130C5B5 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ C71BAD15819A771165D784B0 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@@ -54,17 +54,17 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
- 78C727F12E8C2C2BF5ED5703 /* Pods_Runner.framework in Frameworks */,
+ 3845DFE0762714C6680D5DFA /* Pods_Runner.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
- 631B4307BD65C9D08E514EBB /* Frameworks */ = {
+ 23E168F95D2790D29E207E68 /* Frameworks */ = {
isa = PBXGroup;
children = (
- DAC1C25406C5CD78CE59E547 /* Pods_Runner.framework */,
+ AFA44D9DB464FB85F130C5B5 /* Pods_Runner.framework */,
);
name = Frameworks;
sourceTree = "";
@@ -87,7 +87,7 @@
97C146F01CF9000F007C117D /* Runner */,
97C146EF1CF9000F007C117D /* Products */,
BB0286322FD60C00014F981C /* Pods */,
- 631B4307BD65C9D08E514EBB /* Frameworks */,
+ 23E168F95D2790D29E207E68 /* Frameworks */,
);
sourceTree = "";
};
@@ -117,9 +117,9 @@
BB0286322FD60C00014F981C /* Pods */ = {
isa = PBXGroup;
children = (
- 0661B42137D743038BB7032F /* Pods-Runner.debug.xcconfig */,
- C19FA8F529BB2B899AB0C23A /* Pods-Runner.release.xcconfig */,
- 0AA56188CB2769B47E250516 /* Pods-Runner.profile.xcconfig */,
+ C71BAD15819A771165D784B0 /* Pods-Runner.debug.xcconfig */,
+ 0ED96167FF623FAB319C6E99 /* Pods-Runner.release.xcconfig */,
+ 89F44165E15E0A7B109A05EB /* Pods-Runner.profile.xcconfig */,
);
path = Pods;
sourceTree = "";
@@ -131,14 +131,14 @@
isa = PBXNativeTarget;
buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
buildPhases = (
- 55A9F1D1670043D7444258F2 /* [CP] Check Pods Manifest.lock */,
+ 49A79EC3F389C902853B9186 /* [CP] Check Pods Manifest.lock */,
9740EEB61CF901F6004384FC /* Run Script */,
97C146EA1CF9000F007C117D /* Sources */,
97C146EB1CF9000F007C117D /* Frameworks */,
97C146EC1CF9000F007C117D /* Resources */,
9705A1C41CF9048500538489 /* Embed Frameworks */,
3B06AD1E1E4923F5004D2608 /* Thin Binary */,
- 8D4C3EABCD024FF4FF37C7E4 /* [CP] Embed Pods Frameworks */,
+ 0A9E38C31DF3DC192213822E /* [CP] Embed Pods Frameworks */,
);
buildRules = (
);
@@ -197,6 +197,23 @@
/* End PBXResourcesBuildPhase section */
/* Begin PBXShellScriptBuildPhase section */
+ 0A9E38C31DF3DC192213822E /* [CP] Embed Pods Frameworks */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist",
+ );
+ name = "[CP] Embed Pods Frameworks";
+ outputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
+ showEnvVarsInLog = 0;
+ };
3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
isa = PBXShellScriptBuildPhase;
alwaysOutOfDate = 1;
@@ -213,7 +230,7 @@
shellPath = /bin/sh;
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin";
};
- 55A9F1D1670043D7444258F2 /* [CP] Check Pods Manifest.lock */ = {
+ 49A79EC3F389C902853B9186 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
@@ -235,23 +252,6 @@
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0;
};
- 8D4C3EABCD024FF4FF37C7E4 /* [CP] Embed Pods Frameworks */ = {
- isa = PBXShellScriptBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- inputFileListPaths = (
- "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist",
- );
- name = "[CP] Embed Pods Frameworks";
- outputFileListPaths = (
- "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist",
- );
- runOnlyForDeploymentPostprocessing = 0;
- shellPath = /bin/sh;
- shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
- showEnvVarsInLog = 0;
- };
9740EEB61CF901F6004384FC /* Run Script */ = {
isa = PBXShellScriptBuildPhase;
alwaysOutOfDate = 1;
diff --git a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
index e67b2808..4f746537 100644
--- a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
+++ b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
@@ -50,6 +50,7 @@
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
+ enableGPUValidationMode = "1"
allowLocationSimulation = "YES">
diff --git a/ios/build/.last_build_id b/ios/build/.last_build_id
new file mode 100644
index 00000000..7769d20e
--- /dev/null
+++ b/ios/build/.last_build_id
@@ -0,0 +1 @@
+ce49e7d90cd902197f9a9cbc84219d23
\ No newline at end of file
diff --git a/lib/helpers/misc.dart b/lib/helpers/misc.dart
index 97027392..8db74a85 100644
--- a/lib/helpers/misc.dart
+++ b/lib/helpers/misc.dart
@@ -28,7 +28,7 @@ String repText(
RepetitionUnit? repetitionUnitObj,
num? weight,
WeightUnit? weightUnitObj,
- String? rir,
+ num? rir,
) {
// TODO(x): how to (easily?) translate strings like the units or 'RiR'
diff --git a/lib/models/workouts/log.dart b/lib/models/workouts/log.dart
index 7744b280..c3082bf4 100644
--- a/lib/models/workouts/log.dart
+++ b/lib/models/workouts/log.dart
@@ -49,11 +49,11 @@ class Log {
@JsonKey(required: true, name: 'slot_entry')
int? slotEntryId;
- @JsonKey(required: false)
- String? rir;
+ @JsonKey(required: false, fromJson: stringToNum)
+ num? rir;
- @JsonKey(required: false, name: 'rir_target')
- String? rirTarget;
+ @JsonKey(required: false, fromJson: stringToNum, name: 'rir_target')
+ num? rirTarget;
@JsonKey(required: true, fromJson: stringToNum, name: 'repetitions')
num? repetitions;
@@ -121,10 +121,6 @@ class Log {
repetitionsUnitId = repetitionUnit?.id;
}
- void setRir(String rir) {
- this.rir = rir;
- }
-
/// Returns the text representation for a single setting, used in the gym mode
String get singleLogRepTextNoNl {
return repText(repetitions, repetitionsUnitObj, weight, weightUnitObj, rir)
diff --git a/lib/models/workouts/log.g.dart b/lib/models/workouts/log.g.dart
index d26477a0..397df1b5 100644
--- a/lib/models/workouts/log.g.dart
+++ b/lib/models/workouts/log.g.dart
@@ -34,8 +34,8 @@ Log _$LogFromJson(Map json) {
repetitions: stringToNum(json['repetitions'] as String?),
repetitionsTarget: stringToNum(json['repetitions_target'] as String?),
repetitionsUnitId: (json['repetitions_unit'] as num?)?.toInt() ?? REP_UNIT_REPETITIONS_ID,
- rir: json['rir'] as String?,
- rirTarget: json['rir_target'] as String?,
+ rir: stringToNum(json['rir'] as String?),
+ rirTarget: stringToNum(json['rir_target'] as String?),
weight: stringToNum(json['weight'] as String?),
weightTarget: stringToNum(json['weight_target'] as String?),
weightUnitId: (json['weight_unit'] as num?)?.toInt() ?? WEIGHT_UNIT_KG,
diff --git a/lib/models/workouts/set_config_data.dart b/lib/models/workouts/set_config_data.dart
index 97d2f711..3bc0f85a 100644
--- a/lib/models/workouts/set_config_data.dart
+++ b/lib/models/workouts/set_config_data.dart
@@ -78,14 +78,14 @@ class SetConfigData {
@JsonKey(required: true, name: 'repetitions_rounding', fromJson: stringToNumNull)
late num? repetitionsRounding;
- @JsonKey(required: true)
- late String? rir;
+ @JsonKey(required: true, fromJson: stringToNumNull)
+ late num? rir;
- @JsonKey(required: true, name: 'max_rir')
- late String? maxRir;
+ @JsonKey(required: true, name: 'max_rir', fromJson: stringToNumNull)
+ late num? maxRir;
@JsonKey(required: true)
- late String? rpe;
+ late num? rpe;
@JsonKey(required: true, name: 'rest', fromJson: stringToNumNull)
late num? restTime;
diff --git a/lib/models/workouts/set_config_data.g.dart b/lib/models/workouts/set_config_data.g.dart
index f1239905..561fd77b 100644
--- a/lib/models/workouts/set_config_data.g.dart
+++ b/lib/models/workouts/set_config_data.g.dart
@@ -50,9 +50,9 @@ SetConfigData _$SetConfigDataFromJson(Map json) {
repetitionsRounding: json['repetitions_rounding'] == null
? 1
: stringToNumNull(json['repetitions_rounding'] as String?),
- rir: json['rir'] as String?,
- maxRir: json['max_rir'] as String?,
- rpe: json['rpe'] as String?,
+ rir: stringToNumNull(json['rir'] as String?),
+ maxRir: stringToNumNull(json['max_rir'] as String?),
+ rpe: json['rpe'] as num?,
restTime: stringToNumNull(json['rest'] as String?),
maxRestTime: stringToNumNull(json['max_rest'] as String?),
comment: json['comment'] as String? ?? '',
diff --git a/lib/providers/auth.dart b/lib/providers/auth.dart
index 2316f571..467489a0 100644
--- a/lib/providers/auth.dart
+++ b/lib/providers/auth.dart
@@ -160,7 +160,10 @@ class AuthProvider with ChangeNotifier {
await initVersions(serverUrl);
// If update is required don't log in user
- if (await applicationUpdateRequired()) {
+ if (await applicationUpdateRequired(
+ applicationVersion!.version,
+ {MANIFEST_KEY_CHECK_UPDATE: 'true'},
+ )) {
return {'action': LoginActions.update};
}
diff --git a/lib/widgets/exercises/exercises.dart b/lib/widgets/exercises/exercises.dart
index f07d162a..25e58bf2 100644
--- a/lib/widgets/exercises/exercises.dart
+++ b/lib/widgets/exercises/exercises.dart
@@ -193,7 +193,10 @@ class ExerciseDetail extends StatelessWidget {
// TODO: add carousel for the other images
final List out = [];
if (_exercise.getMainImage != null) {
- out.add(ExerciseImageWidget(image: _exercise.getMainImage));
+ out.add(ExerciseImageWidget(
+ image: _exercise.getMainImage,
+ height: 250,
+ ));
out.add(const SizedBox(height: PADDING));
}
@@ -346,7 +349,7 @@ class MuscleWidget extends StatelessWidget {
children: [
SvgPicture.asset('assets/images/muscles/$background.svg'),
...muscles.map((m) => SvgPicture.asset('assets/images/muscles/main/muscle-${m.id}.svg')),
- ...musclesSecondary.map((m) => SvgPicture.asset(
+ ...musclesSecondary.where((m) => !muscles.contains(m)).map((m) => SvgPicture.asset(
'assets/images/muscles/secondary/muscle-${m.id}.svg',
)),
],
diff --git a/lib/widgets/exercises/filter_modal.dart b/lib/widgets/exercises/filter_modal.dart
index 9ac88ad0..eb6758c7 100644
--- a/lib/widgets/exercises/filter_modal.dart
+++ b/lib/widgets/exercises/filter_modal.dart
@@ -48,7 +48,7 @@ class _ExerciseFilterModalBodyState extends State {
dividerColor: Colors.transparent,
expansionCallback: (panelIndex, isExpanded) {
setState(() {
- filters.filterCategories[panelIndex].isExpanded = !isExpanded;
+ filters.filterCategories[panelIndex].isExpanded = isExpanded;
});
},
elevation: 0,
diff --git a/lib/widgets/exercises/images.dart b/lib/widgets/exercises/images.dart
index eb7f3e0f..ff590814 100644
--- a/lib/widgets/exercises/images.dart
+++ b/lib/widgets/exercises/images.dart
@@ -20,9 +20,10 @@ import 'package:flutter/widgets.dart';
import 'package:wger/models/exercises/image.dart';
class ExerciseImageWidget extends StatelessWidget {
- const ExerciseImageWidget({this.image});
+ const ExerciseImageWidget({this.image, this.height});
final ExerciseImage? image;
+ final double? height;
@override
Widget build(BuildContext context) {
@@ -32,6 +33,7 @@ class ExerciseImageWidget extends StatelessWidget {
image: NetworkImage(image!.url),
fit: BoxFit.cover,
imageSemanticLabel: 'Exercise image',
+ height: height,
)
: const Image(
image: AssetImage('assets/images/placeholder.png'),
diff --git a/lib/widgets/nutrition/ingredient_dialogs.dart b/lib/widgets/nutrition/ingredient_dialogs.dart
index ca48d4df..faf0f245 100644
--- a/lib/widgets/nutrition/ingredient_dialogs.dart
+++ b/lib/widgets/nutrition/ingredient_dialogs.dart
@@ -1,3 +1,5 @@
+import 'dart:ui';
+
import 'package:flutter/material.dart';
import 'package:wger/helpers/misc.dart';
import 'package:wger/l10n/generated/app_localizations.dart';
@@ -10,13 +12,62 @@ Widget ingredientImage(String url, BuildContext context) {
final height = MediaQuery.sizeOf(context).height;
final width = MediaQuery.sizeOf(context).width;
final smallest = height < width ? height : width;
- if (smallest < 400) {
- radius = smallest / 4;
+ if (smallest > 400) {
+ radius = smallest / 2.5;
}
+
+ final imageProvider = NetworkImage(url);
+
return Padding(
padding: const EdgeInsets.only(bottom: 12),
- child: CircleAvatar(backgroundImage: NetworkImage(url), radius: radius),
+ child: ClipRRect(
+ borderRadius: BorderRadius.circular(15),
+ child: Container(
+ height: radius,
+ width: width,
+ decoration: BoxDecoration(
+ borderRadius: BorderRadius.circular(15),
+ ),
+ child: Stack(
+ children: [
+ Image(
+ image: imageProvider,
+ height: radius,
+ width: width,
+ fit: BoxFit.cover,
+ ),
+ BackdropFilter(
+ filter: ImageFilter.blur(
+ sigmaY: 5,
+ sigmaX: 5,
+ ),
+ child: Container(
+ height: radius,
+ width: width,
+ color: Colors.transparent,
+ ),
+ ),
+ Center(
+ child: Padding(
+ padding: const EdgeInsets.all(10),
+ child: Container(
+ clipBehavior: Clip.hardEdge,
+ decoration: const BoxDecoration(shape: BoxShape.circle),
+ child: Image(
+ image: imageProvider,
+ height: radius,
+ width: width,
+ fit: BoxFit.contain,
+ ),
+ ),
+ ),
+ )
+ ],
+ ),
+ ),
+ ),
);
+ // CircleAvatar(backgroundImage: NetworkImage(url), radius: radius)
}
class IngredientDetails extends StatelessWidget {
diff --git a/lib/widgets/routines/gym_mode/exercise_overview.dart b/lib/widgets/routines/gym_mode/exercise_overview.dart
index 1d71102f..c4c25615 100644
--- a/lib/widgets/routines/gym_mode/exercise_overview.dart
+++ b/lib/widgets/routines/gym_mode/exercise_overview.dart
@@ -16,21 +16,19 @@
* along with this program. If not, see .
*/
import 'package:flutter/material.dart';
-import 'package:flutter_html/flutter_html.dart';
-import 'package:wger/helpers/i18n.dart';
import 'package:wger/models/exercises/exercise.dart';
-import 'package:wger/widgets/exercises/images.dart';
+import 'package:wger/widgets/exercises/exercises.dart';
import 'package:wger/widgets/routines/gym_mode/navigation.dart';
class ExerciseOverview extends StatelessWidget {
final PageController _controller;
- final Exercise _exerciseBase;
+ final Exercise _exercise;
final double _ratioCompleted;
final Map _exercisePages;
const ExerciseOverview(
this._controller,
- this._exerciseBase,
+ this._exercise,
this._ratioCompleted,
this._exercisePages,
);
@@ -40,43 +38,17 @@ class ExerciseOverview extends StatelessWidget {
return Column(
children: [
NavigationHeader(
- _exerciseBase.getTranslation(Localizations.localeOf(context).languageCode).name,
+ _exercise.getTranslation(Localizations.localeOf(context).languageCode).name,
_controller,
exercisePages: _exercisePages,
),
const Divider(),
Expanded(
- child: ListView(
- padding: const EdgeInsets.symmetric(horizontal: 15),
- children: [
- Text(
- getTranslation(_exerciseBase.category!.name, context),
- semanticsLabel: getTranslation(_exerciseBase.category!.name, context),
- style: Theme.of(context).textTheme.titleLarge,
- textAlign: TextAlign.center,
- ),
- ..._exerciseBase.equipment.map((e) => Text(
- getTranslation(e.name, context),
- style: Theme.of(context).textTheme.titleLarge,
- textAlign: TextAlign.center,
- )),
- if (_exerciseBase.images.isNotEmpty)
- SizedBox(
- width: double.infinity,
- height: 200,
- child: ListView(
- scrollDirection: Axis.horizontal,
- children: [
- ..._exerciseBase.images.map((e) => ExerciseImageWidget(image: e)),
- ],
- ),
- ),
- Html(
- data: _exerciseBase
- .getTranslation(Localizations.localeOf(context).languageCode)
- .description,
- ),
- ],
+ child: SingleChildScrollView(
+ child: Padding(
+ padding: const EdgeInsets.symmetric(horizontal: 10),
+ child: ExerciseDetail(_exercise),
+ ),
),
),
NavigationFooter(_controller, _ratioCompleted),
diff --git a/lib/widgets/routines/gym_mode/log_page.dart b/lib/widgets/routines/gym_mode/log_page.dart
index 0471eb90..1c9b966e 100644
--- a/lib/widgets/routines/gym_mode/log_page.dart
+++ b/lib/widgets/routines/gym_mode/log_page.dart
@@ -274,7 +274,7 @@ class _LogPageState extends State {
),
if (_detailed)
RiRInputWidget(
- widget._log.rir == null ? null : num.parse(widget._log.rir!),
+ widget._log.rir,
onChanged: (v) => {},
),
SwitchListTile(
diff --git a/pubspec.lock b/pubspec.lock
index 07910e32..0e19b69f 100644
--- a/pubspec.lock
+++ b/pubspec.lock
@@ -21,10 +21,10 @@ packages:
dependency: transitive
description:
name: archive
- sha256: "0c64e928dcbefddecd234205422bcfc2b5e6d31be0b86fef0d0dd48d7b4c9742"
+ sha256: "7dcbd0f87fe5f61cb28da39a1a8b70dbc106e2fe0516f7836eb7bb2948481a12"
url: "https://pub.dev"
source: hosted
- version: "4.0.4"
+ version: "4.0.5"
args:
dependency: transitive
description:
@@ -133,18 +133,18 @@ packages:
dependency: transitive
description:
name: camera_avfoundation
- sha256: "3057ada0b30402e3a9b6dffec365c9736a36edbf04abaecc67c4309eadc86b49"
+ sha256: ba48b65a3a97004276ede882e6b838d9667642ff462c95a8bb57ca8a82b6bd25
url: "https://pub.dev"
source: hosted
- version: "0.9.18+9"
+ version: "0.9.18+11"
camera_platform_interface:
dependency: transitive
description:
name: camera_platform_interface
- sha256: "953e7baed3a7c8fae92f7200afeb2be503ff1a17c3b4e4ed7b76f008c2810a31"
+ sha256: "2f757024a48696ff4814a789b0bd90f5660c0fb25f393ab4564fb483327930e2"
url: "https://pub.dev"
source: hosted
- version: "2.9.0"
+ version: "2.10.0"
camera_web:
dependency: transitive
description:
@@ -317,10 +317,10 @@ packages:
dependency: transitive
description:
name: ffi
- sha256: "16ed7b077ef01ad6170a3d0c57caa4a112a38d7a2ed5602e0aca9ca6f3d98da6"
+ sha256: "289279317b4b16eb2bb7e271abccd4bf84ec9bdcbe999e278a94b804f5630418"
url: "https://pub.dev"
source: hosted
- version: "2.1.3"
+ version: "2.1.4"
file:
dependency: transitive
description:
@@ -381,10 +381,10 @@ packages:
dependency: "direct main"
description:
name: flex_color_scheme
- sha256: ae638050fceb35b6040a43cf67892f9b956022068e736284919d93322fdd4ba2
+ sha256: "3344f8f6536c6ce0473b98e9f084ef80ca89024ad3b454f9c32cf840206f4387"
url: "https://pub.dev"
source: hosted
- version: "8.1.1"
+ version: "8.2.0"
flex_seed_scheme:
dependency: "direct main"
description:
@@ -402,10 +402,10 @@ packages:
dependency: "direct main"
description:
name: flutter_calendar_carousel
- sha256: "675a2331da6ecd7ba180ba7cd6551a18d41861187bb7537c11859a2df72d1646"
+ sha256: "2fd1b58cefbefe0504ca7d0080a9e63be96041acc93b0c7f340ef0a55b9808fe"
url: "https://pub.dev"
source: hosted
- version: "2.4.4"
+ version: "2.5.3"
flutter_driver:
dependency: transitive
description: flutter
@@ -651,10 +651,10 @@ packages:
dependency: transitive
description:
name: image
- sha256: "13d3349ace88f12f4a0d175eb5c12dcdd39d35c4c109a8a13dfeb6d0bd9e31c3"
+ sha256: "4e973fcf4caae1a4be2fa0a13157aa38a8f9cb049db6529aa00b4d71abc4d928"
url: "https://pub.dev"
source: hosted
- version: "4.5.3"
+ version: "4.5.4"
image_picker:
dependency: "direct main"
description:
@@ -744,10 +744,10 @@ packages:
dependency: transitive
description:
name: js
- sha256: c1b2e9b5ea78c45e1a0788d29606ba27dc5f71f019f32ca5140f61ef071838cf
+ sha256: "53385261521cc4a0c4658fd0ad07a7d14591cf8fc33abbceae306ddb974888dc"
url: "https://pub.dev"
source: hosted
- version: "0.7.1"
+ version: "0.7.2"
json_annotation:
dependency: "direct main"
description:
@@ -984,10 +984,10 @@ packages:
dependency: transitive
description:
name: petitparser
- sha256: c15605cd28af66339f8eb6fbe0e541bfe2d1b72d5825efc6598f3e0a31b9ad27
+ sha256: "07c8f0b1913bcde1ff0d26e57ace2f3012ccbf2b204e070290dad3bb22797646"
url: "https://pub.dev"
source: hosted
- version: "6.0.2"
+ version: "6.1.0"
platform:
dependency: transitive
description:
@@ -1245,10 +1245,10 @@ packages:
dependency: "direct main"
description:
name: sqlite3_flutter_libs
- sha256: "7adb4cc96dc08648a5eb1d80a7619070796ca6db03901ff2b6dcb15ee30468f3"
+ sha256: "1a96b59227828d9eb1463191d684b37a27d66ee5ed7597fcf42eee6452c88a14"
url: "https://pub.dev"
source: hosted
- version: "0.5.31"
+ version: "0.5.32"
sqlparser:
dependency: transitive
description:
@@ -1549,10 +1549,10 @@ packages:
dependency: transitive
description:
name: win32
- sha256: daf97c9d80197ed7b619040e86c8ab9a9dad285e7671ee7390f9180cc828a51e
+ sha256: dc6ecaa00a7c708e5b4d10ee7bec8c270e9276dfcab1783f57e9962d7884305f
url: "https://pub.dev"
source: hosted
- version: "5.10.1"
+ version: "5.12.0"
xdg_directories:
dependency: transitive
description:
@@ -1578,5 +1578,5 @@ packages:
source: hosted
version: "3.1.3"
sdks:
- dart: ">=3.7.0-0 <4.0.0"
- flutter: ">=3.27.0"
+ dart: ">=3.7.0 <4.0.0"
+ flutter: ">=3.29.0"
diff --git a/test/fixtures/routines/routine_logs.json b/test/fixtures/routines/routine_logs.json
index cca04829..1835cc3d 100644
--- a/test/fixtures/routines/routine_logs.json
+++ b/test/fixtures/routines/routine_logs.json
@@ -161,7 +161,7 @@
"weight": "90.00",
"weight_target": "80.00",
"rir": "0.5",
- "rir_target": null,
+ "rir_target": "0.5",
"rest": 121,
"rest_target": 120
},
diff --git a/test/workout/goldens/routine_logs_screen_detail.png b/test/workout/goldens/routine_logs_screen_detail.png
index 0af52b65..d4d99068 100644
Binary files a/test/workout/goldens/routine_logs_screen_detail.png and b/test/workout/goldens/routine_logs_screen_detail.png differ
diff --git a/test/workout/gym_mode_screen_test.dart b/test/workout/gym_mode_screen_test.dart
index f20df62c..6c420890 100644
--- a/test/workout/gym_mode_screen_test.dart
+++ b/test/workout/gym_mode_screen_test.dart
@@ -86,6 +86,10 @@ void main() {
testWidgets('Test the widgets on the gym mode screen', (WidgetTester tester) async {
when(mockExerciseProvider.findExerciseById(1)).thenReturn(testExercises[0]);
when(mockExerciseProvider.findExerciseById(6)).thenReturn(testExercises[5]);
+ when(mockExerciseProvider.findExercisesByVariationId(
+ null,
+ exerciseIdToExclude: anyNamed('exerciseIdToExclude'),
+ )).thenReturn([]);
await tester.pumpWidget(renderGymMode());
await tester.tap(find.byType(TextButton));
diff --git a/test/workout/workout_log_model_test.dart b/test/workout/workout_log_model_test.dart
index 9bfdfe93..1d993b2d 100644
--- a/test/workout/workout_log_model_test.dart
+++ b/test/workout/workout_log_model_test.dart
@@ -32,7 +32,7 @@ void main() {
routineId: 100,
exerciseId: 1,
repetitions: 10,
- rir: '1.5',
+ rir: 1.5,
repetitionsUnitId: 1,
weight: 20,
weightUnitId: 1,
@@ -45,7 +45,7 @@ void main() {
routineId: 42,
exerciseId: 1,
repetitions: 10,
- rir: '1.5',
+ rir: 1.5,
repetitionsUnitId: 1,
weight: 20,
weightUnitId: 1,
diff --git a/test_data/routines.dart b/test_data/routines.dart
index 6885ce64..eb3efb75 100644
--- a/test_data/routines.dart
+++ b/test_data/routines.dart
@@ -50,7 +50,7 @@ Routine getTestRoutine({List? exercises}) {
..iteration = 2
..slotEntryId = 3
..weight = 10
- ..rir = '1.5'
+ ..rir = 1.5
..date = DateTime(2021, 5, 1)
..repetitions = 10
..routineId = 1;
@@ -63,7 +63,7 @@ Routine getTestRoutine({List? exercises}) {
..iteration = 4
..slotEntryId = 1
..weight = 10
- ..rir = '2'
+ ..rir = 2
..date = DateTime(2021, 5, 1)
..repetitions = 12
..routineId = 1;
@@ -76,7 +76,7 @@ Routine getTestRoutine({List? exercises}) {
..iteration = 5
..slotEntryId = 1
..weight = 50
- ..rir = ''
+ ..rir = null
..date = DateTime(2021, 5, 2)
..repetitions = 8
..routineId = 1;
@@ -248,8 +248,8 @@ Routine getTestRoutine({List? exercises}) {
weight: 100,
weightUnit: testWeightUnit1,
restTime: 120,
- rir: '1.5',
- rpe: '8',
+ rir: 1.5,
+ rpe: 8,
textRepr: '3x100kg',
),
SetConfigData(
@@ -262,8 +262,8 @@ Routine getTestRoutine({List? exercises}) {
weight: 100,
weightUnit: testWeightUnit1,
restTime: 120,
- rir: '1.5',
- rpe: '8',
+ rir: 1.5,
+ rpe: 8,
textRepr: '3x100kg',
),
SetConfigData(
@@ -276,8 +276,8 @@ Routine getTestRoutine({List? exercises}) {
weight: 100,
weightUnit: testWeightUnit1,
restTime: 120,
- rir: '1.5',
- rpe: '8',
+ rir: 1.5,
+ rpe: 8,
textRepr: '3x100kg',
),
],
@@ -297,8 +297,8 @@ Routine getTestRoutine({List? exercises}) {
weight: 10,
weightUnit: testWeightUnit1,
restTime: null,
- rir: '',
- rpe: '',
+ rir: null,
+ rpe: null,
textRepr: '12x10kg',
),
SetConfigData(
@@ -311,8 +311,8 @@ Routine getTestRoutine({List? exercises}) {
weight: 10,
weightUnit: testWeightUnit1,
restTime: null,
- rir: '',
- rpe: '',
+ rir: null,
+ rpe: null,
textRepr: '12x10kg',
),
SetConfigData(
@@ -325,8 +325,8 @@ Routine getTestRoutine({List? exercises}) {
weight: 10,
weightUnit: testWeightUnit1,
restTime: null,
- rir: '',
- rpe: '',
+ rir: null,
+ rpe: null,
textRepr: '12x10kg',
),
],
@@ -354,8 +354,8 @@ Routine getTestRoutine({List? exercises}) {
weight: 100,
weightUnit: testWeightUnit1,
restTime: 120,
- rir: '1.5',
- rpe: '8',
+ rir: 1.5,
+ rpe: 8,
textRepr: '3x100kg',
),
SetConfigData(
@@ -368,8 +368,8 @@ Routine getTestRoutine({List? exercises}) {
weight: 100,
weightUnit: testWeightUnit1,
restTime: 120,
- rir: '1.5',
- rpe: '8',
+ rir: 1.5,
+ rpe: 8,
textRepr: '3x100kg',
),
SetConfigData(
@@ -382,8 +382,8 @@ Routine getTestRoutine({List? exercises}) {
weight: 100,
weightUnit: testWeightUnit1,
restTime: 120,
- rir: '1.5',
- rpe: '8',
+ rir: 1.5,
+ rpe: 8,
textRepr: '3x100kg',
),
],
@@ -414,8 +414,8 @@ Routine getTestRoutine({List? exercises}) {
weight: 100,
weightUnit: testWeightUnit1,
restTime: 120,
- rir: '1.5',
- rpe: '8',
+ rir: 1.5,
+ rpe: 8,
textRepr: '4 sets 3x100kg',
),
],
@@ -435,8 +435,8 @@ Routine getTestRoutine({List? exercises}) {
weight: 10,
weightUnit: testWeightUnit1,
restTime: 60,
- rir: '',
- rpe: '',
+ rir: null,
+ rpe: null,
textRepr: '4 sets 12x10kg',
),
],
@@ -464,8 +464,8 @@ Routine getTestRoutine({List? exercises}) {
weight: 100,
weightUnit: testWeightUnit1,
restTime: 120,
- rir: '1.5',
- rpe: '8',
+ rir: 1.5,
+ rpe: 8,
textRepr: '4 sets 3x100kg',
),
],