flutter_map Docs
Project Links💝 Support Us
v3
v3
  • flutter_map
  • Getting Started
    • Installation
    • Additional Setup
    • Examples
    • How Does It Work?
      • Raster vs Vector Tiles
  • Usage
    • Base Widget
    • Options
      • Recommended Options
      • Other Options
    • Layers
      • Tile Layer
        • Recommended Options
        • Tile Providers
        • Other Options
      • Marker Layer
      • Polygon Layer
      • Polyline Layer
      • Circle Layer
      • Attribution Layer
      • WMS Usage
    • Controller
    • Full API Reference
  • Plugins
    • Plugins List
    • Making A Plugin
      • Creating New Tile Providers
      • Creating New Layers
  • Tile Servers
    • Using Mapbox
    • Using Stadia Maps
    • Using Thunderforest
    • Offline Mapping
    • Other Options
  • FAQs
    • Frequently Asked Questions
    • Map Controller Issues
  • Migration
    • To v3.0.0
    • To v2.0.0
    • Older Versions
      • To v1.1.0
      • To v1.0.0
      • To v0.15.0
  • Contributing
  • Credits
Powered by GitBook

© flutter_map Authors & Maintainers

On this page
  • Application Migration
  • Plugin Migration

Was this helpful?

Export as PDF
  1. Migration

To v3.0.0

PreviousMap Controller IssuesNextTo v2.0.0

Last updated 2 years ago

Was this helpful?

This update brings major breaking changes for all users.

We apologise for any difficulty this may cause and time you may spend migrating.

However, this update is a part of our aim to simplify this library, and should improve stability, readability, and performance for you in the long term. In addition, this will make the library much easier to maintain and add new functionality to through plugins and future features.

For a full list of changes, please see the full , and make use of the old and new API reference.

Application Migration

Please refer to the sections below for information on how to migrate your application. This will contain the changes that most users may need to make, but not all changes.

This version requires a minimum of Flutter 3.3.0. Use flutter upgrade to update to this version.

Removed layers in favour of children

The layers (and nonRotatedLayers) properties on the FlutterMap widget have been removed without deprecation.

To migrate, replace layers with children, and also see Removed LayerWidgets & LayerOptions in favour of Layers.

Old Code (<3.0.0)
    layers: [],
    nonRotatedLayers: [],
New Code (3.0.0+)
    children: [],
    nonRotatedChildren: [],
Removed LayerWidgets & LayerOptions in favour of Layers

All existing LayerWidgets & LayerOptions have been removed without deprecation.

To migrate, replace LayerOptions with Layer. Additionally, if you are currently using children, remove all LayerWidget wrappers.

Old Code (<3.0.0)
    layers: [
        TileLayerOptions(),
        MarkerLayerOptions(),
    ],
    children: [
        TileLayerWidget(options: TileLayerOptions()),
        MarkerLayerWidget(options: MarkerLayerOptions()),
    ],
New Code (3.0.0+)
    children: [
        TileLayer(),
        MarkerLayer(),
    ],
Replaced onMapCreated with onMapReady inside MapOptions

The onMapCreated property inside the MapOptions object has been removed without deprecation.

To migrate, replace onMapCreated with onMapReady. Note that the current MapController is no longer passed into the callback.

This method should only be used in particular circumstances, and avoided otherwise. See .

Removed MapController().onReady

Plugin Migration

Unfortunately, migrating plugins that implement custom layers is more difficult than just renaming in many cases. In good news, the new system requires no complex registration, and will simplify your code.

Previously, state was updated through a StreamBuilder. Since v3, state is updated using setState. This means your tile layer is now just a widget, for all intents and purposes, and anything you put in build will automatically be rebuilt when the map state changes.

For more information, see Creating New Layers.

To migrate, place any StreamBuilder implementation with the below code snippet, and the latest map state will automatically get passed down.

@override
Widget build(BuildContext context) {
    final mapState = FlutterMapState.maybeOf(context)!;
    // Use `mapState` as necessary, for example `mapState.zoom`
}

Your plugin may also now be able to be a StatelessWidget, which may increase performance and simplify your code!

In addition to that change:

Replaced MapState with FlutterMapState

The MapState class has been removed without deprecation.

To migrate, replace MapState with FlutterMapState. This is a name change due to internal reorganization of state management.

Replaced getPixelOrigin with pixelOrigin inside FlutterMapState

The getPixelOrigin method has been removed without deprecation.

To migrate, replace getPixelOrigin with pixelOrigin. This is a name change aimed to improve internal consistency.

See Replaced onMapCreated with onMapReady inside MapOptions. If this was necessary to await in your project (particularly in initState), you will need to migrate to using .

CHANGELOG
When Map Ready (onMapReady)
When Map Ready (onMapReady)