This app is an offline version of the website 4training.net written in dart/flutter.
Both, the app and the website are projects by holydevelopers.net.
- For navigation we use the Navigator with named routes ("Navigator 1.0", no routing package). See the folder lib/routes/, especially the overview of the route names.
- For viewing a page, we use route names that are the same as on the 4training.net website:
/view/PageName/languageCode
, e.g./view/Dealing_with_Money/de
for viewing https://www.4training.net/Dealing_with_Money/de - For state management we use Riverpod (version 2 but without using code generation)
- Internationalization via the standard flutter internationalization approach
- Widgets are in the lib/widgets folder
- The content comes as HTML and is rendered via the flutter_html package
- The app works offline and displays only content that has been downloaded to the device. For each language we have a repository that is hosted on github. The location is
https://github.com/4training/html-languageCode
, for English it is https://github.com/4training/html-en. - When the user decides to download a language, the contents of the corresponding repository are fetched with the download_assets package and stored on a folder on the device.
- The repository contains HTML files for each page, images and a JSON with the structure. It is generated by the
ResourcesBot
of our pywikitools repository (see ExportHTML and ExportRepository) - Additionally we download PDF files for easy sharing and printing. Similarly to the HTML repositories, we have a PDF repository for each language as well. The location is
https://github.com/4training/pdf-languageCode
, for English it is https://github.com/4training/pdf-en.
Jesus says in Matthew 10:8, “Freely you have received; freely give.” We follow His example and believe His principles are well expressed in the developer world through free and open-source software. That's why we want you to have the "four freedoms" to freely use, study, share and improve this software. We only require you to release any derived work under the same conditions (you're not allowed to take this code, build upon it and make the result proprietary):
GNU Affero General Public License v3.0 with Apple app store exception
The AGPL is essentially the same as the GPL with one additional paragraph allowing users who interact with the software over a network to receive the source for that program. This is relevant for any web application where the way of software distribution is different than what was normal back when the GNU Public License was created. The GPL wasn't aware of this form of distribution which is now so common. The AGPL fixes this "web services loophole".
Thanks to the people from the Nextcloud iOS app to find and explain a solution to the restrictive policies of the Apple App Store which are not fully compatible with the GNU Public licenses.
For formatting code, we follow the dart guidelines by using the standard dart format tool. For linting we use dart analyze together with riverpod lint. Finally we have a test suite and upload coverage data to codecov.io - you can see the results in the codecov badge at the top here on the repo page. All that is run via Github Actions on any push or pull request (see our Github Workflow)
Before committing, please run the following commands and make sure they don't show any issues so that our tests will pass:
dart format .
dart analyze
dart run custom_lint
flutter test
By contributing you release your contributed code under the licensing terms explained above. Thank you!
Currently project management happens in our redmine. That's why you don't find issues here on github at the moment - contact us to get access.
- 0.9: Enable automatic updates (half-way implemented already but currently not operational - waiting for backend development to catch up)
- 1.0: We're solid now and excited about the future
We plan to release an iOS version sometime in 2024.