From b4e372469b73cfd9c76cf95180c0b477d7c1f377 Mon Sep 17 00:00:00 2001
From: Joscha <34318751+josxha@users.noreply.github.com>
Date: Mon, 10 Jun 2024 21:53:16 +0200
Subject: [PATCH] create version for 0.20.0
---
docs/versioned_docs/version-0.20.0/faq.md | 48 ++++++++++++
.../version-0.20.0/features/_category_.json | 8 ++
.../features/supported-features.md | 18 +++++
.../getting-started/_category_.json | 8 ++
.../getting-started/add-dependency.md | 24 ++++++
.../getting-started/setup-android.md | 72 ++++++++++++++++++
.../getting-started/setup-ios.md | 41 ++++++++++
.../getting-started/setup-web.md | 26 +++++++
.../getting-started/use-widget.md | 45 +++++++++++
.../version-0.20.0/img/first_map.jpg | Bin 0 -> 567929 bytes
docs/versioned_docs/version-0.20.0/index.md | 15 ++++
.../version-0.20.0/map-styles.md | 28 +++++++
.../version-0.20.0-sidebars.json | 8 ++
docs/versions.json | 3 +
14 files changed, 344 insertions(+)
create mode 100644 docs/versioned_docs/version-0.20.0/faq.md
create mode 100644 docs/versioned_docs/version-0.20.0/features/_category_.json
create mode 100644 docs/versioned_docs/version-0.20.0/features/supported-features.md
create mode 100644 docs/versioned_docs/version-0.20.0/getting-started/_category_.json
create mode 100644 docs/versioned_docs/version-0.20.0/getting-started/add-dependency.md
create mode 100644 docs/versioned_docs/version-0.20.0/getting-started/setup-android.md
create mode 100644 docs/versioned_docs/version-0.20.0/getting-started/setup-ios.md
create mode 100644 docs/versioned_docs/version-0.20.0/getting-started/setup-web.md
create mode 100644 docs/versioned_docs/version-0.20.0/getting-started/use-widget.md
create mode 100644 docs/versioned_docs/version-0.20.0/img/first_map.jpg
create mode 100644 docs/versioned_docs/version-0.20.0/index.md
create mode 100644 docs/versioned_docs/version-0.20.0/map-styles.md
create mode 100644 docs/versioned_sidebars/version-0.20.0-sidebars.json
create mode 100644 docs/versions.json
diff --git a/docs/versioned_docs/version-0.20.0/faq.md b/docs/versioned_docs/version-0.20.0/faq.md
new file mode 100644
index 00000000..b85578af
--- /dev/null
+++ b/docs/versioned_docs/version-0.20.0/faq.md
@@ -0,0 +1,48 @@
+---
+sidebar_position: 5
+---
+
+# FAQ
+
+### Loading .mbtiles tile files or sprites/glyphs from the assets shipped with the app
+
+One approach that has been used successfully to do that is to copy the files
+from the app's assets directory to another directory, e.g. the app's cache
+directory, and then reference that location.
+See e.g. issues https://github.com/maplibre/flutter-maplibre-gl/issues/338
+and https://github.com/maplibre/flutter-maplibre-gl/issues/318
+
+### Avoid Android UnsatisfiedLinkError
+
+Update buildTypes in `android\app\build.gradle`
+
+```gradle title="android\app\build.gradle"
+buildTypes {
+ release {
+ // other configs
+ ndk {
+ abiFilters 'armeabi-v7a','arm64-v8a','x86_64', 'x86'
+ }
+ }
+}
+```
+
+### Layer is not displayed on IOS, but no error
+
+Have a look in your `LayerProperties` object, if you supply a `lineColor`
+argument, (or any color argument) the issue might come from here.
+Android supports the following format : `'rgba(192, 192, 255, 1.0)'`, but on
+iOS, this doesn't work!
+
+You have to have the color in the following format : `#C0C0FF`
+
+### iOS crashes with error: `'NSInvalidArgumentException', reason: 'Invalid filter value: filter property must be a string'`
+
+Check if one of your expression is : `["!has", "value"]`. Android support this
+format, but iOS does not.
+You can replace your expression with : `["!",["has", "value"] ]` which works
+both in Android and iOS.
+
+Note : iOS will display the
+error : `NSPredicate: Use of 'mgl_does:have:' as an NSExpression function is forbidden`,
+but it seems like the expression still works well.
diff --git a/docs/versioned_docs/version-0.20.0/features/_category_.json b/docs/versioned_docs/version-0.20.0/features/_category_.json
new file mode 100644
index 00000000..ff54a669
--- /dev/null
+++ b/docs/versioned_docs/version-0.20.0/features/_category_.json
@@ -0,0 +1,8 @@
+{
+ "label": "Features",
+ "position": 4,
+ "link": {
+ "type": "generated-index",
+ "description": "Dive in to the features MapLibre GL for Flutter provides."
+ }
+}
diff --git a/docs/versioned_docs/version-0.20.0/features/supported-features.md b/docs/versioned_docs/version-0.20.0/features/supported-features.md
new file mode 100644
index 00000000..1fe12343
--- /dev/null
+++ b/docs/versioned_docs/version-0.20.0/features/supported-features.md
@@ -0,0 +1,18 @@
+---
+sidebar_position: 1
+---
+
+# Supported Features
+
+| Feature | Android | iOS | Web | Windows | MacOS | Linux |
+|----------------|:-------:|:---:|:---:|:-------:|:-----:|:-----:|
+| Style | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ |
+| Camera | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ |
+| Gesture | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ |
+| User Location | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ |
+| Symbol | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ |
+| Circle | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ |
+| Line | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ |
+| Fill | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ |
+| Fill Extrusion | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ |
+| Heatmap Layer | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ |
\ No newline at end of file
diff --git a/docs/versioned_docs/version-0.20.0/getting-started/_category_.json b/docs/versioned_docs/version-0.20.0/getting-started/_category_.json
new file mode 100644
index 00000000..c4012af7
--- /dev/null
+++ b/docs/versioned_docs/version-0.20.0/getting-started/_category_.json
@@ -0,0 +1,8 @@
+{
+ "label": "Getting Started",
+ "position": 2,
+ "link": {
+ "type": "generated-index",
+ "description": "Quick start guide"
+ }
+}
diff --git a/docs/versioned_docs/version-0.20.0/getting-started/add-dependency.md b/docs/versioned_docs/version-0.20.0/getting-started/add-dependency.md
new file mode 100644
index 00000000..26ab0bfc
--- /dev/null
+++ b/docs/versioned_docs/version-0.20.0/getting-started/add-dependency.md
@@ -0,0 +1,24 @@
+---
+sidebar_position: 1
+---
+
+# Add Dependency
+
+Add `maplibre_gl` to your project by running this command:
+
+```bash
+flutter pub add maplibre_gl
+```
+
+or add it directly as a dependency to your `pubspec.yaml` file and run
+`flutter pub get`:
+
+```yaml title="pubspec.yaml"
+dependencies:
+ maplibre_gl: ^0.20.0 # use the latest version found on pub.dev
+```
+
+You can find the latest version of the package on
+[pub.dev](https://pub.dev/packages/maplibre_gl) or here:
+
+[![Pub Version](https://img.shields.io/pub/v/maplibre_gl)](https://pub.dev/packages/maplibre_gl)
diff --git a/docs/versioned_docs/version-0.20.0/getting-started/setup-android.md b/docs/versioned_docs/version-0.20.0/getting-started/setup-android.md
new file mode 100644
index 00000000..75cd4265
--- /dev/null
+++ b/docs/versioned_docs/version-0.20.0/getting-started/setup-android.md
@@ -0,0 +1,72 @@
+---
+sidebar_position: 3
+---
+
+# Setup Android
+
+## Use a compatible Kotlin version
+
+Ensure that you are using Kotlin version
+**1.9.0** or newer. You can check the most recent Kotlin version on
+[kotlinlang.org](https://kotlinlang.org/docs/releases.html#release-details).
+
+#### (new) Gradle with a declarative plugins block
+
+Open `android/settings.gradle` and set the Kotlin version like this:
+
+```gradle title="android/settings.gradle"
+plugins {
+ // ...
+ id "org.jetbrains.kotlin.android" version "1.9.0" apply false
+}
+```
+
+In case you can't find the `plugins {}` block your app still uses the old apply
+script method.
+
+#### (old) In a legacy apply script gradle file:
+
+Open `android/app/build.gradle` and set the Kotlin version like this:
+
+```gradle title="android/app/build.gradle"
+buildscript {
+ ext.kotlin_version = '1.9.0'
+ // ...
+}
+```
+
+## Minimum SDK version
+
+If you are using a flutter version below 3.22, you need to set the minimum SDK
+version to 21 or higher in `android/app/build.gradle`.
+
+```gradle title="android/app/build.gradle"
+ defaultConfig {
+ minSdk = 21 // previously flutter.minSdkVersion
+ // ...
+ }
+```
+
+If you are using the old apply script method in gradle, `minSdk` is named
+`minSdkVersion`.
+
+Starting from flutter 3.22, the minimum SDK version is set to 21 by default
+and you can keep `flutter.minSdkVersion`.
+
+## Use the location feature
+
+If you want to show the user's location on the map you need to add
+the `ACCESS_COARSE_LOCATION` or `ACCESS_FINE_LOCATION` permission in the
+application manifest `android/app/src/main/AndroidManifest.xml`.
+
+```xml title="android/app/src/main/AndroidManifest.xml"
+
+
+
+
+
+```
+
+Starting from Android API level 23 you also need to request it at runtime. This
+plugin does not handle this for you. Our example app uses the
+[flutter plugin "location"](https://pub.dev/packages/location) for this.
diff --git a/docs/versioned_docs/version-0.20.0/getting-started/setup-ios.md b/docs/versioned_docs/version-0.20.0/getting-started/setup-ios.md
new file mode 100644
index 00000000..dc14f3ce
--- /dev/null
+++ b/docs/versioned_docs/version-0.20.0/getting-started/setup-ios.md
@@ -0,0 +1,41 @@
+---
+sidebar_position: 2
+---
+
+# Setup iOS
+
+There is no longer any specific setup needed to include the package on iOS.
+
+## Use the location feature
+
+If you access your users' location, you should also add the following key
+to `ios/Runner/Info.plist` to explain why you need access to their location
+data:
+
+```xml title="ios/Runner/Info.plist"
+
+ NSLocationWhenInUseUsageDescription
+ [Your explanation here]
+
+```
+
+A possible explanation could be: "Shows your location on the map".
+
+## Upgrading from a previous version
+
+Previous versions of the package required you to add the following lines to
+your `ios/Podfile`. You'll have to remove these lines from your `ios/Podfile`
+or your project won't build.
+
+
+View obsolete code
+
+```ruby title="ios/Podfile"
+source 'https://cdn.cocoapods.org/'
+source 'https://github.com/m0nac0/flutter-maplibre-podspecs.git'
+
+pod 'MapLibre'
+pod 'MapLibreAnnotationExtension'
+```
+
+
diff --git a/docs/versioned_docs/version-0.20.0/getting-started/setup-web.md b/docs/versioned_docs/version-0.20.0/getting-started/setup-web.md
new file mode 100644
index 00000000..141c0849
--- /dev/null
+++ b/docs/versioned_docs/version-0.20.0/getting-started/setup-web.md
@@ -0,0 +1,26 @@
+---
+sidebar_position: 4
+---
+
+# Setup Web
+
+Include the following JavaScript and CSS files in the `
` tag of
+your `web/index.html` file:
+
+```html title="web/index.html"
+
+
+
+
+
+
+
+
+
+
+```
+
+`^4.3` ensures that your app will always use the latest version of
+[maplibre-gl-js](https://github.com/maplibre/maplibre-gl-js) v4 but not suddenly
+use an incompatible version.
\ No newline at end of file
diff --git a/docs/versioned_docs/version-0.20.0/getting-started/use-widget.md b/docs/versioned_docs/version-0.20.0/getting-started/use-widget.md
new file mode 100644
index 00000000..47daf2c1
--- /dev/null
+++ b/docs/versioned_docs/version-0.20.0/getting-started/use-widget.md
@@ -0,0 +1,45 @@
+---
+sidebar_position: 4
+---
+
+# Display your first map
+
+Import the maplibre_gl package and use the `MapLibreMap` widget to display a
+map.
+
+```dart
+import 'package:flutter/material.dart';
+import 'package:maplibre_gl/maplibre_gl.dart';
+
+class MapScreen extends StatefulWidget {
+ const MapScreen({super.key});
+
+ @override
+ State createState() => FullMapState();
+}
+
+class MapScreenState extends State {
+ MapLibreMapController? _mapController;
+
+ @override
+ Widget build(BuildContext context) {
+ return Scaffold(
+ body: MapLibreMap(
+ onMapCreated: (controller) {
+ // Don't add additional annotations here,
+ // wait for the onStyleLoadedCallback.
+ _mapController = controller;
+ },
+ initialCameraPosition: const CameraPosition(target: LatLng(0.0, 0.0)),
+ onStyleLoadedCallback: () {
+ debugPrint('Map loaded 😎');
+ },
+ ),
+ );
+ }
+}
+```
+
+The result should look something like this:
+
+![First map](../img/first_map.jpg)
\ No newline at end of file
diff --git a/docs/versioned_docs/version-0.20.0/img/first_map.jpg b/docs/versioned_docs/version-0.20.0/img/first_map.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..d66c322185fbff43894b92cad62f3d46cb75a125
GIT binary patch
literal 567929
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