alfa_vector_mbtiles 0.0.6 copy "alfa_vector_mbtiles: ^0.0.6" to clipboard
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.

example/lib/main.dart

// `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';
2
likes
150
points
200
downloads
screenshot

Documentation

Documentation
API reference

Publisher

unverified uploader

Weekly Downloads

Offline Mapbox Vector Tiles for flutter_map: a VectorTileProvider that reads gzipped MVT tiles from a local .mbtiles SQLite file. No network required.

Repository (GitHub)
View/report issues

Topics

#mbtiles #flutter-map #vector-tiles #offline-maps #maps

License

MIT (license)

Dependencies

flutter, flutter_map, latlong2, path, sqflite, vector_map_tiles

More

Packages that depend on alfa_vector_mbtiles