vector_map 0.7.0 copy "vector_map: ^0.7.0" to clipboard
vector_map: ^0.7.0 copied to clipboard

Vector map for Flutter. Highly customizable. Compatible with GeoJSON. Map chart. Pure Flutter.

example/lib/main.dart

import 'package:flutter/material.dart';
import 'package:flutter/services.dart' show rootBundle;
import 'package:vector_map/vector_map.dart';

void main() {
  runApp(ExampleWidget());
}

class ExampleWidget extends StatefulWidget {
  @override
  State<StatefulWidget> createState() => ExampleState();
}

class ExampleState extends State<ExampleWidget> {
  VectorMapController? _controller;
  MapDebugger debugger = MapDebugger();

  @override
  void initState() {
    super.initState();
    //String asset = 'assets/south_america.json';
    //String asset = 'assets/rooms.geojson';
    //String asset = 'assets/brazil_counties.json';
    //String asset = 'assets/polygons.json';
    //rootBundle.loadString(asset).then((geoJson) {
    _loadDataSources();
  }

  void _loadDataSources() async {
    /*
    String roomsGeoJson = await rootBundle.loadString('assets/rooms.geojson');
    MapDataSource rooms = await MapDataSource.geoJson(geoJson: roomsGeoJson);
    MapLayer roomsLayer = MapLayer(dataSource: rooms, theme: MapTheme(color: Colors.blue));

    String levelGeoJson = await rootBundle.loadString('assets/level.geojson');
    MapDataSource level = await MapDataSource.geoJson(geoJson: levelGeoJson);

    MapLayer levelLayer = MapLayer(
        dataSource: level,
        theme: MapTheme(color: Colors.black, contourColor: Colors.white));

    String workplacesGeoJson =
        await rootBundle.loadString('assets/workplaces.geojson');
    MapDataSource workplaces =
        await MapDataSource.geoJson(geoJson: workplacesGeoJson);
    MapLayer workplacesLayer = MapLayer(
        dataSource: workplaces,
        theme: MapTheme(color: Colors.white, contourColor: Colors.white));
    */
    String geoJson = await rootBundle.loadString('assets/polygons.json');
    MapDataSource ds = await MapDataSource.geoJson(geoJson: geoJson);
    MapLayer layer = MapLayer(dataSource: ds);

    setState(() {
      _controller =
          VectorMapController(layers: [layer], delayToRefreshResolution: 0);
      //_controller= VectorMapController(layers: [roomsLayer, levelLayer, workplacesLayer]);
    });
  }

  @override
  Widget build(BuildContext context) {
    Widget? content;
    if (_controller != null) {
      VectorMap map = VectorMap(
        controller: _controller,
        clickListener: (feature) => print(feature.id),
      );
      Widget buttons = SingleChildScrollView(
          child: Row(children: [
        _buildFitButton(),
        SizedBox(width: 8),
        _buildModeButton(),
        SizedBox(width: 8),
        _buildZoomInButton(),
        SizedBox(width: 8),
        _buildZoomOutButton()
      ]));

      Widget buttonsAndMap = Column(children: [
        Padding(child: buttons, padding: EdgeInsets.only(bottom: 8)),
        Expanded(child: map)
      ]);

      content = buttonsAndMap;
      /*
      content = Row(children: [
        Expanded(child: buttonsAndMap),
        SizedBox(
            child: Padding(
                child: MapDebuggerWidget(debugger),
                padding: EdgeInsets.all(16)),
            width: 200)
      ]);

       */
    } else {
      content = Center(child: Text('Loading...'));
    }

    return MaterialApp(
        debugShowCheckedModeBanner: false,
        theme: ThemeData(scaffoldBackgroundColor: Colors.blue[800]!),
        home: Scaffold(
            body: SafeArea(
                child: Padding(child: content, padding: EdgeInsets.all(8)))));
  }

  Widget _buildFitButton() {
    return ElevatedButton(child: Text('Fit'), onPressed: _onFit);
  }

  void _onFit() {
    _controller?.fit();
  }

  Widget _buildModeButton() {
    return ElevatedButton(child: Text('Change mode'), onPressed: _onMode);
  }

  void _onMode() {
    VectorMapMode mode = _controller!.mode == VectorMapMode.autoFit
        ? VectorMapMode.panAndZoom
        : VectorMapMode.autoFit;
    _controller!.mode = mode;
  }

  Widget _buildZoomInButton() {
    return ElevatedButton(child: Text('Zoom in'), onPressed: _onZoomIn);
  }

  void _onZoomIn() {
    _controller!.zoomOnCenter(true);
  }

  Widget _buildZoomOutButton() {
    return ElevatedButton(child: Text('Zoom out'), onPressed: _onZoomOut);
  }

  void _onZoomOut() {
    _controller!.zoomOnCenter(false);
  }
}
77
likes
150
points
56
downloads

Publisher

verified publishercaduandrade.net

Weekly Downloads

Vector map for Flutter. Highly customizable. Compatible with GeoJSON. Map chart. Pure Flutter.

Repository (GitHub)

Documentation

API reference

License

MIT (license)

Dependencies

flutter, meta

More

Packages that depend on vector_map