flutter_map icon indicating copy to clipboard operation
flutter_map copied to clipboard

[BUG] `{d}` `urlTemplate` placeholder improperly converted to string on non-web platforms

Open geoextra opened this issue 1 year ago • 3 comments

What is the bug?

When using the {d} in the urlTemplate (introduced in #1665) it defaults to a float value which gets converted to string (e.g. 256.0). This is obviously not supported by many tile providers.

How can we reproduce it?

Use the following option: urlTemplate: 'https://api.mapbox.com/styles/v1/mapbox/streets-v12/tiles/{d}/{z}/{x}/{y}{r}?access_token=$mapboxPublicToken'. The tile server will respond with 422 status codes. Problem doesn't occur on web due to differences in types and therefore toString().

Do you have a potential solution?

I don't see why the resolution needs to be a double, maybe it can be changed to an integer type.

Platforms

Android 14

Severity

Erroneous: Prevents normal functioning and causes errors in the console

geoextra avatar Jul 23 '24 00:07 geoextra

Hey @geoextra, can you confirm if you mean the {d} placeholder instead? {r} is for retina mode.

(If you want to use x512 tiles, you can set tileSize: 512, use 512 or {d} (when fixed) in the URL, and set zoomOffset: -1.)

JaffaKetchup avatar Jul 25 '24 10:07 JaffaKetchup

Yes, of course, I edited the title, thanks.

geoextra avatar Jul 26 '24 11:07 geoextra

I'm not sure why we accept decimals for the tile size, that really doesn't make sense.

A less intrusive short term fix is to just assume the number is an integer before converting it (which it should be), otherwise fall back to this behaviour.

We'll discuss internally which is best. Thanks for the report!

JaffaKetchup avatar Aug 02 '24 21:08 JaffaKetchup