Controllers & Cameras
flutter_map makes use of InheritedModel to share 3 'aspects' with its built children:
MapController: use to programatically control the map camera & access some helper functionality - control cameraMapCamera: use to read the current state/position of the map camera & access some helper functionality that depends on the camera (such aslatlngToPoint) - read camera
Accessing Aspects Within Descendants
All 3 aspects can be retrieved from within the context of a FlutterMap, which all built descendants should have access to. This usually means from within a layer: anywhere where there is at least one 'visible' builder method between the FlutterMap and the invocation.
Use the static of (or null-safe maybeOf) method to access the inherited aspect. For example, to access the MapCamera:
final inheritedCamera = MapCamera.of(context);This will attach the widget to the state of the map, causing it to rebuild whenever the depended-on aspects change. See 2. Hooking Into Inherited State for more information.
Using this method directly in the children list (not inside another widget), and in any MapOptions callback, is not possible: there is no* builder method between the FlutterMap and the children or callback.
Instead, follow Accessing Aspects Elsewhere, or, wrap the necessary layers with a Builder widget.
For example, the code snippet below hides a TileLayer when above zoom level 13:
children: [
Builder(
builder: (context) {
if (MapCamera.of(context).zoom < 13) return SizedBox.shrink();
return TileLayer();
},
),
],Accessing Aspects Elsewhere
MapCamera
MapCameraTo access the MapCamera outside of a FlutterMap descendant, first setup an external MapController, as guided below.
Then use the camera getter on the MapController instance.
Avoid using this method to access the camera when MapCamera.of() is available.
MapController
MapControllerFor more information about correctly setting up an external(ly accessible) MapController, see:
MapOptions
MapOptionsLast updated
Was this helpful?