/app4training

Our 4training.net app that works also offline, implemented with dart/flutter

Primary LanguageDartGNU Affero General Public License v3.0AGPL-3.0

Tests Status Code Coverage (codecov)

app4training

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.

Architecture

Content: synchronized from a git repository

  • 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.

License

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.

Testing and ensuring good code quality

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

Contributing

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.

Roadmap

  • 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.