flutter_map_tile_downloader 0.0.8 copy "flutter_map_tile_downloader: ^0.0.8" to clipboard
flutter_map_tile_downloader: ^0.0.8 copied to clipboard

Tile download by drag draw area. Features Area selection by drag draw, Download multiple zoom levels, Show download progress, Download completed event, Custom Texts)

example/lib/main.dart

import 'package:flutter/material.dart';
import 'dart:async';

import 'package:flutter/services.dart';
import 'package:flutter_map/flutter_map.dart';
import 'package:flutter_map_tile_downloader/flutter_map_tile_downloader.dart';


import 'package:latlong/latlong.dart';

void main() => runApp(MyApp());

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {

  bool _tileSelecting = false;
  bool _offline = false;

  OfflineTile _off_line_tile = OfflineTile(
      minZoom:0,
      maxZoom:0,
      urlTemplate:"",
  );

  @override
  void initState()  {
    super.initState();
    getOfflineTile();
  }
  void getOfflineTile() async {

        OfflineTile off_line_tile =  await getOfflineTileData();
        setState(() {
          _off_line_tile = off_line_tile;
        });

  }
  void startTileSelect(bool value) async {
    setState(() {
      _tileSelecting = value;
    });

  }
  void onCompleted() async {

    getOfflineTile();
    setState(() {
      _tileSelecting : false;
    });
  }

  void showOffline() async {
      setState(() {
        _offline = !_offline;
      });
  }

  @override
  Widget build(BuildContext context)  {


    List<LayerOptions> layers = [];

    if (_offline && _off_line_tile.urlTemplate != null) {
      layers.add(
          TileLayerOptions(
            tileProvider: FileTileProvider(),
            maxZoom: _off_line_tile.maxZoom,
            urlTemplate: _off_line_tile.urlTemplate,
          )
      );
    } else {
      layers.add(
      TileLayerOptions(
        urlTemplate: 'http://{s}.google.com/vt/lyrs=m&x={x}&y={y}&z={z}',
        subdomains: ['mt0', 'mt1', 'mt2', 'mt3'],
        tileProvider: CachedNetworkTileProvider(),
      )
      );
    }

    if(_tileSelecting){
      layers.add(
          TileDownloadLayerOptions(
            onComplete: onCompleted,
            urlTemplate: 'http://{s}.google.com/vt/lyrs=m&x={x}&y={y}&z={z}',
            subdomains: ['mt0', 'mt1', 'mt2', 'mt3'],
            minZoom: 8,
            maxZoom: 12,
            downloadTxt: "Download",
            selectZoomLevelTxt: "Please select zoom levels"
          )
      );
    }

    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('Tile downloader exmample')),
        body: Padding(
          padding: EdgeInsets.all(8.0),
          child: Stack(
            children: [
              FlutterMap(
                options: MapOptions(
                  center: LatLng(32.91081899999999, -92.734876),
                  zoom: 8.0,
                  minZoom: _offline && _off_line_tile.urlTemplate != null ? _off_line_tile.minZoom : 0,
                  maxZoom: _offline && _off_line_tile.urlTemplate != null ? _off_line_tile.maxZoom :18,
                  plugins: [
                    TileDownloaderPlugin()
                  ],
                ),
                layers: layers,
              ),
              Positioned(
                  bottom: 65,
                  right: 10,
                  child: RaisedButton(
                      onPressed: () {
                        startTileSelect(!_tileSelecting);
                      },

                      child: _tileSelecting
                          ? Text("Stop tile download")
                          : Text("Tile download")
                  )),
              Visibility(
                child: Positioned(
                    bottom: 120,
                    right: 10,
                    child: RaisedButton(
                      onPressed: (_off_line_tile.urlTemplate != null)
                          ? () {
                        showOffline();
                      }
                          : null,

                      child: _offline
                          ? Text("Show online tile")
                          : Text("Show offine tile" ),
                    )),
                visible: (_off_line_tile.urlTemplate != null),
              )
            ],
          ),
        ),
      ),
    );
  }
}
copied to clipboard
7
likes
30
points
51
downloads

Publisher

unverified uploader

Weekly Downloads

2024.09.30 - 2025.04.14

Tile download by drag draw area. Features Area selection by drag draw, Download multiple zoom levels, Show download progress, Download completed event, Custom Texts)

Repository (GitHub)
View/report issues

License

unknown (license)

Dependencies

dio, flutter, flutter_map, flutter_range_slider, path_provider, percent_indicator, permission_handler, shared_preferences

More

Packages that depend on flutter_map_tile_downloader