[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-mapbox-mapbox-flutter-patterns":3,"mdc-o8lm8i-key":42,"related-repo-mapbox-mapbox-flutter-patterns":2213,"related-org-mapbox-mapbox-flutter-patterns":2306},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":32,"repoUrl":33,"updatedAt":34,"license":35,"forks":36,"topics":37,"repo":38,"sourceUrl":40,"mdContent":41},"mapbox-flutter-patterns","integrate Mapbox maps into Flutter applications","Official integration patterns for the Mapbox Maps Flutter SDK. Covers installation, iOS\u002FAndroid platform setup, access token configuration, MapWidget initialization, camera control, annotations with tap handling, user location, and loading GeoJSON. Based on official Mapbox documentation.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"mapbox","Mapbox","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fmapbox.png",[12,16,19,22,25,26,29],{"name":13,"slug":14,"type":15},"Flutter","flutter","tag",{"name":17,"slug":18,"type":15},"Android","android",{"name":20,"slug":21,"type":15},"iOS","ios",{"name":23,"slug":24,"type":15},"Mobile","mobile",{"name":9,"slug":8,"type":15},{"name":27,"slug":28,"type":15},"Dart","dart",{"name":30,"slug":31,"type":15},"SDK","sdk",69,"https:\u002F\u002Fgithub.com\u002Fmapbox\u002Fmapbox-agent-skills","2026-05-12T06:03:11.211517",null,10,[],{"repoUrl":33,"stars":32,"forks":36,"topics":39,"description":35},[],"https:\u002F\u002Fgithub.com\u002Fmapbox\u002Fmapbox-agent-skills\u002Ftree\u002FHEAD\u002Fskills\u002Fmapbox-flutter-patterns","---\nname: mapbox-flutter-patterns\ndescription: Official integration patterns for the Mapbox Maps Flutter SDK. Covers installation, iOS\u002FAndroid platform setup, access token configuration, MapWidget initialization, camera control, annotations with tap handling, user location, and loading GeoJSON. Based on official Mapbox documentation.\n---\n\n# Mapbox Flutter Integration Patterns\n\nOfficial patterns for integrating the Mapbox Maps SDK for Flutter (mapbox_maps_flutter) on iOS and Android with Dart.\n\n**Use this skill when:**\n\n- Installing and configuring mapbox_maps_flutter in a Flutter app\n- Setting the Mapbox access token the right way\n- Initializing a `MapWidget` with camera \u002F style options\n- Adding annotations (points, circles, lines, polygons) and handling taps\n- Showing the user location puck\n- Loading GeoJSON from app assets\n- Troubleshooting iOS build failures after adding Mapbox\n\n**Official Resources:**\n\n- [Flutter Maps Guides](https:\u002F\u002Fdocs.mapbox.com\u002Fflutter\u002Fmaps\u002Fguides\u002F)\n- [API Reference on pub.dev](https:\u002F\u002Fpub.dev\u002Fdocumentation\u002Fmapbox_maps_flutter\u002Flatest\u002F)\n- [Example App](https:\u002F\u002Fgithub.com\u002Fmapbox\u002Fmapbox-maps-flutter\u002Ftree\u002Fmain\u002Fexample)\n\n> Web and desktop are not supported — the Flutter SDK targets iOS and Android only.\n\n---\n\n## Installation & Setup\n\n### Requirements\n\n- Flutter SDK 3.22.3 \u002F Dart 3.4.4+\n- **iOS: deployment target 14.0 or higher**\n- **Android: minSdk 21 or higher**\n- Free Mapbox account\n\n### Step 1: Add the dependency\n\n```yaml\n# pubspec.yaml\ndependencies:\n  mapbox_maps_flutter: ^2.0.0\n```\n\n```bash\nflutter pub get\n```\n\n### Step 2: Bump the iOS deployment target to 14.0 (required)\n\n**This is the single most common cause of iOS build failures after adding Mapbox.** The Flutter SDK requires **iOS 14.0** and will not compile on the Flutter default.\n\n1. Open `ios\u002FRunner.xcworkspace` in Xcode.\n2. Select the **Runner** target → **General** → set **Minimum Deployments → iOS** to `14.0`.\n3. If `ios\u002FPodfile` exists, update the platform line too:\n\n   ```ruby\n   # ios\u002FPodfile\n   platform :ios, '14.0'\n   ```\n\nYou do not need to worry about CocoaPods vs Swift Package Manager — `mapbox_maps_flutter` supports both and Flutter picks whichever your app is configured for.\n\n### Step 3: iOS location permission\n\nAdd the purpose string to `ios\u002FRunner\u002FInfo.plist`:\n\n```xml\n\u003Ckey>NSLocationWhenInUseUsageDescription\u003C\u002Fkey>\n\u003Cstring>Show your location on the map\u003C\u002Fstring>\n```\n\n### Step 4: Android permissions\n\nAdd to `android\u002Fapp\u002Fsrc\u002Fmain\u002FAndroidManifest.xml`:\n\n```xml\n\u003Cuses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\" \u002F>\n\u003Cuses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\" \u002F>\n```\n\n### Step 5: Configure the access token\n\nThe recommended pattern is to pass the token via `--dart-define` at build\u002Frun time and set it on `MapboxOptions` before creating any `MapWidget`.\n\n```bash\nflutter run --dart-define=ACCESS_TOKEN=pk.your_token_here\n```\n\n```dart\n\u002F\u002F main.dart\nimport 'package:flutter\u002Fmaterial.dart';\nimport 'package:mapbox_maps_flutter\u002Fmapbox_maps_flutter.dart';\n\nconst accessToken = String.fromEnvironment('ACCESS_TOKEN');\n\nvoid main() {\n  MapboxOptions.setAccessToken(accessToken);\n  runApp(const MaterialApp(home: MapScreen()));\n}\n```\n\nNever hard-code tokens in source. For CI, pass `--dart-define=ACCESS_TOKEN=$MAPBOX_ACCESS_TOKEN`.\n\n---\n\n## Map Initialization\n\n### Basic map\n\n```dart\nimport 'package:flutter\u002Fmaterial.dart';\nimport 'package:mapbox_maps_flutter\u002Fmapbox_maps_flutter.dart';\n\nclass MapScreen extends StatelessWidget {\n  const MapScreen({super.key});\n\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(\n      body: MapWidget(\n        key: const ValueKey('mapWidget'),\n        cameraOptions: CameraOptions(\n          center: Point(coordinates: Position(-122.4194, 37.7749)),\n          zoom: 12,\n        ),\n        styleUri: MapboxStyles.STANDARD,\n      ),\n    );\n  }\n}\n```\n\n### Grab the `MapboxMap` controller\n\n```dart\nclass MapScreen extends StatefulWidget {\n  const MapScreen({super.key});\n\n  @override\n  State\u003CMapScreen> createState() => _MapScreenState();\n}\n\nclass _MapScreenState extends State\u003CMapScreen> {\n  MapboxMap? mapboxMap;\n\n  void _onMapCreated(MapboxMap controller) {\n    mapboxMap = controller;\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    return MapWidget(\n      key: const ValueKey('mapWidget'),\n      onMapCreated: _onMapCreated,\n      cameraOptions: CameraOptions(\n        center: Point(coordinates: Position(-122.4194, 37.7749)),\n        zoom: 12,\n      ),\n    );\n  }\n}\n```\n\n---\n\n## Add Annotations\n\nUse `mapboxMap.annotations` to create managers for point, circle, polyline, and polygon annotations. Managers are long-lived — create them once and reuse for updates.\n\n### Point annotations with a custom image\n\n```dart\nimport 'package:flutter\u002Fservices.dart' show rootBundle;\n\nPointAnnotationManager? pointAnnotationManager;\n\nFuture\u003Cvoid> _addMarkers(MapboxMap mapboxMap) async {\n  pointAnnotationManager = await mapboxMap.annotations.createPointAnnotationManager();\n\n  final bytes = await rootBundle.load('assets\u002Fmarker.png');\n  final imageBytes = bytes.buffer.asUint8List();\n\n  final options = \u003CPointAnnotationOptions>[\n    PointAnnotationOptions(\n      geometry: Point(coordinates: Position(-122.4194, 37.7749)),\n      image: imageBytes,\n      iconSize: 1.2,\n    ),\n    PointAnnotationOptions(\n      geometry: Point(coordinates: Position(-122.4094, 37.7849)),\n      image: imageBytes,\n    ),\n  ];\n\n  await pointAnnotationManager!.createMulti(options);\n}\n```\n\nRemember to register the asset in `pubspec.yaml`:\n\n```yaml\nflutter:\n  assets:\n    - assets\u002Fmarker.png\n```\n\n### Tap handling\n\nUse `manager.tapEvents` — this is the current API. `addOnPointAnnotationClickListener` is deprecated.\n\n`tapEvents` returns a `Cancelable` that you store and invoke `.cancel()` on when the listener is no longer needed:\n\n```dart\nfinal Cancelable tapSubscription = pointAnnotationManager!.tapEvents(\n  onTap: (annotation) {\n    debugPrint('Tapped annotation ${annotation.id}');\n  },\n);\n\n@override\nvoid dispose() {\n  tapSubscription.cancel();\n  super.dispose();\n}\n```\n\nThe same pattern — returning a `Cancelable` — exists on every manager's `longPressEvents` and `dragEvents`, and across the other annotation types (`CircleAnnotationManager.tapEvents`, etc.).\n\n### Load annotations from GeoJSON\n\n```dart\nimport 'dart:convert';\nimport 'package:flutter\u002Fservices.dart' show rootBundle;\n\nFuture\u003Cvoid> _loadGeoJson(MapboxMap mapboxMap) async {\n  final raw = await rootBundle.loadString('assets\u002Fcoffee_shops.geojson');\n  final geo = jsonDecode(raw) as Map\u003CString, dynamic>;\n  final features = (geo['features'] as List).cast\u003CMap\u003CString, dynamic>>();\n\n  final manager = await mapboxMap.annotations.createPointAnnotationManager();\n  final icon = (await rootBundle.load('assets\u002Fcoffee.png')).buffer.asUint8List();\n\n  final options = features.map((feature) {\n    final coords = feature['geometry']['coordinates'] as List;\n    return PointAnnotationOptions(\n      geometry: Point(coordinates: Position(coords[0] as double, coords[1] as double)),\n      image: icon,\n    );\n  }).toList();\n\n  await manager.createMulti(options);\n}\n```\n\nFor thousands of features use a style layer (`GeoJsonSource` + `SymbolLayer`) instead of annotations.\n\n---\n\n## Show User Location\n\nPermissions must already be granted (use `permission_handler` or similar) before enabling the puck.\n\n```dart\nawait mapboxMap.location.updateSettings(LocationComponentSettings(\n  enabled: true,\n  puckBearingEnabled: true,\n  locationPuck: LocationPuck(\n    locationPuck2D: DefaultLocationPuck2D(),\n  ),\n));\n```\n\n---\n\n## Camera Control\n\n```dart\n\u002F\u002F Instant jump\nawait mapboxMap.setCamera(CameraOptions(\n  center: Point(coordinates: Position(-80.1263, 25.7845)),\n  zoom: 14,\n));\n\n\u002F\u002F Animated fly-to\nawait mapboxMap.flyTo(\n  CameraOptions(\n    center: Point(coordinates: Position(-80.1263, 25.7845)),\n    zoom: 17,\n    bearing: 180,\n    pitch: 30,\n  ),\n  MapAnimationOptions(duration: 2000),\n);\n```\n\n---\n\n## Troubleshooting\n\n### iOS build fails with \"platform is lower than deployment target\"\n\nThe Flutter default iOS deployment target is lower than Mapbox's minimum (iOS 14). Set **Minimum Deployments → iOS** to `14.0` on the Runner target in Xcode. If the project has an `ios\u002FPodfile`, also set `platform :ios, '14.0'` there and re-run `pod install`.\n\n### `setAccessToken` not called\n\nIf you forget to call `MapboxOptions.setAccessToken` before creating a `MapWidget`, the map will load with a blank grid. Always call it in `main()` before `runApp`.\n\n### Annotation tap handler not firing\n\nMake sure you're using `manager.tapEvents(onTap: ...)` — `addOnPointAnnotationClickListener` is deprecated. Also confirm the `MapboxMap` controller is captured via `onMapCreated` before you create the annotation manager.\n\n### Hot reload after permissions change\n\niOS\u002FAndroid will not re-read manifests or Info.plist on hot reload. Fully restart the app after editing permissions.\n\n---\n\n## Reference Files\n\n- **`references\u002Fannotations.md`** — Circle, Polyline, Polygon patterns and GeoJSON source\u002Flayer recipes.\n- **`references\u002Fplatform-setup.md`** — Deeper iOS\u002FAndroid setup, token strategies, release signing notes.\n\n---\n\n## Additional Resources\n\n- [Flutter Maps Guides](https:\u002F\u002Fdocs.mapbox.com\u002Fflutter\u002Fmaps\u002Fguides\u002F)\n- [Markers and Annotations guide](https:\u002F\u002Fdocs.mapbox.com\u002Fflutter\u002Fmaps\u002Fguides\u002Fmarkers-and-annotations\u002F)\n- [User Location guide](https:\u002F\u002Fdocs.mapbox.com\u002Fflutter\u002Fmaps\u002Fguides\u002Fuser-location\u002F)\n- [Example App](https:\u002F\u002Fgithub.com\u002Fmapbox\u002Fmapbox-maps-flutter\u002Ftree\u002Fmain\u002Fexample)\n",{"data":43,"body":44},{"name":4,"description":6},{"type":45,"children":46},"root",[47,56,62,71,120,128,163,172,176,183,190,219,225,284,311,317,334,423,436,442,454,479,485,497,520,526,553,577,671,683,686,692,698,870,884,1091,1094,1100,1113,1119,1309,1321,1364,1370,1390,1417,1510,1546,1552,1720,1741,1744,1750,1763,1826,1829,1835,1966,1969,1975,1981,2020,2032,2067,2073,2108,2114,2119,2122,2128,2159,2162,2168,2207],{"type":48,"tag":49,"props":50,"children":52},"element","h1",{"id":51},"mapbox-flutter-integration-patterns",[53],{"type":54,"value":55},"text","Mapbox Flutter Integration Patterns",{"type":48,"tag":57,"props":58,"children":59},"p",{},[60],{"type":54,"value":61},"Official patterns for integrating the Mapbox Maps SDK for Flutter (mapbox_maps_flutter) on iOS and Android with Dart.",{"type":48,"tag":57,"props":63,"children":64},{},[65],{"type":48,"tag":66,"props":67,"children":68},"strong",{},[69],{"type":54,"value":70},"Use this skill when:",{"type":48,"tag":72,"props":73,"children":74},"ul",{},[75,81,86,100,105,110,115],{"type":48,"tag":76,"props":77,"children":78},"li",{},[79],{"type":54,"value":80},"Installing and configuring mapbox_maps_flutter in a Flutter app",{"type":48,"tag":76,"props":82,"children":83},{},[84],{"type":54,"value":85},"Setting the Mapbox access token the right way",{"type":48,"tag":76,"props":87,"children":88},{},[89,91,98],{"type":54,"value":90},"Initializing a ",{"type":48,"tag":92,"props":93,"children":95},"code",{"className":94},[],[96],{"type":54,"value":97},"MapWidget",{"type":54,"value":99}," with camera \u002F style options",{"type":48,"tag":76,"props":101,"children":102},{},[103],{"type":54,"value":104},"Adding annotations (points, circles, lines, polygons) and handling taps",{"type":48,"tag":76,"props":106,"children":107},{},[108],{"type":54,"value":109},"Showing the user location puck",{"type":48,"tag":76,"props":111,"children":112},{},[113],{"type":54,"value":114},"Loading GeoJSON from app assets",{"type":48,"tag":76,"props":116,"children":117},{},[118],{"type":54,"value":119},"Troubleshooting iOS build failures after adding Mapbox",{"type":48,"tag":57,"props":121,"children":122},{},[123],{"type":48,"tag":66,"props":124,"children":125},{},[126],{"type":54,"value":127},"Official Resources:",{"type":48,"tag":72,"props":129,"children":130},{},[131,143,153],{"type":48,"tag":76,"props":132,"children":133},{},[134],{"type":48,"tag":135,"props":136,"children":140},"a",{"href":137,"rel":138},"https:\u002F\u002Fdocs.mapbox.com\u002Fflutter\u002Fmaps\u002Fguides\u002F",[139],"nofollow",[141],{"type":54,"value":142},"Flutter Maps Guides",{"type":48,"tag":76,"props":144,"children":145},{},[146],{"type":48,"tag":135,"props":147,"children":150},{"href":148,"rel":149},"https:\u002F\u002Fpub.dev\u002Fdocumentation\u002Fmapbox_maps_flutter\u002Flatest\u002F",[139],[151],{"type":54,"value":152},"API Reference on pub.dev",{"type":48,"tag":76,"props":154,"children":155},{},[156],{"type":48,"tag":135,"props":157,"children":160},{"href":158,"rel":159},"https:\u002F\u002Fgithub.com\u002Fmapbox\u002Fmapbox-maps-flutter\u002Ftree\u002Fmain\u002Fexample",[139],[161],{"type":54,"value":162},"Example App",{"type":48,"tag":164,"props":165,"children":166},"blockquote",{},[167],{"type":48,"tag":57,"props":168,"children":169},{},[170],{"type":54,"value":171},"Web and desktop are not supported — the Flutter SDK targets iOS and Android only.",{"type":48,"tag":173,"props":174,"children":175},"hr",{},[],{"type":48,"tag":177,"props":178,"children":180},"h2",{"id":179},"installation-setup",[181],{"type":54,"value":182},"Installation & Setup",{"type":48,"tag":184,"props":185,"children":187},"h3",{"id":186},"requirements",[188],{"type":54,"value":189},"Requirements",{"type":48,"tag":72,"props":191,"children":192},{},[193,198,206,214],{"type":48,"tag":76,"props":194,"children":195},{},[196],{"type":54,"value":197},"Flutter SDK 3.22.3 \u002F Dart 3.4.4+",{"type":48,"tag":76,"props":199,"children":200},{},[201],{"type":48,"tag":66,"props":202,"children":203},{},[204],{"type":54,"value":205},"iOS: deployment target 14.0 or higher",{"type":48,"tag":76,"props":207,"children":208},{},[209],{"type":48,"tag":66,"props":210,"children":211},{},[212],{"type":54,"value":213},"Android: minSdk 21 or higher",{"type":48,"tag":76,"props":215,"children":216},{},[217],{"type":54,"value":218},"Free Mapbox account",{"type":48,"tag":184,"props":220,"children":222},{"id":221},"step-1-add-the-dependency",[223],{"type":54,"value":224},"Step 1: Add the dependency",{"type":48,"tag":226,"props":227,"children":232},"pre",{"className":228,"code":229,"language":230,"meta":231,"style":231},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# pubspec.yaml\ndependencies:\n  mapbox_maps_flutter: ^2.0.0\n","yaml","",[233],{"type":48,"tag":92,"props":234,"children":235},{"__ignoreMap":231},[236,248,264],{"type":48,"tag":237,"props":238,"children":241},"span",{"class":239,"line":240},"line",1,[242],{"type":48,"tag":237,"props":243,"children":245},{"style":244},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[246],{"type":54,"value":247},"# pubspec.yaml\n",{"type":48,"tag":237,"props":249,"children":251},{"class":239,"line":250},2,[252,258],{"type":48,"tag":237,"props":253,"children":255},{"style":254},"--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178",[256],{"type":54,"value":257},"dependencies",{"type":48,"tag":237,"props":259,"children":261},{"style":260},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[262],{"type":54,"value":263},":\n",{"type":48,"tag":237,"props":265,"children":267},{"class":239,"line":266},3,[268,273,278],{"type":48,"tag":237,"props":269,"children":270},{"style":254},[271],{"type":54,"value":272},"  mapbox_maps_flutter",{"type":48,"tag":237,"props":274,"children":275},{"style":260},[276],{"type":54,"value":277},":",{"type":48,"tag":237,"props":279,"children":281},{"style":280},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[282],{"type":54,"value":283}," ^2.0.0\n",{"type":48,"tag":226,"props":285,"children":289},{"className":286,"code":287,"language":288,"meta":231,"style":231},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","flutter pub get\n","bash",[290],{"type":48,"tag":92,"props":291,"children":292},{"__ignoreMap":231},[293],{"type":48,"tag":237,"props":294,"children":295},{"class":239,"line":240},[296,301,306],{"type":48,"tag":237,"props":297,"children":299},{"style":298},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[300],{"type":54,"value":14},{"type":48,"tag":237,"props":302,"children":303},{"style":280},[304],{"type":54,"value":305}," pub",{"type":48,"tag":237,"props":307,"children":308},{"style":280},[309],{"type":54,"value":310}," get\n",{"type":48,"tag":184,"props":312,"children":314},{"id":313},"step-2-bump-the-ios-deployment-target-to-140-required",[315],{"type":54,"value":316},"Step 2: Bump the iOS deployment target to 14.0 (required)",{"type":48,"tag":57,"props":318,"children":319},{},[320,325,327,332],{"type":48,"tag":66,"props":321,"children":322},{},[323],{"type":54,"value":324},"This is the single most common cause of iOS build failures after adding Mapbox.",{"type":54,"value":326}," The Flutter SDK requires ",{"type":48,"tag":66,"props":328,"children":329},{},[330],{"type":54,"value":331},"iOS 14.0",{"type":54,"value":333}," and will not compile on the Flutter default.",{"type":48,"tag":335,"props":336,"children":337},"ol",{},[338,351,385],{"type":48,"tag":76,"props":339,"children":340},{},[341,343,349],{"type":54,"value":342},"Open ",{"type":48,"tag":92,"props":344,"children":346},{"className":345},[],[347],{"type":54,"value":348},"ios\u002FRunner.xcworkspace",{"type":54,"value":350}," in Xcode.",{"type":48,"tag":76,"props":352,"children":353},{},[354,356,361,363,368,370,375,377,383],{"type":54,"value":355},"Select the ",{"type":48,"tag":66,"props":357,"children":358},{},[359],{"type":54,"value":360},"Runner",{"type":54,"value":362}," target → ",{"type":48,"tag":66,"props":364,"children":365},{},[366],{"type":54,"value":367},"General",{"type":54,"value":369}," → set ",{"type":48,"tag":66,"props":371,"children":372},{},[373],{"type":54,"value":374},"Minimum Deployments → iOS",{"type":54,"value":376}," to ",{"type":48,"tag":92,"props":378,"children":380},{"className":379},[],[381],{"type":54,"value":382},"14.0",{"type":54,"value":384},".",{"type":48,"tag":76,"props":386,"children":387},{},[388,390,396,398],{"type":54,"value":389},"If ",{"type":48,"tag":92,"props":391,"children":393},{"className":392},[],[394],{"type":54,"value":395},"ios\u002FPodfile",{"type":54,"value":397}," exists, update the platform line too:",{"type":48,"tag":226,"props":399,"children":403},{"className":400,"code":401,"language":402,"meta":231,"style":231},"language-ruby shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# ios\u002FPodfile\nplatform :ios, '14.0'\n","ruby",[404],{"type":48,"tag":92,"props":405,"children":406},{"__ignoreMap":231},[407,415],{"type":48,"tag":237,"props":408,"children":409},{"class":239,"line":240},[410],{"type":48,"tag":237,"props":411,"children":412},{},[413],{"type":54,"value":414},"# ios\u002FPodfile\n",{"type":48,"tag":237,"props":416,"children":417},{"class":239,"line":250},[418],{"type":48,"tag":237,"props":419,"children":420},{},[421],{"type":54,"value":422},"platform :ios, '14.0'\n",{"type":48,"tag":57,"props":424,"children":425},{},[426,428,434],{"type":54,"value":427},"You do not need to worry about CocoaPods vs Swift Package Manager — ",{"type":48,"tag":92,"props":429,"children":431},{"className":430},[],[432],{"type":54,"value":433},"mapbox_maps_flutter",{"type":54,"value":435}," supports both and Flutter picks whichever your app is configured for.",{"type":48,"tag":184,"props":437,"children":439},{"id":438},"step-3-ios-location-permission",[440],{"type":54,"value":441},"Step 3: iOS location permission",{"type":48,"tag":57,"props":443,"children":444},{},[445,447,453],{"type":54,"value":446},"Add the purpose string to ",{"type":48,"tag":92,"props":448,"children":450},{"className":449},[],[451],{"type":54,"value":452},"ios\u002FRunner\u002FInfo.plist",{"type":54,"value":277},{"type":48,"tag":226,"props":455,"children":459},{"className":456,"code":457,"language":458,"meta":231,"style":231},"language-xml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003Ckey>NSLocationWhenInUseUsageDescription\u003C\u002Fkey>\n\u003Cstring>Show your location on the map\u003C\u002Fstring>\n","xml",[460],{"type":48,"tag":92,"props":461,"children":462},{"__ignoreMap":231},[463,471],{"type":48,"tag":237,"props":464,"children":465},{"class":239,"line":240},[466],{"type":48,"tag":237,"props":467,"children":468},{},[469],{"type":54,"value":470},"\u003Ckey>NSLocationWhenInUseUsageDescription\u003C\u002Fkey>\n",{"type":48,"tag":237,"props":472,"children":473},{"class":239,"line":250},[474],{"type":48,"tag":237,"props":475,"children":476},{},[477],{"type":54,"value":478},"\u003Cstring>Show your location on the map\u003C\u002Fstring>\n",{"type":48,"tag":184,"props":480,"children":482},{"id":481},"step-4-android-permissions",[483],{"type":54,"value":484},"Step 4: Android permissions",{"type":48,"tag":57,"props":486,"children":487},{},[488,490,496],{"type":54,"value":489},"Add to ",{"type":48,"tag":92,"props":491,"children":493},{"className":492},[],[494],{"type":54,"value":495},"android\u002Fapp\u002Fsrc\u002Fmain\u002FAndroidManifest.xml",{"type":54,"value":277},{"type":48,"tag":226,"props":498,"children":500},{"className":456,"code":499,"language":458,"meta":231,"style":231},"\u003Cuses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\" \u002F>\n\u003Cuses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\" \u002F>\n",[501],{"type":48,"tag":92,"props":502,"children":503},{"__ignoreMap":231},[504,512],{"type":48,"tag":237,"props":505,"children":506},{"class":239,"line":240},[507],{"type":48,"tag":237,"props":508,"children":509},{},[510],{"type":54,"value":511},"\u003Cuses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\" \u002F>\n",{"type":48,"tag":237,"props":513,"children":514},{"class":239,"line":250},[515],{"type":48,"tag":237,"props":516,"children":517},{},[518],{"type":54,"value":519},"\u003Cuses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\" \u002F>\n",{"type":48,"tag":184,"props":521,"children":523},{"id":522},"step-5-configure-the-access-token",[524],{"type":54,"value":525},"Step 5: Configure the access token",{"type":48,"tag":57,"props":527,"children":528},{},[529,531,537,539,545,547,552],{"type":54,"value":530},"The recommended pattern is to pass the token via ",{"type":48,"tag":92,"props":532,"children":534},{"className":533},[],[535],{"type":54,"value":536},"--dart-define",{"type":54,"value":538}," at build\u002Frun time and set it on ",{"type":48,"tag":92,"props":540,"children":542},{"className":541},[],[543],{"type":54,"value":544},"MapboxOptions",{"type":54,"value":546}," before creating any ",{"type":48,"tag":92,"props":548,"children":550},{"className":549},[],[551],{"type":54,"value":97},{"type":54,"value":384},{"type":48,"tag":226,"props":554,"children":556},{"className":286,"code":555,"language":288,"meta":231,"style":231},"flutter run --dart-define=ACCESS_TOKEN=pk.your_token_here\n",[557],{"type":48,"tag":92,"props":558,"children":559},{"__ignoreMap":231},[560],{"type":48,"tag":237,"props":561,"children":562},{"class":239,"line":240},[563,567,572],{"type":48,"tag":237,"props":564,"children":565},{"style":298},[566],{"type":54,"value":14},{"type":48,"tag":237,"props":568,"children":569},{"style":280},[570],{"type":54,"value":571}," run",{"type":48,"tag":237,"props":573,"children":574},{"style":280},[575],{"type":54,"value":576}," --dart-define=ACCESS_TOKEN=pk.your_token_here\n",{"type":48,"tag":226,"props":578,"children":581},{"className":579,"code":580,"language":28,"meta":231,"style":231},"language-dart shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F main.dart\nimport 'package:flutter\u002Fmaterial.dart';\nimport 'package:mapbox_maps_flutter\u002Fmapbox_maps_flutter.dart';\n\nconst accessToken = String.fromEnvironment('ACCESS_TOKEN');\n\nvoid main() {\n  MapboxOptions.setAccessToken(accessToken);\n  runApp(const MaterialApp(home: MapScreen()));\n}\n",[582],{"type":48,"tag":92,"props":583,"children":584},{"__ignoreMap":231},[585,593,601,609,619,628,636,645,654,663],{"type":48,"tag":237,"props":586,"children":587},{"class":239,"line":240},[588],{"type":48,"tag":237,"props":589,"children":590},{},[591],{"type":54,"value":592},"\u002F\u002F main.dart\n",{"type":48,"tag":237,"props":594,"children":595},{"class":239,"line":250},[596],{"type":48,"tag":237,"props":597,"children":598},{},[599],{"type":54,"value":600},"import 'package:flutter\u002Fmaterial.dart';\n",{"type":48,"tag":237,"props":602,"children":603},{"class":239,"line":266},[604],{"type":48,"tag":237,"props":605,"children":606},{},[607],{"type":54,"value":608},"import 'package:mapbox_maps_flutter\u002Fmapbox_maps_flutter.dart';\n",{"type":48,"tag":237,"props":610,"children":612},{"class":239,"line":611},4,[613],{"type":48,"tag":237,"props":614,"children":616},{"emptyLinePlaceholder":615},true,[617],{"type":54,"value":618},"\n",{"type":48,"tag":237,"props":620,"children":622},{"class":239,"line":621},5,[623],{"type":48,"tag":237,"props":624,"children":625},{},[626],{"type":54,"value":627},"const accessToken = String.fromEnvironment('ACCESS_TOKEN');\n",{"type":48,"tag":237,"props":629,"children":631},{"class":239,"line":630},6,[632],{"type":48,"tag":237,"props":633,"children":634},{"emptyLinePlaceholder":615},[635],{"type":54,"value":618},{"type":48,"tag":237,"props":637,"children":639},{"class":239,"line":638},7,[640],{"type":48,"tag":237,"props":641,"children":642},{},[643],{"type":54,"value":644},"void main() {\n",{"type":48,"tag":237,"props":646,"children":648},{"class":239,"line":647},8,[649],{"type":48,"tag":237,"props":650,"children":651},{},[652],{"type":54,"value":653},"  MapboxOptions.setAccessToken(accessToken);\n",{"type":48,"tag":237,"props":655,"children":657},{"class":239,"line":656},9,[658],{"type":48,"tag":237,"props":659,"children":660},{},[661],{"type":54,"value":662},"  runApp(const MaterialApp(home: MapScreen()));\n",{"type":48,"tag":237,"props":664,"children":665},{"class":239,"line":36},[666],{"type":48,"tag":237,"props":667,"children":668},{},[669],{"type":54,"value":670},"}\n",{"type":48,"tag":57,"props":672,"children":673},{},[674,676,682],{"type":54,"value":675},"Never hard-code tokens in source. For CI, pass ",{"type":48,"tag":92,"props":677,"children":679},{"className":678},[],[680],{"type":54,"value":681},"--dart-define=ACCESS_TOKEN=$MAPBOX_ACCESS_TOKEN",{"type":54,"value":384},{"type":48,"tag":173,"props":684,"children":685},{},[],{"type":48,"tag":177,"props":687,"children":689},{"id":688},"map-initialization",[690],{"type":54,"value":691},"Map Initialization",{"type":48,"tag":184,"props":693,"children":695},{"id":694},"basic-map",[696],{"type":54,"value":697},"Basic map",{"type":48,"tag":226,"props":699,"children":701},{"className":579,"code":700,"language":28,"meta":231,"style":231},"import 'package:flutter\u002Fmaterial.dart';\nimport 'package:mapbox_maps_flutter\u002Fmapbox_maps_flutter.dart';\n\nclass MapScreen extends StatelessWidget {\n  const MapScreen({super.key});\n\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(\n      body: MapWidget(\n        key: const ValueKey('mapWidget'),\n        cameraOptions: CameraOptions(\n          center: Point(coordinates: Position(-122.4194, 37.7749)),\n          zoom: 12,\n        ),\n        styleUri: MapboxStyles.STANDARD,\n      ),\n    );\n  }\n}\n",[702],{"type":48,"tag":92,"props":703,"children":704},{"__ignoreMap":231},[705,712,719,726,734,742,749,757,765,773,781,790,799,808,817,826,835,844,853,862],{"type":48,"tag":237,"props":706,"children":707},{"class":239,"line":240},[708],{"type":48,"tag":237,"props":709,"children":710},{},[711],{"type":54,"value":600},{"type":48,"tag":237,"props":713,"children":714},{"class":239,"line":250},[715],{"type":48,"tag":237,"props":716,"children":717},{},[718],{"type":54,"value":608},{"type":48,"tag":237,"props":720,"children":721},{"class":239,"line":266},[722],{"type":48,"tag":237,"props":723,"children":724},{"emptyLinePlaceholder":615},[725],{"type":54,"value":618},{"type":48,"tag":237,"props":727,"children":728},{"class":239,"line":611},[729],{"type":48,"tag":237,"props":730,"children":731},{},[732],{"type":54,"value":733},"class MapScreen extends StatelessWidget {\n",{"type":48,"tag":237,"props":735,"children":736},{"class":239,"line":621},[737],{"type":48,"tag":237,"props":738,"children":739},{},[740],{"type":54,"value":741},"  const MapScreen({super.key});\n",{"type":48,"tag":237,"props":743,"children":744},{"class":239,"line":630},[745],{"type":48,"tag":237,"props":746,"children":747},{"emptyLinePlaceholder":615},[748],{"type":54,"value":618},{"type":48,"tag":237,"props":750,"children":751},{"class":239,"line":638},[752],{"type":48,"tag":237,"props":753,"children":754},{},[755],{"type":54,"value":756},"  @override\n",{"type":48,"tag":237,"props":758,"children":759},{"class":239,"line":647},[760],{"type":48,"tag":237,"props":761,"children":762},{},[763],{"type":54,"value":764},"  Widget build(BuildContext context) {\n",{"type":48,"tag":237,"props":766,"children":767},{"class":239,"line":656},[768],{"type":48,"tag":237,"props":769,"children":770},{},[771],{"type":54,"value":772},"    return Scaffold(\n",{"type":48,"tag":237,"props":774,"children":775},{"class":239,"line":36},[776],{"type":48,"tag":237,"props":777,"children":778},{},[779],{"type":54,"value":780},"      body: MapWidget(\n",{"type":48,"tag":237,"props":782,"children":784},{"class":239,"line":783},11,[785],{"type":48,"tag":237,"props":786,"children":787},{},[788],{"type":54,"value":789},"        key: const ValueKey('mapWidget'),\n",{"type":48,"tag":237,"props":791,"children":793},{"class":239,"line":792},12,[794],{"type":48,"tag":237,"props":795,"children":796},{},[797],{"type":54,"value":798},"        cameraOptions: CameraOptions(\n",{"type":48,"tag":237,"props":800,"children":802},{"class":239,"line":801},13,[803],{"type":48,"tag":237,"props":804,"children":805},{},[806],{"type":54,"value":807},"          center: Point(coordinates: Position(-122.4194, 37.7749)),\n",{"type":48,"tag":237,"props":809,"children":811},{"class":239,"line":810},14,[812],{"type":48,"tag":237,"props":813,"children":814},{},[815],{"type":54,"value":816},"          zoom: 12,\n",{"type":48,"tag":237,"props":818,"children":820},{"class":239,"line":819},15,[821],{"type":48,"tag":237,"props":822,"children":823},{},[824],{"type":54,"value":825},"        ),\n",{"type":48,"tag":237,"props":827,"children":829},{"class":239,"line":828},16,[830],{"type":48,"tag":237,"props":831,"children":832},{},[833],{"type":54,"value":834},"        styleUri: MapboxStyles.STANDARD,\n",{"type":48,"tag":237,"props":836,"children":838},{"class":239,"line":837},17,[839],{"type":48,"tag":237,"props":840,"children":841},{},[842],{"type":54,"value":843},"      ),\n",{"type":48,"tag":237,"props":845,"children":847},{"class":239,"line":846},18,[848],{"type":48,"tag":237,"props":849,"children":850},{},[851],{"type":54,"value":852},"    );\n",{"type":48,"tag":237,"props":854,"children":856},{"class":239,"line":855},19,[857],{"type":48,"tag":237,"props":858,"children":859},{},[860],{"type":54,"value":861},"  }\n",{"type":48,"tag":237,"props":863,"children":865},{"class":239,"line":864},20,[866],{"type":48,"tag":237,"props":867,"children":868},{},[869],{"type":54,"value":670},{"type":48,"tag":184,"props":871,"children":873},{"id":872},"grab-the-mapboxmap-controller",[874,876,882],{"type":54,"value":875},"Grab the ",{"type":48,"tag":92,"props":877,"children":879},{"className":878},[],[880],{"type":54,"value":881},"MapboxMap",{"type":54,"value":883}," controller",{"type":48,"tag":226,"props":885,"children":887},{"className":579,"code":886,"language":28,"meta":231,"style":231},"class MapScreen extends StatefulWidget {\n  const MapScreen({super.key});\n\n  @override\n  State\u003CMapScreen> createState() => _MapScreenState();\n}\n\nclass _MapScreenState extends State\u003CMapScreen> {\n  MapboxMap? mapboxMap;\n\n  void _onMapCreated(MapboxMap controller) {\n    mapboxMap = controller;\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    return MapWidget(\n      key: const ValueKey('mapWidget'),\n      onMapCreated: _onMapCreated,\n      cameraOptions: CameraOptions(\n        center: Point(coordinates: Position(-122.4194, 37.7749)),\n        zoom: 12,\n      ),\n    );\n  }\n}\n",[888],{"type":48,"tag":92,"props":889,"children":890},{"__ignoreMap":231},[891,899,906,913,920,928,935,942,950,958,965,973,981,988,995,1002,1009,1017,1025,1033,1041,1050,1059,1067,1075,1083],{"type":48,"tag":237,"props":892,"children":893},{"class":239,"line":240},[894],{"type":48,"tag":237,"props":895,"children":896},{},[897],{"type":54,"value":898},"class MapScreen extends StatefulWidget {\n",{"type":48,"tag":237,"props":900,"children":901},{"class":239,"line":250},[902],{"type":48,"tag":237,"props":903,"children":904},{},[905],{"type":54,"value":741},{"type":48,"tag":237,"props":907,"children":908},{"class":239,"line":266},[909],{"type":48,"tag":237,"props":910,"children":911},{"emptyLinePlaceholder":615},[912],{"type":54,"value":618},{"type":48,"tag":237,"props":914,"children":915},{"class":239,"line":611},[916],{"type":48,"tag":237,"props":917,"children":918},{},[919],{"type":54,"value":756},{"type":48,"tag":237,"props":921,"children":922},{"class":239,"line":621},[923],{"type":48,"tag":237,"props":924,"children":925},{},[926],{"type":54,"value":927},"  State\u003CMapScreen> createState() => _MapScreenState();\n",{"type":48,"tag":237,"props":929,"children":930},{"class":239,"line":630},[931],{"type":48,"tag":237,"props":932,"children":933},{},[934],{"type":54,"value":670},{"type":48,"tag":237,"props":936,"children":937},{"class":239,"line":638},[938],{"type":48,"tag":237,"props":939,"children":940},{"emptyLinePlaceholder":615},[941],{"type":54,"value":618},{"type":48,"tag":237,"props":943,"children":944},{"class":239,"line":647},[945],{"type":48,"tag":237,"props":946,"children":947},{},[948],{"type":54,"value":949},"class _MapScreenState extends State\u003CMapScreen> {\n",{"type":48,"tag":237,"props":951,"children":952},{"class":239,"line":656},[953],{"type":48,"tag":237,"props":954,"children":955},{},[956],{"type":54,"value":957},"  MapboxMap? mapboxMap;\n",{"type":48,"tag":237,"props":959,"children":960},{"class":239,"line":36},[961],{"type":48,"tag":237,"props":962,"children":963},{"emptyLinePlaceholder":615},[964],{"type":54,"value":618},{"type":48,"tag":237,"props":966,"children":967},{"class":239,"line":783},[968],{"type":48,"tag":237,"props":969,"children":970},{},[971],{"type":54,"value":972},"  void _onMapCreated(MapboxMap controller) {\n",{"type":48,"tag":237,"props":974,"children":975},{"class":239,"line":792},[976],{"type":48,"tag":237,"props":977,"children":978},{},[979],{"type":54,"value":980},"    mapboxMap = controller;\n",{"type":48,"tag":237,"props":982,"children":983},{"class":239,"line":801},[984],{"type":48,"tag":237,"props":985,"children":986},{},[987],{"type":54,"value":861},{"type":48,"tag":237,"props":989,"children":990},{"class":239,"line":810},[991],{"type":48,"tag":237,"props":992,"children":993},{"emptyLinePlaceholder":615},[994],{"type":54,"value":618},{"type":48,"tag":237,"props":996,"children":997},{"class":239,"line":819},[998],{"type":48,"tag":237,"props":999,"children":1000},{},[1001],{"type":54,"value":756},{"type":48,"tag":237,"props":1003,"children":1004},{"class":239,"line":828},[1005],{"type":48,"tag":237,"props":1006,"children":1007},{},[1008],{"type":54,"value":764},{"type":48,"tag":237,"props":1010,"children":1011},{"class":239,"line":837},[1012],{"type":48,"tag":237,"props":1013,"children":1014},{},[1015],{"type":54,"value":1016},"    return MapWidget(\n",{"type":48,"tag":237,"props":1018,"children":1019},{"class":239,"line":846},[1020],{"type":48,"tag":237,"props":1021,"children":1022},{},[1023],{"type":54,"value":1024},"      key: const ValueKey('mapWidget'),\n",{"type":48,"tag":237,"props":1026,"children":1027},{"class":239,"line":855},[1028],{"type":48,"tag":237,"props":1029,"children":1030},{},[1031],{"type":54,"value":1032},"      onMapCreated: _onMapCreated,\n",{"type":48,"tag":237,"props":1034,"children":1035},{"class":239,"line":864},[1036],{"type":48,"tag":237,"props":1037,"children":1038},{},[1039],{"type":54,"value":1040},"      cameraOptions: CameraOptions(\n",{"type":48,"tag":237,"props":1042,"children":1044},{"class":239,"line":1043},21,[1045],{"type":48,"tag":237,"props":1046,"children":1047},{},[1048],{"type":54,"value":1049},"        center: Point(coordinates: Position(-122.4194, 37.7749)),\n",{"type":48,"tag":237,"props":1051,"children":1053},{"class":239,"line":1052},22,[1054],{"type":48,"tag":237,"props":1055,"children":1056},{},[1057],{"type":54,"value":1058},"        zoom: 12,\n",{"type":48,"tag":237,"props":1060,"children":1062},{"class":239,"line":1061},23,[1063],{"type":48,"tag":237,"props":1064,"children":1065},{},[1066],{"type":54,"value":843},{"type":48,"tag":237,"props":1068,"children":1070},{"class":239,"line":1069},24,[1071],{"type":48,"tag":237,"props":1072,"children":1073},{},[1074],{"type":54,"value":852},{"type":48,"tag":237,"props":1076,"children":1078},{"class":239,"line":1077},25,[1079],{"type":48,"tag":237,"props":1080,"children":1081},{},[1082],{"type":54,"value":861},{"type":48,"tag":237,"props":1084,"children":1086},{"class":239,"line":1085},26,[1087],{"type":48,"tag":237,"props":1088,"children":1089},{},[1090],{"type":54,"value":670},{"type":48,"tag":173,"props":1092,"children":1093},{},[],{"type":48,"tag":177,"props":1095,"children":1097},{"id":1096},"add-annotations",[1098],{"type":54,"value":1099},"Add Annotations",{"type":48,"tag":57,"props":1101,"children":1102},{},[1103,1105,1111],{"type":54,"value":1104},"Use ",{"type":48,"tag":92,"props":1106,"children":1108},{"className":1107},[],[1109],{"type":54,"value":1110},"mapboxMap.annotations",{"type":54,"value":1112}," to create managers for point, circle, polyline, and polygon annotations. Managers are long-lived — create them once and reuse for updates.",{"type":48,"tag":184,"props":1114,"children":1116},{"id":1115},"point-annotations-with-a-custom-image",[1117],{"type":54,"value":1118},"Point annotations with a custom image",{"type":48,"tag":226,"props":1120,"children":1122},{"className":579,"code":1121,"language":28,"meta":231,"style":231},"import 'package:flutter\u002Fservices.dart' show rootBundle;\n\nPointAnnotationManager? pointAnnotationManager;\n\nFuture\u003Cvoid> _addMarkers(MapboxMap mapboxMap) async {\n  pointAnnotationManager = await mapboxMap.annotations.createPointAnnotationManager();\n\n  final bytes = await rootBundle.load('assets\u002Fmarker.png');\n  final imageBytes = bytes.buffer.asUint8List();\n\n  final options = \u003CPointAnnotationOptions>[\n    PointAnnotationOptions(\n      geometry: Point(coordinates: Position(-122.4194, 37.7749)),\n      image: imageBytes,\n      iconSize: 1.2,\n    ),\n    PointAnnotationOptions(\n      geometry: Point(coordinates: Position(-122.4094, 37.7849)),\n      image: imageBytes,\n    ),\n  ];\n\n  await pointAnnotationManager!.createMulti(options);\n}\n",[1123],{"type":48,"tag":92,"props":1124,"children":1125},{"__ignoreMap":231},[1126,1134,1141,1149,1156,1164,1172,1179,1187,1195,1202,1210,1218,1226,1234,1242,1250,1257,1265,1272,1279,1287,1294,1302],{"type":48,"tag":237,"props":1127,"children":1128},{"class":239,"line":240},[1129],{"type":48,"tag":237,"props":1130,"children":1131},{},[1132],{"type":54,"value":1133},"import 'package:flutter\u002Fservices.dart' show rootBundle;\n",{"type":48,"tag":237,"props":1135,"children":1136},{"class":239,"line":250},[1137],{"type":48,"tag":237,"props":1138,"children":1139},{"emptyLinePlaceholder":615},[1140],{"type":54,"value":618},{"type":48,"tag":237,"props":1142,"children":1143},{"class":239,"line":266},[1144],{"type":48,"tag":237,"props":1145,"children":1146},{},[1147],{"type":54,"value":1148},"PointAnnotationManager? pointAnnotationManager;\n",{"type":48,"tag":237,"props":1150,"children":1151},{"class":239,"line":611},[1152],{"type":48,"tag":237,"props":1153,"children":1154},{"emptyLinePlaceholder":615},[1155],{"type":54,"value":618},{"type":48,"tag":237,"props":1157,"children":1158},{"class":239,"line":621},[1159],{"type":48,"tag":237,"props":1160,"children":1161},{},[1162],{"type":54,"value":1163},"Future\u003Cvoid> _addMarkers(MapboxMap mapboxMap) async {\n",{"type":48,"tag":237,"props":1165,"children":1166},{"class":239,"line":630},[1167],{"type":48,"tag":237,"props":1168,"children":1169},{},[1170],{"type":54,"value":1171},"  pointAnnotationManager = await mapboxMap.annotations.createPointAnnotationManager();\n",{"type":48,"tag":237,"props":1173,"children":1174},{"class":239,"line":638},[1175],{"type":48,"tag":237,"props":1176,"children":1177},{"emptyLinePlaceholder":615},[1178],{"type":54,"value":618},{"type":48,"tag":237,"props":1180,"children":1181},{"class":239,"line":647},[1182],{"type":48,"tag":237,"props":1183,"children":1184},{},[1185],{"type":54,"value":1186},"  final bytes = await rootBundle.load('assets\u002Fmarker.png');\n",{"type":48,"tag":237,"props":1188,"children":1189},{"class":239,"line":656},[1190],{"type":48,"tag":237,"props":1191,"children":1192},{},[1193],{"type":54,"value":1194},"  final imageBytes = bytes.buffer.asUint8List();\n",{"type":48,"tag":237,"props":1196,"children":1197},{"class":239,"line":36},[1198],{"type":48,"tag":237,"props":1199,"children":1200},{"emptyLinePlaceholder":615},[1201],{"type":54,"value":618},{"type":48,"tag":237,"props":1203,"children":1204},{"class":239,"line":783},[1205],{"type":48,"tag":237,"props":1206,"children":1207},{},[1208],{"type":54,"value":1209},"  final options = \u003CPointAnnotationOptions>[\n",{"type":48,"tag":237,"props":1211,"children":1212},{"class":239,"line":792},[1213],{"type":48,"tag":237,"props":1214,"children":1215},{},[1216],{"type":54,"value":1217},"    PointAnnotationOptions(\n",{"type":48,"tag":237,"props":1219,"children":1220},{"class":239,"line":801},[1221],{"type":48,"tag":237,"props":1222,"children":1223},{},[1224],{"type":54,"value":1225},"      geometry: Point(coordinates: Position(-122.4194, 37.7749)),\n",{"type":48,"tag":237,"props":1227,"children":1228},{"class":239,"line":810},[1229],{"type":48,"tag":237,"props":1230,"children":1231},{},[1232],{"type":54,"value":1233},"      image: imageBytes,\n",{"type":48,"tag":237,"props":1235,"children":1236},{"class":239,"line":819},[1237],{"type":48,"tag":237,"props":1238,"children":1239},{},[1240],{"type":54,"value":1241},"      iconSize: 1.2,\n",{"type":48,"tag":237,"props":1243,"children":1244},{"class":239,"line":828},[1245],{"type":48,"tag":237,"props":1246,"children":1247},{},[1248],{"type":54,"value":1249},"    ),\n",{"type":48,"tag":237,"props":1251,"children":1252},{"class":239,"line":837},[1253],{"type":48,"tag":237,"props":1254,"children":1255},{},[1256],{"type":54,"value":1217},{"type":48,"tag":237,"props":1258,"children":1259},{"class":239,"line":846},[1260],{"type":48,"tag":237,"props":1261,"children":1262},{},[1263],{"type":54,"value":1264},"      geometry: Point(coordinates: Position(-122.4094, 37.7849)),\n",{"type":48,"tag":237,"props":1266,"children":1267},{"class":239,"line":855},[1268],{"type":48,"tag":237,"props":1269,"children":1270},{},[1271],{"type":54,"value":1233},{"type":48,"tag":237,"props":1273,"children":1274},{"class":239,"line":864},[1275],{"type":48,"tag":237,"props":1276,"children":1277},{},[1278],{"type":54,"value":1249},{"type":48,"tag":237,"props":1280,"children":1281},{"class":239,"line":1043},[1282],{"type":48,"tag":237,"props":1283,"children":1284},{},[1285],{"type":54,"value":1286},"  ];\n",{"type":48,"tag":237,"props":1288,"children":1289},{"class":239,"line":1052},[1290],{"type":48,"tag":237,"props":1291,"children":1292},{"emptyLinePlaceholder":615},[1293],{"type":54,"value":618},{"type":48,"tag":237,"props":1295,"children":1296},{"class":239,"line":1061},[1297],{"type":48,"tag":237,"props":1298,"children":1299},{},[1300],{"type":54,"value":1301},"  await pointAnnotationManager!.createMulti(options);\n",{"type":48,"tag":237,"props":1303,"children":1304},{"class":239,"line":1069},[1305],{"type":48,"tag":237,"props":1306,"children":1307},{},[1308],{"type":54,"value":670},{"type":48,"tag":57,"props":1310,"children":1311},{},[1312,1314,1320],{"type":54,"value":1313},"Remember to register the asset in ",{"type":48,"tag":92,"props":1315,"children":1317},{"className":1316},[],[1318],{"type":54,"value":1319},"pubspec.yaml",{"type":54,"value":277},{"type":48,"tag":226,"props":1322,"children":1324},{"className":228,"code":1323,"language":230,"meta":231,"style":231},"flutter:\n  assets:\n    - assets\u002Fmarker.png\n",[1325],{"type":48,"tag":92,"props":1326,"children":1327},{"__ignoreMap":231},[1328,1339,1351],{"type":48,"tag":237,"props":1329,"children":1330},{"class":239,"line":240},[1331,1335],{"type":48,"tag":237,"props":1332,"children":1333},{"style":254},[1334],{"type":54,"value":14},{"type":48,"tag":237,"props":1336,"children":1337},{"style":260},[1338],{"type":54,"value":263},{"type":48,"tag":237,"props":1340,"children":1341},{"class":239,"line":250},[1342,1347],{"type":48,"tag":237,"props":1343,"children":1344},{"style":254},[1345],{"type":54,"value":1346},"  assets",{"type":48,"tag":237,"props":1348,"children":1349},{"style":260},[1350],{"type":54,"value":263},{"type":48,"tag":237,"props":1352,"children":1353},{"class":239,"line":266},[1354,1359],{"type":48,"tag":237,"props":1355,"children":1356},{"style":260},[1357],{"type":54,"value":1358},"    -",{"type":48,"tag":237,"props":1360,"children":1361},{"style":280},[1362],{"type":54,"value":1363}," assets\u002Fmarker.png\n",{"type":48,"tag":184,"props":1365,"children":1367},{"id":1366},"tap-handling",[1368],{"type":54,"value":1369},"Tap handling",{"type":48,"tag":57,"props":1371,"children":1372},{},[1373,1374,1380,1382,1388],{"type":54,"value":1104},{"type":48,"tag":92,"props":1375,"children":1377},{"className":1376},[],[1378],{"type":54,"value":1379},"manager.tapEvents",{"type":54,"value":1381}," — this is the current API. ",{"type":48,"tag":92,"props":1383,"children":1385},{"className":1384},[],[1386],{"type":54,"value":1387},"addOnPointAnnotationClickListener",{"type":54,"value":1389}," is deprecated.",{"type":48,"tag":57,"props":1391,"children":1392},{},[1393,1399,1401,1407,1409,1415],{"type":48,"tag":92,"props":1394,"children":1396},{"className":1395},[],[1397],{"type":54,"value":1398},"tapEvents",{"type":54,"value":1400}," returns a ",{"type":48,"tag":92,"props":1402,"children":1404},{"className":1403},[],[1405],{"type":54,"value":1406},"Cancelable",{"type":54,"value":1408}," that you store and invoke ",{"type":48,"tag":92,"props":1410,"children":1412},{"className":1411},[],[1413],{"type":54,"value":1414},".cancel()",{"type":54,"value":1416}," on when the listener is no longer needed:",{"type":48,"tag":226,"props":1418,"children":1420},{"className":579,"code":1419,"language":28,"meta":231,"style":231},"final Cancelable tapSubscription = pointAnnotationManager!.tapEvents(\n  onTap: (annotation) {\n    debugPrint('Tapped annotation ${annotation.id}');\n  },\n);\n\n@override\nvoid dispose() {\n  tapSubscription.cancel();\n  super.dispose();\n}\n",[1421],{"type":48,"tag":92,"props":1422,"children":1423},{"__ignoreMap":231},[1424,1432,1440,1448,1456,1464,1471,1479,1487,1495,1503],{"type":48,"tag":237,"props":1425,"children":1426},{"class":239,"line":240},[1427],{"type":48,"tag":237,"props":1428,"children":1429},{},[1430],{"type":54,"value":1431},"final Cancelable tapSubscription = pointAnnotationManager!.tapEvents(\n",{"type":48,"tag":237,"props":1433,"children":1434},{"class":239,"line":250},[1435],{"type":48,"tag":237,"props":1436,"children":1437},{},[1438],{"type":54,"value":1439},"  onTap: (annotation) {\n",{"type":48,"tag":237,"props":1441,"children":1442},{"class":239,"line":266},[1443],{"type":48,"tag":237,"props":1444,"children":1445},{},[1446],{"type":54,"value":1447},"    debugPrint('Tapped annotation ${annotation.id}');\n",{"type":48,"tag":237,"props":1449,"children":1450},{"class":239,"line":611},[1451],{"type":48,"tag":237,"props":1452,"children":1453},{},[1454],{"type":54,"value":1455},"  },\n",{"type":48,"tag":237,"props":1457,"children":1458},{"class":239,"line":621},[1459],{"type":48,"tag":237,"props":1460,"children":1461},{},[1462],{"type":54,"value":1463},");\n",{"type":48,"tag":237,"props":1465,"children":1466},{"class":239,"line":630},[1467],{"type":48,"tag":237,"props":1468,"children":1469},{"emptyLinePlaceholder":615},[1470],{"type":54,"value":618},{"type":48,"tag":237,"props":1472,"children":1473},{"class":239,"line":638},[1474],{"type":48,"tag":237,"props":1475,"children":1476},{},[1477],{"type":54,"value":1478},"@override\n",{"type":48,"tag":237,"props":1480,"children":1481},{"class":239,"line":647},[1482],{"type":48,"tag":237,"props":1483,"children":1484},{},[1485],{"type":54,"value":1486},"void dispose() {\n",{"type":48,"tag":237,"props":1488,"children":1489},{"class":239,"line":656},[1490],{"type":48,"tag":237,"props":1491,"children":1492},{},[1493],{"type":54,"value":1494},"  tapSubscription.cancel();\n",{"type":48,"tag":237,"props":1496,"children":1497},{"class":239,"line":36},[1498],{"type":48,"tag":237,"props":1499,"children":1500},{},[1501],{"type":54,"value":1502},"  super.dispose();\n",{"type":48,"tag":237,"props":1504,"children":1505},{"class":239,"line":783},[1506],{"type":48,"tag":237,"props":1507,"children":1508},{},[1509],{"type":54,"value":670},{"type":48,"tag":57,"props":1511,"children":1512},{},[1513,1515,1520,1522,1528,1530,1536,1538,1544],{"type":54,"value":1514},"The same pattern — returning a ",{"type":48,"tag":92,"props":1516,"children":1518},{"className":1517},[],[1519],{"type":54,"value":1406},{"type":54,"value":1521}," — exists on every manager's ",{"type":48,"tag":92,"props":1523,"children":1525},{"className":1524},[],[1526],{"type":54,"value":1527},"longPressEvents",{"type":54,"value":1529}," and ",{"type":48,"tag":92,"props":1531,"children":1533},{"className":1532},[],[1534],{"type":54,"value":1535},"dragEvents",{"type":54,"value":1537},", and across the other annotation types (",{"type":48,"tag":92,"props":1539,"children":1541},{"className":1540},[],[1542],{"type":54,"value":1543},"CircleAnnotationManager.tapEvents",{"type":54,"value":1545},", etc.).",{"type":48,"tag":184,"props":1547,"children":1549},{"id":1548},"load-annotations-from-geojson",[1550],{"type":54,"value":1551},"Load annotations from GeoJSON",{"type":48,"tag":226,"props":1553,"children":1555},{"className":579,"code":1554,"language":28,"meta":231,"style":231},"import 'dart:convert';\nimport 'package:flutter\u002Fservices.dart' show rootBundle;\n\nFuture\u003Cvoid> _loadGeoJson(MapboxMap mapboxMap) async {\n  final raw = await rootBundle.loadString('assets\u002Fcoffee_shops.geojson');\n  final geo = jsonDecode(raw) as Map\u003CString, dynamic>;\n  final features = (geo['features'] as List).cast\u003CMap\u003CString, dynamic>>();\n\n  final manager = await mapboxMap.annotations.createPointAnnotationManager();\n  final icon = (await rootBundle.load('assets\u002Fcoffee.png')).buffer.asUint8List();\n\n  final options = features.map((feature) {\n    final coords = feature['geometry']['coordinates'] as List;\n    return PointAnnotationOptions(\n      geometry: Point(coordinates: Position(coords[0] as double, coords[1] as double)),\n      image: icon,\n    );\n  }).toList();\n\n  await manager.createMulti(options);\n}\n",[1556],{"type":48,"tag":92,"props":1557,"children":1558},{"__ignoreMap":231},[1559,1567,1574,1581,1589,1597,1605,1613,1620,1628,1636,1643,1651,1659,1667,1675,1683,1690,1698,1705,1713],{"type":48,"tag":237,"props":1560,"children":1561},{"class":239,"line":240},[1562],{"type":48,"tag":237,"props":1563,"children":1564},{},[1565],{"type":54,"value":1566},"import 'dart:convert';\n",{"type":48,"tag":237,"props":1568,"children":1569},{"class":239,"line":250},[1570],{"type":48,"tag":237,"props":1571,"children":1572},{},[1573],{"type":54,"value":1133},{"type":48,"tag":237,"props":1575,"children":1576},{"class":239,"line":266},[1577],{"type":48,"tag":237,"props":1578,"children":1579},{"emptyLinePlaceholder":615},[1580],{"type":54,"value":618},{"type":48,"tag":237,"props":1582,"children":1583},{"class":239,"line":611},[1584],{"type":48,"tag":237,"props":1585,"children":1586},{},[1587],{"type":54,"value":1588},"Future\u003Cvoid> _loadGeoJson(MapboxMap mapboxMap) async {\n",{"type":48,"tag":237,"props":1590,"children":1591},{"class":239,"line":621},[1592],{"type":48,"tag":237,"props":1593,"children":1594},{},[1595],{"type":54,"value":1596},"  final raw = await rootBundle.loadString('assets\u002Fcoffee_shops.geojson');\n",{"type":48,"tag":237,"props":1598,"children":1599},{"class":239,"line":630},[1600],{"type":48,"tag":237,"props":1601,"children":1602},{},[1603],{"type":54,"value":1604},"  final geo = jsonDecode(raw) as Map\u003CString, dynamic>;\n",{"type":48,"tag":237,"props":1606,"children":1607},{"class":239,"line":638},[1608],{"type":48,"tag":237,"props":1609,"children":1610},{},[1611],{"type":54,"value":1612},"  final features = (geo['features'] as List).cast\u003CMap\u003CString, dynamic>>();\n",{"type":48,"tag":237,"props":1614,"children":1615},{"class":239,"line":647},[1616],{"type":48,"tag":237,"props":1617,"children":1618},{"emptyLinePlaceholder":615},[1619],{"type":54,"value":618},{"type":48,"tag":237,"props":1621,"children":1622},{"class":239,"line":656},[1623],{"type":48,"tag":237,"props":1624,"children":1625},{},[1626],{"type":54,"value":1627},"  final manager = await mapboxMap.annotations.createPointAnnotationManager();\n",{"type":48,"tag":237,"props":1629,"children":1630},{"class":239,"line":36},[1631],{"type":48,"tag":237,"props":1632,"children":1633},{},[1634],{"type":54,"value":1635},"  final icon = (await rootBundle.load('assets\u002Fcoffee.png')).buffer.asUint8List();\n",{"type":48,"tag":237,"props":1637,"children":1638},{"class":239,"line":783},[1639],{"type":48,"tag":237,"props":1640,"children":1641},{"emptyLinePlaceholder":615},[1642],{"type":54,"value":618},{"type":48,"tag":237,"props":1644,"children":1645},{"class":239,"line":792},[1646],{"type":48,"tag":237,"props":1647,"children":1648},{},[1649],{"type":54,"value":1650},"  final options = features.map((feature) {\n",{"type":48,"tag":237,"props":1652,"children":1653},{"class":239,"line":801},[1654],{"type":48,"tag":237,"props":1655,"children":1656},{},[1657],{"type":54,"value":1658},"    final coords = feature['geometry']['coordinates'] as List;\n",{"type":48,"tag":237,"props":1660,"children":1661},{"class":239,"line":810},[1662],{"type":48,"tag":237,"props":1663,"children":1664},{},[1665],{"type":54,"value":1666},"    return PointAnnotationOptions(\n",{"type":48,"tag":237,"props":1668,"children":1669},{"class":239,"line":819},[1670],{"type":48,"tag":237,"props":1671,"children":1672},{},[1673],{"type":54,"value":1674},"      geometry: Point(coordinates: Position(coords[0] as double, coords[1] as double)),\n",{"type":48,"tag":237,"props":1676,"children":1677},{"class":239,"line":828},[1678],{"type":48,"tag":237,"props":1679,"children":1680},{},[1681],{"type":54,"value":1682},"      image: icon,\n",{"type":48,"tag":237,"props":1684,"children":1685},{"class":239,"line":837},[1686],{"type":48,"tag":237,"props":1687,"children":1688},{},[1689],{"type":54,"value":852},{"type":48,"tag":237,"props":1691,"children":1692},{"class":239,"line":846},[1693],{"type":48,"tag":237,"props":1694,"children":1695},{},[1696],{"type":54,"value":1697},"  }).toList();\n",{"type":48,"tag":237,"props":1699,"children":1700},{"class":239,"line":855},[1701],{"type":48,"tag":237,"props":1702,"children":1703},{"emptyLinePlaceholder":615},[1704],{"type":54,"value":618},{"type":48,"tag":237,"props":1706,"children":1707},{"class":239,"line":864},[1708],{"type":48,"tag":237,"props":1709,"children":1710},{},[1711],{"type":54,"value":1712},"  await manager.createMulti(options);\n",{"type":48,"tag":237,"props":1714,"children":1715},{"class":239,"line":1043},[1716],{"type":48,"tag":237,"props":1717,"children":1718},{},[1719],{"type":54,"value":670},{"type":48,"tag":57,"props":1721,"children":1722},{},[1723,1725,1731,1733,1739],{"type":54,"value":1724},"For thousands of features use a style layer (",{"type":48,"tag":92,"props":1726,"children":1728},{"className":1727},[],[1729],{"type":54,"value":1730},"GeoJsonSource",{"type":54,"value":1732}," + ",{"type":48,"tag":92,"props":1734,"children":1736},{"className":1735},[],[1737],{"type":54,"value":1738},"SymbolLayer",{"type":54,"value":1740},") instead of annotations.",{"type":48,"tag":173,"props":1742,"children":1743},{},[],{"type":48,"tag":177,"props":1745,"children":1747},{"id":1746},"show-user-location",[1748],{"type":54,"value":1749},"Show User Location",{"type":48,"tag":57,"props":1751,"children":1752},{},[1753,1755,1761],{"type":54,"value":1754},"Permissions must already be granted (use ",{"type":48,"tag":92,"props":1756,"children":1758},{"className":1757},[],[1759],{"type":54,"value":1760},"permission_handler",{"type":54,"value":1762}," or similar) before enabling the puck.",{"type":48,"tag":226,"props":1764,"children":1766},{"className":579,"code":1765,"language":28,"meta":231,"style":231},"await mapboxMap.location.updateSettings(LocationComponentSettings(\n  enabled: true,\n  puckBearingEnabled: true,\n  locationPuck: LocationPuck(\n    locationPuck2D: DefaultLocationPuck2D(),\n  ),\n));\n",[1767],{"type":48,"tag":92,"props":1768,"children":1769},{"__ignoreMap":231},[1770,1778,1786,1794,1802,1810,1818],{"type":48,"tag":237,"props":1771,"children":1772},{"class":239,"line":240},[1773],{"type":48,"tag":237,"props":1774,"children":1775},{},[1776],{"type":54,"value":1777},"await mapboxMap.location.updateSettings(LocationComponentSettings(\n",{"type":48,"tag":237,"props":1779,"children":1780},{"class":239,"line":250},[1781],{"type":48,"tag":237,"props":1782,"children":1783},{},[1784],{"type":54,"value":1785},"  enabled: true,\n",{"type":48,"tag":237,"props":1787,"children":1788},{"class":239,"line":266},[1789],{"type":48,"tag":237,"props":1790,"children":1791},{},[1792],{"type":54,"value":1793},"  puckBearingEnabled: true,\n",{"type":48,"tag":237,"props":1795,"children":1796},{"class":239,"line":611},[1797],{"type":48,"tag":237,"props":1798,"children":1799},{},[1800],{"type":54,"value":1801},"  locationPuck: LocationPuck(\n",{"type":48,"tag":237,"props":1803,"children":1804},{"class":239,"line":621},[1805],{"type":48,"tag":237,"props":1806,"children":1807},{},[1808],{"type":54,"value":1809},"    locationPuck2D: DefaultLocationPuck2D(),\n",{"type":48,"tag":237,"props":1811,"children":1812},{"class":239,"line":630},[1813],{"type":48,"tag":237,"props":1814,"children":1815},{},[1816],{"type":54,"value":1817},"  ),\n",{"type":48,"tag":237,"props":1819,"children":1820},{"class":239,"line":638},[1821],{"type":48,"tag":237,"props":1822,"children":1823},{},[1824],{"type":54,"value":1825},"));\n",{"type":48,"tag":173,"props":1827,"children":1828},{},[],{"type":48,"tag":177,"props":1830,"children":1832},{"id":1831},"camera-control",[1833],{"type":54,"value":1834},"Camera Control",{"type":48,"tag":226,"props":1836,"children":1838},{"className":579,"code":1837,"language":28,"meta":231,"style":231},"\u002F\u002F Instant jump\nawait mapboxMap.setCamera(CameraOptions(\n  center: Point(coordinates: Position(-80.1263, 25.7845)),\n  zoom: 14,\n));\n\n\u002F\u002F Animated fly-to\nawait mapboxMap.flyTo(\n  CameraOptions(\n    center: Point(coordinates: Position(-80.1263, 25.7845)),\n    zoom: 17,\n    bearing: 180,\n    pitch: 30,\n  ),\n  MapAnimationOptions(duration: 2000),\n);\n",[1839],{"type":48,"tag":92,"props":1840,"children":1841},{"__ignoreMap":231},[1842,1850,1858,1866,1874,1881,1888,1896,1904,1912,1920,1928,1936,1944,1951,1959],{"type":48,"tag":237,"props":1843,"children":1844},{"class":239,"line":240},[1845],{"type":48,"tag":237,"props":1846,"children":1847},{},[1848],{"type":54,"value":1849},"\u002F\u002F Instant jump\n",{"type":48,"tag":237,"props":1851,"children":1852},{"class":239,"line":250},[1853],{"type":48,"tag":237,"props":1854,"children":1855},{},[1856],{"type":54,"value":1857},"await mapboxMap.setCamera(CameraOptions(\n",{"type":48,"tag":237,"props":1859,"children":1860},{"class":239,"line":266},[1861],{"type":48,"tag":237,"props":1862,"children":1863},{},[1864],{"type":54,"value":1865},"  center: Point(coordinates: Position(-80.1263, 25.7845)),\n",{"type":48,"tag":237,"props":1867,"children":1868},{"class":239,"line":611},[1869],{"type":48,"tag":237,"props":1870,"children":1871},{},[1872],{"type":54,"value":1873},"  zoom: 14,\n",{"type":48,"tag":237,"props":1875,"children":1876},{"class":239,"line":621},[1877],{"type":48,"tag":237,"props":1878,"children":1879},{},[1880],{"type":54,"value":1825},{"type":48,"tag":237,"props":1882,"children":1883},{"class":239,"line":630},[1884],{"type":48,"tag":237,"props":1885,"children":1886},{"emptyLinePlaceholder":615},[1887],{"type":54,"value":618},{"type":48,"tag":237,"props":1889,"children":1890},{"class":239,"line":638},[1891],{"type":48,"tag":237,"props":1892,"children":1893},{},[1894],{"type":54,"value":1895},"\u002F\u002F Animated fly-to\n",{"type":48,"tag":237,"props":1897,"children":1898},{"class":239,"line":647},[1899],{"type":48,"tag":237,"props":1900,"children":1901},{},[1902],{"type":54,"value":1903},"await mapboxMap.flyTo(\n",{"type":48,"tag":237,"props":1905,"children":1906},{"class":239,"line":656},[1907],{"type":48,"tag":237,"props":1908,"children":1909},{},[1910],{"type":54,"value":1911},"  CameraOptions(\n",{"type":48,"tag":237,"props":1913,"children":1914},{"class":239,"line":36},[1915],{"type":48,"tag":237,"props":1916,"children":1917},{},[1918],{"type":54,"value":1919},"    center: Point(coordinates: Position(-80.1263, 25.7845)),\n",{"type":48,"tag":237,"props":1921,"children":1922},{"class":239,"line":783},[1923],{"type":48,"tag":237,"props":1924,"children":1925},{},[1926],{"type":54,"value":1927},"    zoom: 17,\n",{"type":48,"tag":237,"props":1929,"children":1930},{"class":239,"line":792},[1931],{"type":48,"tag":237,"props":1932,"children":1933},{},[1934],{"type":54,"value":1935},"    bearing: 180,\n",{"type":48,"tag":237,"props":1937,"children":1938},{"class":239,"line":801},[1939],{"type":48,"tag":237,"props":1940,"children":1941},{},[1942],{"type":54,"value":1943},"    pitch: 30,\n",{"type":48,"tag":237,"props":1945,"children":1946},{"class":239,"line":810},[1947],{"type":48,"tag":237,"props":1948,"children":1949},{},[1950],{"type":54,"value":1817},{"type":48,"tag":237,"props":1952,"children":1953},{"class":239,"line":819},[1954],{"type":48,"tag":237,"props":1955,"children":1956},{},[1957],{"type":54,"value":1958},"  MapAnimationOptions(duration: 2000),\n",{"type":48,"tag":237,"props":1960,"children":1961},{"class":239,"line":828},[1962],{"type":48,"tag":237,"props":1963,"children":1964},{},[1965],{"type":54,"value":1463},{"type":48,"tag":173,"props":1967,"children":1968},{},[],{"type":48,"tag":177,"props":1970,"children":1972},{"id":1971},"troubleshooting",[1973],{"type":54,"value":1974},"Troubleshooting",{"type":48,"tag":184,"props":1976,"children":1978},{"id":1977},"ios-build-fails-with-platform-is-lower-than-deployment-target",[1979],{"type":54,"value":1980},"iOS build fails with \"platform is lower than deployment target\"",{"type":48,"tag":57,"props":1982,"children":1983},{},[1984,1986,1990,1991,1996,1998,2003,2005,2011,2013,2019],{"type":54,"value":1985},"The Flutter default iOS deployment target is lower than Mapbox's minimum (iOS 14). Set ",{"type":48,"tag":66,"props":1987,"children":1988},{},[1989],{"type":54,"value":374},{"type":54,"value":376},{"type":48,"tag":92,"props":1992,"children":1994},{"className":1993},[],[1995],{"type":54,"value":382},{"type":54,"value":1997}," on the Runner target in Xcode. If the project has an ",{"type":48,"tag":92,"props":1999,"children":2001},{"className":2000},[],[2002],{"type":54,"value":395},{"type":54,"value":2004},", also set ",{"type":48,"tag":92,"props":2006,"children":2008},{"className":2007},[],[2009],{"type":54,"value":2010},"platform :ios, '14.0'",{"type":54,"value":2012}," there and re-run ",{"type":48,"tag":92,"props":2014,"children":2016},{"className":2015},[],[2017],{"type":54,"value":2018},"pod install",{"type":54,"value":384},{"type":48,"tag":184,"props":2021,"children":2023},{"id":2022},"setaccesstoken-not-called",[2024,2030],{"type":48,"tag":92,"props":2025,"children":2027},{"className":2026},[],[2028],{"type":54,"value":2029},"setAccessToken",{"type":54,"value":2031}," not called",{"type":48,"tag":57,"props":2033,"children":2034},{},[2035,2037,2043,2045,2050,2052,2058,2060,2066],{"type":54,"value":2036},"If you forget to call ",{"type":48,"tag":92,"props":2038,"children":2040},{"className":2039},[],[2041],{"type":54,"value":2042},"MapboxOptions.setAccessToken",{"type":54,"value":2044}," before creating a ",{"type":48,"tag":92,"props":2046,"children":2048},{"className":2047},[],[2049],{"type":54,"value":97},{"type":54,"value":2051},", the map will load with a blank grid. Always call it in ",{"type":48,"tag":92,"props":2053,"children":2055},{"className":2054},[],[2056],{"type":54,"value":2057},"main()",{"type":54,"value":2059}," before ",{"type":48,"tag":92,"props":2061,"children":2063},{"className":2062},[],[2064],{"type":54,"value":2065},"runApp",{"type":54,"value":384},{"type":48,"tag":184,"props":2068,"children":2070},{"id":2069},"annotation-tap-handler-not-firing",[2071],{"type":54,"value":2072},"Annotation tap handler not firing",{"type":48,"tag":57,"props":2074,"children":2075},{},[2076,2078,2084,2086,2091,2093,2098,2100,2106],{"type":54,"value":2077},"Make sure you're using ",{"type":48,"tag":92,"props":2079,"children":2081},{"className":2080},[],[2082],{"type":54,"value":2083},"manager.tapEvents(onTap: ...)",{"type":54,"value":2085}," — ",{"type":48,"tag":92,"props":2087,"children":2089},{"className":2088},[],[2090],{"type":54,"value":1387},{"type":54,"value":2092}," is deprecated. Also confirm the ",{"type":48,"tag":92,"props":2094,"children":2096},{"className":2095},[],[2097],{"type":54,"value":881},{"type":54,"value":2099}," controller is captured via ",{"type":48,"tag":92,"props":2101,"children":2103},{"className":2102},[],[2104],{"type":54,"value":2105},"onMapCreated",{"type":54,"value":2107}," before you create the annotation manager.",{"type":48,"tag":184,"props":2109,"children":2111},{"id":2110},"hot-reload-after-permissions-change",[2112],{"type":54,"value":2113},"Hot reload after permissions change",{"type":48,"tag":57,"props":2115,"children":2116},{},[2117],{"type":54,"value":2118},"iOS\u002FAndroid will not re-read manifests or Info.plist on hot reload. Fully restart the app after editing permissions.",{"type":48,"tag":173,"props":2120,"children":2121},{},[],{"type":48,"tag":177,"props":2123,"children":2125},{"id":2124},"reference-files",[2126],{"type":54,"value":2127},"Reference Files",{"type":48,"tag":72,"props":2129,"children":2130},{},[2131,2145],{"type":48,"tag":76,"props":2132,"children":2133},{},[2134,2143],{"type":48,"tag":66,"props":2135,"children":2136},{},[2137],{"type":48,"tag":92,"props":2138,"children":2140},{"className":2139},[],[2141],{"type":54,"value":2142},"references\u002Fannotations.md",{"type":54,"value":2144}," — Circle, Polyline, Polygon patterns and GeoJSON source\u002Flayer recipes.",{"type":48,"tag":76,"props":2146,"children":2147},{},[2148,2157],{"type":48,"tag":66,"props":2149,"children":2150},{},[2151],{"type":48,"tag":92,"props":2152,"children":2154},{"className":2153},[],[2155],{"type":54,"value":2156},"references\u002Fplatform-setup.md",{"type":54,"value":2158}," — Deeper iOS\u002FAndroid setup, token strategies, release signing notes.",{"type":48,"tag":173,"props":2160,"children":2161},{},[],{"type":48,"tag":177,"props":2163,"children":2165},{"id":2164},"additional-resources",[2166],{"type":54,"value":2167},"Additional Resources",{"type":48,"tag":72,"props":2169,"children":2170},{},[2171,2179,2189,2199],{"type":48,"tag":76,"props":2172,"children":2173},{},[2174],{"type":48,"tag":135,"props":2175,"children":2177},{"href":137,"rel":2176},[139],[2178],{"type":54,"value":142},{"type":48,"tag":76,"props":2180,"children":2181},{},[2182],{"type":48,"tag":135,"props":2183,"children":2186},{"href":2184,"rel":2185},"https:\u002F\u002Fdocs.mapbox.com\u002Fflutter\u002Fmaps\u002Fguides\u002Fmarkers-and-annotations\u002F",[139],[2187],{"type":54,"value":2188},"Markers and Annotations guide",{"type":48,"tag":76,"props":2190,"children":2191},{},[2192],{"type":48,"tag":135,"props":2193,"children":2196},{"href":2194,"rel":2195},"https:\u002F\u002Fdocs.mapbox.com\u002Fflutter\u002Fmaps\u002Fguides\u002Fuser-location\u002F",[139],[2197],{"type":54,"value":2198},"User Location guide",{"type":48,"tag":76,"props":2200,"children":2201},{},[2202],{"type":48,"tag":135,"props":2203,"children":2205},{"href":158,"rel":2204},[139],[2206],{"type":54,"value":162},{"type":48,"tag":2208,"props":2209,"children":2210},"style",{},[2211],{"type":54,"value":2212},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":2214,"total":855},[2215,2225,2242,2257,2267,2279,2293],{"slug":2216,"name":2216,"fn":2217,"description":2218,"org":2219,"tags":2220,"stars":32,"repoUrl":33,"updatedAt":2224},"mapbox-android-patterns","integrate Mapbox Maps SDK on Android","Official integration patterns for Mapbox Maps SDK on Android. Covers installation, adding markers, user location, custom data, styles, camera control, and featureset interactions. Based on official Mapbox documentation.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2221,2222,2223],{"name":17,"slug":18,"type":15},{"name":9,"slug":8,"type":15},{"name":23,"slug":24,"type":15},"2026-07-30T05:30:51.739352",{"slug":2226,"name":2226,"fn":2227,"description":2228,"org":2229,"tags":2230,"stars":32,"repoUrl":33,"updatedAt":2241},"mapbox-cartography","apply cartographic design principles to Mapbox","Expert guidance on map design principles, color theory, visual hierarchy, typography, and cartographic best practices for creating effective and beautiful maps with Mapbox. Use when designing map styles, choosing colors, or making cartographic decisions.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2231,2234,2237,2238],{"name":2232,"slug":2233,"type":15},"Branding","branding",{"name":2235,"slug":2236,"type":15},"Design","design",{"name":9,"slug":8,"type":15},{"name":2239,"slug":2240,"type":15},"Typography","typography","2026-04-06T18:28:41.2556",{"slug":2243,"name":2243,"fn":2244,"description":2245,"org":2246,"tags":2247,"stars":32,"repoUrl":33,"updatedAt":2256},"mapbox-data-visualization-patterns","implement Mapbox data visualization patterns","Patterns for visualizing data on maps including choropleth maps, heat maps, 3D visualizations, data-driven styling, and animated data. Covers layer types, color scales, and performance optimization.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2248,2251,2252,2253],{"name":2249,"slug":2250,"type":15},"Data Visualization","data-visualization",{"name":2235,"slug":2236,"type":15},{"name":9,"slug":8,"type":15},{"name":2254,"slug":2255,"type":15},"Performance","performance","2026-04-06T18:29:02.907655",{"slug":4,"name":4,"fn":5,"description":6,"org":2258,"tags":2259,"stars":32,"repoUrl":33,"updatedAt":34},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2260,2261,2262,2263,2264,2265,2266],{"name":17,"slug":18,"type":15},{"name":27,"slug":28,"type":15},{"name":13,"slug":14,"type":15},{"name":20,"slug":21,"type":15},{"name":9,"slug":8,"type":15},{"name":23,"slug":24,"type":15},{"name":30,"slug":31,"type":15},{"slug":2268,"name":2268,"fn":2269,"description":2270,"org":2271,"tags":2272,"stars":32,"repoUrl":33,"updatedAt":2278},"mapbox-geospatial-operations","select geospatial tools for Mapbox operations","Expert guidance on choosing the right geospatial tool based on problem type, accuracy requirements, and performance needs",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2273,2274,2275],{"name":9,"slug":8,"type":15},{"name":2254,"slug":2255,"type":15},{"name":2276,"slug":2277,"type":15},"Strategy","strategy","2026-07-30T05:30:52.766227",{"slug":2280,"name":2280,"fn":2281,"description":2282,"org":2283,"tags":2284,"stars":32,"repoUrl":33,"updatedAt":2292},"mapbox-google-maps-migration","migrate from Google Maps to Mapbox","Migration guide for developers moving from Google Maps Platform to Mapbox GL JS, covering API equivalents, pattern translations, and key differences",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2285,2286,2289],{"name":9,"slug":8,"type":15},{"name":2287,"slug":2288,"type":15},"Migration","migration",{"name":2290,"slug":2291,"type":15},"Web Development","web-development","2026-04-06T18:28:56.459496",{"slug":2294,"name":2294,"fn":2295,"description":2296,"org":2297,"tags":2298,"stars":32,"repoUrl":33,"updatedAt":2305},"mapbox-ios-patterns","integrate Mapbox Maps SDK on iOS","Official integration patterns for Mapbox Maps SDK on iOS. Covers installation, adding markers, user location, custom data, styles, camera control, and featureset interactions. Based on official Mapbox documentation.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2299,2300,2301,2302],{"name":20,"slug":21,"type":15},{"name":9,"slug":8,"type":15},{"name":23,"slug":24,"type":15},{"name":2303,"slug":2304,"type":15},"Swift","swift","2026-07-30T05:30:54.75526",{"items":2307,"total":855},[2308,2314,2321,2328,2338,2344,2350,2357,2371,2384,2399,2411],{"slug":2216,"name":2216,"fn":2217,"description":2218,"org":2309,"tags":2310,"stars":32,"repoUrl":33,"updatedAt":2224},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2311,2312,2313],{"name":17,"slug":18,"type":15},{"name":9,"slug":8,"type":15},{"name":23,"slug":24,"type":15},{"slug":2226,"name":2226,"fn":2227,"description":2228,"org":2315,"tags":2316,"stars":32,"repoUrl":33,"updatedAt":2241},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2317,2318,2319,2320],{"name":2232,"slug":2233,"type":15},{"name":2235,"slug":2236,"type":15},{"name":9,"slug":8,"type":15},{"name":2239,"slug":2240,"type":15},{"slug":2243,"name":2243,"fn":2244,"description":2245,"org":2322,"tags":2323,"stars":32,"repoUrl":33,"updatedAt":2256},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2324,2325,2326,2327],{"name":2249,"slug":2250,"type":15},{"name":2235,"slug":2236,"type":15},{"name":9,"slug":8,"type":15},{"name":2254,"slug":2255,"type":15},{"slug":4,"name":4,"fn":5,"description":6,"org":2329,"tags":2330,"stars":32,"repoUrl":33,"updatedAt":34},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2331,2332,2333,2334,2335,2336,2337],{"name":17,"slug":18,"type":15},{"name":27,"slug":28,"type":15},{"name":13,"slug":14,"type":15},{"name":20,"slug":21,"type":15},{"name":9,"slug":8,"type":15},{"name":23,"slug":24,"type":15},{"name":30,"slug":31,"type":15},{"slug":2268,"name":2268,"fn":2269,"description":2270,"org":2339,"tags":2340,"stars":32,"repoUrl":33,"updatedAt":2278},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2341,2342,2343],{"name":9,"slug":8,"type":15},{"name":2254,"slug":2255,"type":15},{"name":2276,"slug":2277,"type":15},{"slug":2280,"name":2280,"fn":2281,"description":2282,"org":2345,"tags":2346,"stars":32,"repoUrl":33,"updatedAt":2292},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2347,2348,2349],{"name":9,"slug":8,"type":15},{"name":2287,"slug":2288,"type":15},{"name":2290,"slug":2291,"type":15},{"slug":2294,"name":2294,"fn":2295,"description":2296,"org":2351,"tags":2352,"stars":32,"repoUrl":33,"updatedAt":2305},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2353,2354,2355,2356],{"name":20,"slug":21,"type":15},{"name":9,"slug":8,"type":15},{"name":23,"slug":24,"type":15},{"name":2303,"slug":2304,"type":15},{"slug":2358,"name":2358,"fn":2359,"description":2360,"org":2361,"tags":2362,"stars":32,"repoUrl":33,"updatedAt":2370},"mapbox-location-grounding","generate grounded location-aware responses with Mapbox","Compose Mapbox MCP tools to produce grounded, cited location-aware responses from live data instead of training data",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2363,2366,2367],{"name":2364,"slug":2365,"type":15},"Data Quality","data-quality",{"name":9,"slug":8,"type":15},{"name":2368,"slug":2369,"type":15},"MCP","mcp","2026-04-15T05:01:44.248764",{"slug":2372,"name":2372,"fn":2373,"description":2374,"org":2375,"tags":2376,"stars":32,"repoUrl":33,"updatedAt":2383},"mapbox-maplibre-migration","migrate from MapLibre to Mapbox","Guide for migrating from MapLibre GL JS to Mapbox GL JS, covering API compatibility, token setup, style configuration, and the benefits of Mapbox's official support and ecosystem",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2377,2380,2381,2382],{"name":2378,"slug":2379,"type":15},"Engineering","engineering",{"name":9,"slug":8,"type":15},{"name":2287,"slug":2288,"type":15},{"name":2290,"slug":2291,"type":15},"2026-04-06T18:28:51.531856",{"slug":2385,"name":2385,"fn":2386,"description":2387,"org":2388,"tags":2389,"stars":32,"repoUrl":33,"updatedAt":2398},"mapbox-mcp-devkit-patterns","integrate Mapbox MCP DevKit in coding assistants","Integration patterns for Mapbox MCP DevKit Server in AI coding assistants. Covers setup, style management, token management, validation workflows, and documentation access through MCP. Use when building Mapbox applications with AI coding assistance.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2390,2393,2396,2397],{"name":2391,"slug":2392,"type":15},"Documentation","documentation",{"name":2394,"slug":2395,"type":15},"Local Development","local-development",{"name":9,"slug":8,"type":15},{"name":2368,"slug":2369,"type":15},"2026-04-06T18:28:53.790961",{"slug":2400,"name":2400,"fn":2401,"description":2402,"org":2403,"tags":2404,"stars":32,"repoUrl":33,"updatedAt":2410},"mapbox-mcp-runtime-patterns","integrate Mapbox MCP Server in AI apps","Integration patterns for Mapbox MCP Server in AI applications and agent frameworks. Covers runtime integration with pydantic-ai, mastra, LangChain, and custom agents. Use when building AI-powered applications that need geospatial capabilities.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2405,2408,2409],{"name":2406,"slug":2407,"type":15},"Architecture","architecture",{"name":9,"slug":8,"type":15},{"name":2368,"slug":2369,"type":15},"2026-04-06T18:28:55.164842",{"slug":2412,"name":2412,"fn":2413,"description":2414,"org":2415,"tags":2416,"stars":32,"repoUrl":33,"updatedAt":2424},"mapbox-search-integration","implement Mapbox search in applications","Complete workflow for implementing Mapbox search in applications - from discovery questions to production-ready integration with best practices",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2417,2420,2421],{"name":2418,"slug":2419,"type":15},"API Development","api-development",{"name":9,"slug":8,"type":15},{"name":2422,"slug":2423,"type":15},"Search","search","2026-04-06T18:28:50.264933"]