← all projects

Regiocom AMS: Flutter Web business portal

Flutter Web · Dart · Provider · GetIt · GoRouter · REST

Context

A German telecom services company needed one portal for two very different groups: field-service staff who process work orders, and admins who manage the organization. German business users have clear expectations: German (de-DE) formatting everywhere, a lot of information on each screen, and no lost data when a session ends.

Architecture

Service locator for dependencies. Services are registered with get_it, and Provider handles UI state. As the app grew, passing dependencies down the widget tree would have become the biggest maintenance problem.

One REST client for the whole app. Instead of each feature making its own HTTP calls, one client handles timeouts, multipart uploads and typed error mapping. The network layer turns HTTP errors into domain error types in one place, so no feature has to deal with raw status codes. This change removed the most bugs.

Route guards instead of checks on every screen. Login is checked with GoRouter redirect guards. A global error handler catches expired sessions anywhere in the app and sends the user to log in again, instead of showing a broken screen.

Work orders

Search work orders by many filters, with views for address, device and measures. Users can drag and drop documents to upload them. It is a simple feature, but field users judge the whole tool by it.

Admin

Users, organizations, roles and a hierarchical permission matrix. For the matrix I built a custom table with expandable rows and a sticky header: permissions are nested, the header has to stay in place while scrolling in both directions, and standard Flutter table widgets can't do this. I built it as a reusable component, and it was worth it right away.

Stack

Dart · Flutter Web · Provider · GetX · get_it · GoRouter · REST · SharedPreferences · intl (de-DE)