buildMapTileLayer function

Widget buildMapTileLayer({
  1. required MapSettings mapSettings,
  2. required TileProvider tileProvider,
  3. required bool applyFilter,
})

Builds the tile layer with optional dark mode filter.

Implementation

Widget buildMapTileLayer({
  required MapSettings mapSettings,
  required TileProvider tileProvider,
  required bool applyFilter,
}) {
  return ColorFiltered(
    colorFilter: applyFilter
        ? const ColorFilter.matrix(midnightMatrix)
        : const ColorFilter.mode(Colors.transparent, BlendMode.dst),
    child: TileLayer(
      // Use ObjectKey with tileProvider to ensure fresh TileLayer when provider changes
      // This prevents widget reuse issues when app resumes with a new provider.
      key: ObjectKey(tileProvider),
      urlTemplate: mapSettings.mapSource.urlTemplate,
      subdomains: mapSettings.mapSource.subdomains,
      userAgentPackageName: 'com.togaware.geopod',
      tileProvider: tileProvider,
      keepBuffer: 1,
      panBuffer: 1,
      maxZoom: 19,
      maxNativeZoom: mapSettings.mapSource.maxNativeZoom,
      retinaMode: false,
      tileUpdateTransformer: TileUpdateTransformers.throttle(
        const Duration(milliseconds: 100),
      ),
    ),
  );
}