Regiocom AMS — Flutter Web enterprise portal
Context
A German telecom services provider needed one portal covering two very different audiences: field-service staff processing work orders, and administrators managing the organization itself. Enterprise German business software has non-negotiable expectations — de-DE formatting throughout, dense information display, and no data loss on a dropped session.
Architecture
Service locator over inherited state. Services resolve through get_it, with
Provider handling UI-facing state. At 27k LOC the alternative — passing dependencies
down widget trees — becomes the dominant maintenance cost.
One REST helper, not per-feature HTTP calls. A single client owns timeouts, multipart uploads, and typed exception mapping — the network layer converts wire failures into domain error types once, so no feature module has to interpret a raw status code. This is the change that most reduced bug surface.
Route guards, not screen-level checks. Session auth sits behind GoRouter redirect
guards; a global error handler catches session expiry anywhere in the app and routes to
re-authentication rather than surfacing a broken screen.
The work-order side
Multi-criteria search across work orders, with address, device, and measures views. Documents attach via drag-and-drop with multipart upload — the mundane feature that field users judge the entire tool by.
The admin side
Users, organizations, roles, and a hierarchical permission matrix. The matrix drove a custom expandable sticky-header table: permissions nest, the header must stay pinned while scrolling both axes, and off-the-shelf Flutter table widgets don't do this. Building it as a reusable component rather than a one-off paid for itself immediately.
Stack
Dart · Flutter Web · Provider · GetX · get_it · GoRouter · REST · SharedPreferences · intl (de-DE)