flutter_map_plugins icon indicating copy to clipboard operation
flutter_map_plugins copied to clipboard

[BUG] pmtiles Invalid argument(s): `wmsOptions` or `urlTemplate`

Open jesussmile opened this issue 11 months ago • 1 comments

Package

flutter_map_pmtiles

Bug Description

pmtiles has stopped working in flutter map v7 for some reason. I get this error now. Not exactly sure what to add in wmsOptions or urlTemplate. There is a buffer overflow of some sort and my vscode will start to freeze.

[ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: Invalid argument(s): `wmsOptions` or `urlTemplate` must be provided to generate a tile URL
E/flutter (24312): #0      TileProvider.getTileUrl (package:flutter_map/src/layer/tile_layer/tile_provider/base_tile_provider.dart:231:14)
E/flutter (24312): #1      NetworkTileProvider.getImage (package:flutter_map/src/layer/tile_layer/tile_provider/network_tile_provider.dart:62:14)
E/flutter (24312): #2      _TileLayerState._createTileImage (package:flutter_map/src/layer/tile_layer/tile_layer.dart:554:31)
E/flutter (24312): #3      _TileLayerState._loadTiles.<anonymous closure> (package:flutter_map/src/layer/tile_layer/tile_layer.dart:643:36)
E/flutter (24312): #4      TileImageManager.createMissingTiles (package:flutter_map/src/layer/tile_layer/tile_image_manager.dart:58:54)
E/flutter (24312): #5      _TileLayerState._loadTiles (package:flutter_map/src/layer/tile_layer/tile_layer.dart:640:43)
E/flutter (24312): #6      _TileLayerState._onTileUpdateEvent (package:flutter_map/src/layer/tile_layer/tile_layer.dart:585:7)
E/flutter (24312): #7      _RootZone.runUnaryGuarded (dart:async/zone.dart:1594:10)
E/flutter (24312): #8      _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:365:11)

Steps to Reproduce

  1. Create pmtiles
  2. load it from the assets folder to the app directory
  3. use it in TileLayer under FlutterMap

Expected Results

Ofcourse to show pmtiles :)

Actual Results

getting the error as shown above

Code Sample


  PmTilesTileProvider? _pmTilesTileProvider;

  //MARK: INIT STATE
  @override
  void initState() {
    print('MainScreen initState');
    super.initState();


      _loadPmTiles();
     
  }

  //*MARK: LOAD PMTILES
  Future<void> _loadPmTiles() async {
    // Copy the PMTiles file from assets to a temporary directory
    final ByteData data = await rootBundle.load("assets/terrain.pmtiles");
    final Uint8List bytes = data.buffer.asUint8List();

    final tempDir = await getTemporaryDirectory();
    final tempFile = File('${tempDir.path}/terrain.pmtiles');
    await tempFile.writeAsBytes(bytes);
    print('tempFile.path ${tempFile.path}');

    // Use the PmTilesTileProvider.fromSource method to load the PMTiles archive
    final provider = await PmTilesTileProvider.fromSource(tempFile.path);
    setState(() {
      _pmTilesTileProvider = provider;
    });
  }

// add it in flutter_map down the line as Tilelayer

 TileLayer(
    // minZoom: 0,
    // maxZoom: 3,
    tileProvider: _pmTilesTileProvider,
    urlTemplate: null,
    wmsOptions: null,
    // urlTemplate: null,
  ),

Platforms

all

jesussmile avatar Nov 17 '24 23:11 jesussmile