coffee_mapbox 0.1.0+1
coffee_mapbox: ^0.1.0+1 copied to clipboard
Mapbox views + offline tiles + tracking, as a Flutter plugin.
Coffee Mapbox — Flutter Plugin Integration Guide #
This guide explains how to integrate the Coffee Mapbox Flutter plugin, including Mapbox access token setup, location permissions, and initial configuration for both Android and iOS platforms.
Table of Contents #
Table of Contents #
1) Installation #
Add coffee_mapbox to your pubspec.yaml dependencies:
dependencies:
coffee_mapbox: ^1.0.0
Then run:
flutter pub get
2) Android Setup #
2.1) Add Mapbox Access Token #
- Open
android/app/src/main/res/values/strings.xml. - Add your Mapbox token:
<resources>
<string name="mapbox_access_token">YOUR_MAPBOX_ACCESS_TOKEN_HERE</string>
</resources>
⚠️ Replace
YOUR_MAPBOX_ACCESS_TOKEN_HEREwith your actual Mapbox token.
2.2) Configure gradle.properties #
Add your token to gradle.properties for Gradle/Maven access:
MAPBOX_DOWNLOADS_TOKEN=YOUR_MAPBOX_ACCESS_TOKEN_HERE
This ensures Gradle can download Mapbox SDK artifacts securely during the build.
2.3) Configure Project-level Gradle (android/build.gradle) #
Inside the allprojects { repositories { ... } } section, add the Mapbox Maven repository:
allprojects {
repositories {
google()
mavenCentral()
maven { url 'https://storage.flutter-io.cn/download.flutter.io' }
// Mapbox SDK repository
maven {
url = uri("https://api.mapbox.com/downloads/v2/releases/maven")
credentials {
username = "mapbox"
password = project.findProperty("MAPBOX_DOWNLOADS_TOKEN") ?: ""
}
authentication {
basic(BasicAuthentication)
}
}
}
}
3) iOS Setup #
3.1) Platform Version #
In your ios/Podfile, ensure the platform is at least 13.0:
platform :ios, '13.0'
3.2) Add Mapbox Access Token #
Add your Mapbox token to Info.plist:
<key>MBXAccessToken</key>
<string>YOUR_MAPBOX_ACCESS_TOKEN_HERE</string>
⚠️ Replace the string value with your own Mapbox token.
After updating Info.plist, run:
cd ios
pod install
3.3) Add Location Permissions #
Update Info.plist with these keys:
<key>NSLocationWhenInUseUsageDescription</key>
<string>We need your location to show it on the map</string>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>We need your location for navigation and tracking even in the background</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>We need your location for background updates</string>
These keys are required for iOS to prompt the user for location permissions.
4) Build & Run #
From the root of your Flutter project:
flutter clean
flutter pub get
cd ios
pod install
cd ..
flutter run -v
5) Flutter Map Integration & Controller Methods #
5.1) Using CoffeeMapboxView #
Add a map widget to your Flutter widget tree:
final controller = CoffeeMapboxController(
onMapReady: () => print('Map is ready'),
onMarkerTap: (id) => print('Marker tapped: $id'),
);
CoffeeMapboxView(
controller: controller,
options: CoffeeMapboxMapOptions(
initialCenter: [37.7749, -122.4194],
initialZoom: 12,
),
);
⚠️ The
controllermust be attached automatically to the platform view. On iOS and Android, theviewIdis set internally and wired to theMethodChannelfor communication.
5.2) Controller Methods Overview #
After creating the CoffeeMapboxController, you can manipulate the map:
- Attach to Platform View
controller.attachToView(viewId); // Usually handled automatically
- Map Style
await controller.setStyle('mapbox://styles/mapbox/satellite-v9');
- Markers
await controller.setMarkers([marker1, marker2]);
await controller.removeMarkers(['marker1']);
- Polylines
await controller.setPolylines([polyline1, polyline2]);
await controller.removePolylines(['polyline1']);
- Polygons
await controller.setPolygons([polygon1, polygon2]);
await controller.removePolygons(['polygon1']);
- Camera Control
await controller.setCameraToBounds([point1, point2], padding: 80.0);
await controller.centerOnUserPuck(zoom: 14);
- Dispose Map View
await controller.disposeView();
5.3) Notes #
- Each platform view has a unique
viewIdthat is automatically assigned and used internally for communication between Flutter and native. - All native map interactions go through the
MethodChannelattached to theviewId. - This setup allows multiple map instances in a single Flutter app (iOS & Android).
6) Offline Tile Management #
6.1 Creating the Manager
final tileManager = CoffeeMapboxTileRegionManager();
6.2 Listening for Download Status
tileManager.addListener((response) {
print('Region ${response.id} status: ${response.status}');
});
6.3 Downloading a Tile Region
await tileManager.downloadTileRegion(points, padding: 0.001, id: 'myRegionId');
6.4 Cancelling a Download
await tileManager.cancelCurrentDownload();
6.5 Deleting a Downloaded Region
await tileManager.deleteTileRegion('myRegionId');
6.6 Listing All Downloaded Regions
final regions = await tileManager.getDownloadedTileRegions();
for (var region in regions) {
print('Downloaded region: ${region.id}');
}