← all projects

ZGS GIS Platform — Flutter Web with an embedded ArcGIS map

Flutter Web · ArcGIS · Azure AD · Dio · go_router · Firebase

Context

Power-line and infrastructure construction projects need serious geospatial tooling — and the rest of an enterprise app around it: dashboards, HSE incident reporting, permit tracking, supplier assignments, document versioning. Eight feature modules, one platform, German enterprise users.

The hard architectural call: don't reimplement ArcGIS

The app is Flutter Web. The mapping requirement was ArcGIS, whose real capability lives in its JavaScript API. Two options:

  1. Wrap ArcGIS in Dart. Keeps one language and one build. But you inherit the maintenance of a binding layer for an API surface you don't control, and you're always behind its releases.
  2. Embed the real React/ArcGIS build inside the Flutter shell. Two build systems, one boundary to manage — but the map is the actual ArcGIS product, not an approximation of it.

I chose to embed. The reasoning: the map is the product here. Being one ArcGIS release behind on a feature the client asked for is a worse failure than the complexity of a boundary I define and control.

The bridge

The Flutter shell and the embedded map communicate over a two-way postMessage bridge carrying exactly two things:

Keeping the bridge to a deliberately narrow contract is what makes this maintainable. A bridge that grows to proxy arbitrary calls becomes a distributed system with no schema.

Auth and networking

Microsoft Azure AD single sign-on, with a Dio interceptor performing automatic token refresh — transparent to every call site, so no feature module contains auth retry logic. A shared REST client maps wire failures to typed exceptions once.

Presentation

DE/EN localization, light and dark theming, adaptive layouts across four breakpoints. Deployed via Firebase Hosting with Cloud Functions against an Azure-hosted API — a deliberately boring hosting choice for a decidedly non-boring frontend.

Stack

Flutter Web · Dart · ArcGIS JS API · Azure AD (OAuth 2.0) · Dio · Provider/GetIt/GetX · go_router · fl_chart · Firebase Hosting & Cloud Functions · REST on Azure