alfa_vector_mbtiles 0.0.6
alfa_vector_mbtiles: ^0.0.6 copied to clipboard
Offline Mapbox Vector Tiles for flutter_map: a VectorTileProvider that reads gzipped MVT tiles from a local .mbtiles SQLite file. No network required.
// `Theme` is hidden from material because `vector_tile_renderer` also exports a
// `Theme` (the map render theme), which is the one we use here.
import 'package:flutter/material.dart' hide Theme;
import 'package:flutter_map/flutter_map.dart';
import 'package:latlong2/latlong.dart';
import 'package:vector_map_tiles/vector_map_tiles.dart';
import 'package:vector_tile_renderer/vector_tile_renderer.dart';
import 'package:alfa_vector_mbtiles/alfa_vector_mbtiles.dart';
import 'osm_bright_ja_style.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'alfa_vector_mbtiles example',
theme: ThemeData(primarySwatch: Colors.blue),
home: const MyHomePage(title: 'alfa_vector_mbtiles example'),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({Key? key, required this.title}) : super(key: key);
final String title;
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
final MapController _mapController = MapController();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text(widget.title)),
body: FlutterMap(
mapController: _mapController,
// flutter_map v4 API: `center`/`zoom` (renamed in v6+).
options: MapOptions(
center: LatLng(35.68132332775388, 139.76712479771956), // Tokyo
zoom: 15,
maxZoom: 18,
),
children: [
VectorTileLayer(
key: const Key('offlineVectorTileLayer'),
theme: _mapTheme(context),
tileProviders: TileProviders({
'openmaptiles': _cachingTileProvider(_basemapPath()),
}),
),
],
),
);
}
}
/// Wraps the offline MBTiles provider in an in-memory cache so decoded tiles
/// are not re-read from SQLite on every frame.
VectorTileProvider _cachingTileProvider(String mbtilesPath) {
return MemoryCacheVectorTileProvider(
delegate: AlfaVectorMBTilesProvider(
mbtilesPath: mbtilesPath,
// Max zoom *stored in the file*, not the map's max zoom. The renderer
// over-zooms past this automatically.
maximumZoom: 14,
),
maxSizeBytes: 1024 * 1024 * 2,
);
}
/// Maps are rendered using a `vector_tile_renderer` Theme. To provide a dark
/// theme, branch on `MediaQuery.of(context).platformBrightness` here.
Theme _mapTheme(BuildContext context) {
return OSMBrightTheme.osmBrightJaTheme();
}
extension OSMBrightTheme on ProvidedThemes {
static Theme osmBrightJaTheme({Logger? logger}) =>
ThemeReader(logger: logger).read(osmBrightJaStyle());
}
/// The sample basemap bundled with this example (declared under
/// `flutter: assets:` in pubspec.yaml).
String _basemapPath() => 'assets/example.mbtiles';