Skip to main content
Version: Next

Migrate from flutter_map

This site will guide you though the process of migrating from the flutter_map package.

In general, maplibre follows a more centric design when it comes to functionality. While flutter_map offloads a lot of features like animations, user location, caching, offline, geojson and so on to third party plugins, the idea behind maplibre is to provide all code functionality out of the box.

Feature Parity

maplibre has the goal to have replacement for every functionality flutter_map provides eventually. Check out the flutter_map parity label on GitHub to see what functionality is missing.

Programmatic control

Programmatic control in flutter_map works via imperative calls to its map controller. maplibre on the other hand makes use of declarative control for a more natural integration into the Flutter ecosystem.

This means that properties that have no init* prefix can be updated using Flutters' state management, like setState().

Everything else can be applied using the MapController just as you would in flutter_map.

Annotations & Layers

maplibre has a similar concept as flutter_map on how to update its MapOptions and Layers. You can simply use Flutters' state management, like setState() for updating. Layers in maplibre can be placed in the MapLibreMap(layers: [...]) list as they are no widgets but converted and passed to the native MapLibre SDKs for performant rendering.

As this declarative way comes with a performance impact (e.g. comparing countless huge polygons on every frame takes some time) maplibre provides direct access to the map style for performant operations. Checkout the StyleController to learn more!

flutter_map and maplibre both have support to display regular Flutter widgets or complete widget trees on top of the map. Use the WidgetLayer and apply it in the MapLibreMap(children: [...]) list. WidgetLayers can only be displayed above other map Layers.

UI Overlays

maplibre has a variety of built-in user interface widgets that overlay the map. As they are all Widgets, you can apply as you would in flutter_map in the MapLibreMap(children: [...]) list.

Similar to the plugin system in flutter_map, you are able to build your own extensive overlay widgets. You can access important map information in your build() method with:

  • MapController.of(context) / MapController.maybeOf(context)
  • MapOptions.of(context) / MapOptions.maybeOf(context)
  • MapCamera.of(context) / MapCamera.maybeOf(context)

User Location & Permissions

maplibre has built-in user location functionality that can be accessed via the MapController and a PermissionManager to handle location permissions without the need of any third party package.