Skip to content
This repository has been archived by the owner on Oct 22, 2021. It is now read-only.
Jonas Wanke edited this page Apr 8, 2021 · 7 revisions

Welcome to the HPI Schul-Cloud Flutter Wiki!

You probably landed here because you want to contribute to the HPI Schul-Cloud project.

Here's how to get started:

  1. Contact somebody of the HPI Schul-Cloud team to ensure that what you want to work on is currently needed and to get support if you have any questions.
  2. Make sure to get a basic understanding of Flutter in general.
  3. Make yourself comfortable with the development workflow in this project.
  4. Understand the architecture of the app.
  5. Write code.

Next Steps for this Project

In the beginning of 2021, we started to extract all accesses of the HPI Schul-Cloud's API into a separate, Dart-only project under api/. We did that for the following reasons:

  • Provide a clear abstraction between backend communication and UI.
    Previously, API paths were spread throughout the whole app, mostly in the data classes for each entity.
  • We can mock all API calls.
    If the API is having problems and parts of it are unavailable, or if there's an unannounced breaking change, we can use mock data to continue working on this app.
  • If there are future requests for creating a custom HPI Schul-Cloud client, we can publish this package to pub.dev for others to use.

This API wrapper is split into two layers:

  • Shallow: a low-level wrapper around the API
  • Interactive: a high-level interface providing access to entities that handles caching and extension of the authentication token automatically

See the API project's README for more information, including what these acronyms stand for: api/README.md.

Shallow is already working (though only for parts of the API that were accessible, which excludes role, homework, submission, file, and calendar APIs) and running with null-safety. It also includes "API tests" that run daily and check that the actual API hasn't changed the response format. (Contact Jonas Wanke if you need their credentials.)

Interactive is still missing. We planned to use chest to implement the caching layer.

The main app (app/) should make use of the new Interactive API wrapper, which means that most, if not all, data.dart files can be removed, as well as the hive dependencies. It then has to be updated to support Flutter 2 and null-safety. (We wanted to wait with that migration until Interactive is available as that allows us to remove a lot of code from app/.)

When these things are done, please update the Architecture documentation.

After that, our issues are full of ideas of where to continue.