From 5e95c7a256a157124491c407d2f0a97cfe8fceb0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Apitzsch?= Date: Fri, 3 Jul 2026 16:17:29 +0200 Subject: [PATCH 1/7] Update dependencies --- pubspec.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pubspec.yaml b/pubspec.yaml index 63200c05..01203517 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -14,7 +14,7 @@ environment: # The Flutter version is read in different build scripts and is used to setup the appropriate flutter toolkit. # The build processes cannot handle range notations like >=2.17.1 <3.0.0 or ^3.7.0. # Therefore it is important to always specify a fixed flutter version in that format: [0-9]+.[0-9]+.[0-9]+ - flutter: 3.35.7 + flutter: 3.44.4 dependencies: flutter: @@ -50,10 +50,10 @@ dependencies: collection: ^1.17.0 dio: ^5.1.0 shared_preferences: ^2.0.20 - flutter_secure_storage: ^9.0.0 + flutter_secure_storage: ^10.3.1 url_launcher: ^6.0.17 - flutter_web_auth_2: ^4.1.0 - flutter_material_design_icons: ^1.1.7296 + flutter_web_auth_2: ^5.0.2 + flutter_material_design_icons: ^3.0.0+7447 flutter_markdown_plus: ^1.0.5 flutter_mvvm_architecture: git: From dd7f8083365d635d401ee34b497ee08cd91d7c11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Apitzsch?= Date: Thu, 2 Jul 2026 16:34:31 +0200 Subject: [PATCH 2/7] Migrate to built-in Kotlin See: https://docs.flutter.dev/release/breaking-changes/migrate-to-built-in-kotlin/for-app-developers --- android/app/build.gradle.kts | 20 ++++++++++--------- android/gradle.properties | 3 ++- .../gradle/wrapper/gradle-wrapper.properties | 2 +- android/settings.gradle.kts | 4 ++-- 4 files changed, 16 insertions(+), 13 deletions(-) diff --git a/android/app/build.gradle.kts b/android/app/build.gradle.kts index f66676a7..6270a3a1 100644 --- a/android/app/build.gradle.kts +++ b/android/app/build.gradle.kts @@ -1,6 +1,5 @@ plugins { id("com.android.application") - id("kotlin-android") id("dev.flutter.flutter-gradle-plugin") } @@ -27,17 +26,14 @@ if (keystorePropertiesFile.exists()) { android { namespace = "de.tu_chemnitz.etit.sse.openstop" - compileSdk = 36 + compileSdk = 37 // Momentary fix. Alternatively the following line can also be commented out. See: https://github.com/flutter/flutter/issues/139427 - ndkVersion = "27.0.12077973" + ndkVersion = "28.2.13676358" + //ndkVersion = flutter.ndkVersion compileOptions { - sourceCompatibility = JavaVersion.VERSION_11 - targetCompatibility = JavaVersion.VERSION_11 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_11.toString() + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 } sourceSets["main"].java.srcDirs("src/main/kotlin") @@ -74,6 +70,12 @@ android { } } +kotlin { + compilerOptions { + jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17 + } +} + flutter { source = "../.." } diff --git a/android/gradle.properties b/android/gradle.properties index f018a618..204862a6 100644 --- a/android/gradle.properties +++ b/android/gradle.properties @@ -1,3 +1,4 @@ org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true -android.enableJetifier=true +android.newDsl=false +android.builtInKotlin=false diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties index ac3b4792..2d428bfb 100644 --- a/android/gradle/wrapper/gradle-wrapper.properties +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.1.0-all.zip diff --git a/android/settings.gradle.kts b/android/settings.gradle.kts index ee9e1856..61a94618 100644 --- a/android/settings.gradle.kts +++ b/android/settings.gradle.kts @@ -19,8 +19,8 @@ pluginManagement { plugins { id("dev.flutter.flutter-plugin-loader") version "1.0.0" - id("com.android.application") version "8.9.1" apply false - id("org.jetbrains.kotlin.android") version "2.1.0" apply false + id("com.android.application") version "9.0.1" apply false + id("org.jetbrains.kotlin.android") version "2.3.20" apply false } include(":app") \ No newline at end of file From 7733a2b673156b97c6297b47324c90664514103e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Apitzsch?= Date: Fri, 3 Jul 2026 16:04:51 +0200 Subject: [PATCH 3/7] Adapt iOS project files to new Flutter version Changes were done automatically during the first compilation for iOS --- ios/Flutter/AppFrameworkInfo.plist | 2 -- ios/Runner.xcodeproj/project.pbxproj | 22 +++++++++++++++++++ .../xcshareddata/xcschemes/Runner.xcscheme | 18 +++++++++++++++ 3 files changed, 40 insertions(+), 2 deletions(-) diff --git a/ios/Flutter/AppFrameworkInfo.plist b/ios/Flutter/AppFrameworkInfo.plist index 1dc6cf76..391a902b 100644 --- a/ios/Flutter/AppFrameworkInfo.plist +++ b/ios/Flutter/AppFrameworkInfo.plist @@ -20,7 +20,5 @@ ???? CFBundleVersion 1.0 - MinimumOSVersion - 13.0 diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index 025cbdc0..6e77c350 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -15,6 +15,7 @@ 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */ = {isa = PBXBuildFile; productRef = 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */; }; /* End PBXBuildFile section */ /* Begin PBXCopyFilesBuildPhase section */ @@ -50,6 +51,7 @@ 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; C0C3EFFB315866C9D5691CD7 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; E92325C28327D7C47838E558 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -57,6 +59,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */, 89C6123D110CC5300270504C /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; @@ -75,6 +78,7 @@ 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( + 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */, 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, 9740EEB21CF90195004384FC /* Debug.xcconfig */, 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, @@ -133,6 +137,9 @@ /* Begin PBXNativeTarget section */ 97C146ED1CF9000F007C117D /* Runner */ = { + packageProductDependencies = ( + 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */, + ); isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( @@ -158,6 +165,9 @@ /* Begin PBXProject section */ 97C146E61CF9000F007C117D /* Project object */ = { + packageReferences = ( + 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage" */, + ); isa = PBXProject; attributes = { LastUpgradeCheck = 1510; @@ -590,6 +600,18 @@ defaultConfigurationName = Release; }; /* End XCConfigurationList section */ +/* Begin XCLocalSwiftPackageReference section */ + 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage" */ = { + isa = XCLocalSwiftPackageReference; + relativePath = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; + }; +/* End XCLocalSwiftPackageReference section */ +/* Begin XCSwiftPackageProductDependency section */ + 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */ = { + isa = XCSwiftPackageProductDependency; + productName = FlutterGeneratedPluginSwiftPackage; + }; +/* End XCSwiftPackageProductDependency section */ }; rootObject = 97C146E61CF9000F007C117D /* Project object */; } diff --git a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index 9c12df59..5db441f5 100644 --- a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -5,6 +5,24 @@ + + + + + + + + + + Date: Fri, 3 Jul 2026 15:17:29 +0200 Subject: [PATCH 4/7] Keep up with the latest for web deployment Just some cleaning up. This doesn't change anything. --- web/index.html | 33 ++++++++++++--------------------- 1 file changed, 12 insertions(+), 21 deletions(-) diff --git a/web/index.html b/web/index.html index 08eb1532..7e147218 100644 --- a/web/index.html +++ b/web/index.html @@ -21,35 +21,26 @@ - + + + OpenStop - - - - + + From face3af3e132d0b86c6a190fdbb878332fbe08c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Apitzsch?= Date: Thu, 2 Jul 2026 15:10:03 +0200 Subject: [PATCH 5/7] Fix deprecation warnings Adds a prefix in lib/view_models/home_view_model.dart because the View Model already uses the class "View". --- lib/api/osm_authentication_api.dart | 1 - lib/view_models/home_view_model.dart | 9 ++++++--- lib/widgets/question_dialog/question_text_header.dart | 2 +- lib/widgets/question_inputs/list_input.dart | 2 +- 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/lib/api/osm_authentication_api.dart b/lib/api/osm_authentication_api.dart index 988ea972..1c6dfcdb 100644 --- a/lib/api/osm_authentication_api.dart +++ b/lib/api/osm_authentication_api.dart @@ -47,7 +47,6 @@ class OSMAuthenticationAPI { callbackUrlScheme: kAppCallbackUrlScheme, options: const FlutterWebAuth2Options( preferEphemeral: true, - intentFlags: ephemeralIntentFlags, httpsHost: kAppCallbackUrlHost, httpsPath: kAppCallbackUrlPath, ), diff --git a/lib/view_models/home_view_model.dart b/lib/view_models/home_view_model.dart index 3606c9ad..dbf120e1 100644 --- a/lib/view_models/home_view_model.dart +++ b/lib/view_models/home_view_model.dart @@ -6,7 +6,8 @@ import 'package:animated_location_indicator/animated_location_indicator.dart'; import 'package:collection/collection.dart'; import 'package:dio/dio.dart'; import 'package:flutter/semantics.dart'; -import 'package:flutter/widgets.dart' hide Action, ProxyElement, Notification; +import 'package:flutter/widgets.dart' hide Action, ProxyElement, Notification, View; +import 'package:flutter/widgets.dart' as widgets show View; import 'package:flutter_map/flutter_map.dart'; import 'package:flutter_map_cache/flutter_map_cache.dart'; import 'package:flutter_mvvm_architecture/base.dart'; @@ -375,7 +376,8 @@ class HomeViewModel extends ViewModel _appWorker.openQuestionnaire(element); runInAction(() => _selectedElement.value = element); // semantic notification - SemanticsService.announce( + SemanticsService.sendAnnouncement( + widgets.View.of(context), appLocale.semanticsOpenQuestionnaireAnnounce, Directionality.of(context), ); @@ -392,7 +394,8 @@ class HomeViewModel extends ViewModel // deselect element runInAction(() => _selectedElement.value = null); // semantic notification - SemanticsService.announce( + SemanticsService.sendAnnouncement( + widgets.View.of(context), appLocale.semanticsCloseQuestionnaireAnnounce, Directionality.of(context), ); diff --git a/lib/widgets/question_dialog/question_text_header.dart b/lib/widgets/question_dialog/question_text_header.dart index 3f5d73b3..43ebbfba 100644 --- a/lib/widgets/question_dialog/question_text_header.dart +++ b/lib/widgets/question_dialog/question_text_header.dart @@ -161,7 +161,7 @@ class _QuestionTextHeaderState extends State if (hasAdditionalInfo) ExcludeSemantics( child: SizeTransition( - axisAlignment: -1, + alignment: AlignmentDirectional.centerStart, sizeFactor: _sizeAnimation, child: FadeTransition( opacity: _fadeAnimation, diff --git a/lib/widgets/question_inputs/list_input.dart b/lib/widgets/question_inputs/list_input.dart index c55ee7bb..95ba380a 100644 --- a/lib/widgets/question_inputs/list_input.dart +++ b/lib/widgets/question_inputs/list_input.dart @@ -138,7 +138,7 @@ class _ListInputItemState extends State with SingleTickerProvider if (widget.description != null) ExcludeSemantics( child: SizeTransition( - axisAlignment: -1, + alignment: AlignmentDirectional.centerStart, sizeFactor: _animation, child: FadeTransition( opacity: _animation, From 9aa1d7fb85f4dab954af7c01fd9a4586ab5d70d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Apitzsch?= Date: Thu, 2 Jul 2026 15:16:14 +0200 Subject: [PATCH 6/7] Fix invalid assignment --- lib/models/questionnaire.dart | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/models/questionnaire.dart b/lib/models/questionnaire.dart index 3ca2f244..bffcb395 100644 --- a/lib/models/questionnaire.dart +++ b/lib/models/questionnaire.dart @@ -172,8 +172,8 @@ class QuestionnaireEntry { QuestionnaireEntry copyWith({QuestionDefinition? question, T? answer}) { return QuestionnaireEntry( - question = question ?? this.question, - answer = answer ?? this.answer, + question ?? this.question, + answer ?? this.answer, ); } From 7b7b0d6eb32dcf712d8d0e3bde0016109f3f53c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Apitzsch?= Date: Fri, 3 Jul 2026 15:55:55 +0200 Subject: [PATCH 7/7] Fix minor typos --- .github/workflows/build_app.yml | 6 +++--- docs/BUILD.md | 4 ++-- docs/QUESTION_CATALOG.md | 16 ++++++++-------- docs/WORKING_PRINCIPLE.md | 4 ++-- pubspec.yaml | 4 ++-- 5 files changed, 17 insertions(+), 17 deletions(-) diff --git a/.github/workflows/build_app.yml b/.github/workflows/build_app.yml index 3006457f..f0a1ea32 100644 --- a/.github/workflows/build_app.yml +++ b/.github/workflows/build_app.yml @@ -84,7 +84,7 @@ jobs: --dart-define=THUNDERFOREST_API_KEY=${{ secrets.THUNDERFOREST_API_KEY }} --dart-define=IS_RELEASE=true - # Required because F-Droid signs its apk with apksigner which produces a slightly different output than gradle signingConfig + # Required because F-Droid signs its apk with apksigner which produces a slightly different output than Gradle signingConfig # see: https://f-droid.org/docs/Reproducible_Builds/#reproducible-signatures - name: Sign with apksigner run: >- @@ -231,8 +231,8 @@ jobs: --dart-define=THUNDERFOREST_API_KEY=${{ secrets.THUNDERFOREST_API_KEY }} --dart-define=IS_RELEASE=true - # This step is mainly required because Google considers a link to a Github markdown file as "editable" which violates their policy. - # Therefore we convert the markdown file to HTML and publish it together with the App via Github pages here. + # This step is mainly required because Google considers a link to a GitHub Markdown file as "editable" which violates their policy. + # Therefore, we convert the Markdown file to HTML and publish it together with the App via GitHub pages here. - name: Convert Privacy Policy to HTML uses: BaileyJM02/markdown-to-pdf@v1.2.0 with: diff --git a/docs/BUILD.md b/docs/BUILD.md index d0ec4369..58cc7051 100644 --- a/docs/BUILD.md +++ b/docs/BUILD.md @@ -2,7 +2,7 @@ ## Prerequisites -Install and setup the [Flutter SDK](https://docs.flutter.dev/get-started/install). +Install and set up the [Flutter SDK](https://docs.flutter.dev/get-started/install). ## Build process @@ -25,7 +25,7 @@ You can also omit the entire API key parameter. In this case the underlying map ## Additional notes -By default the app uses the [OpenStreetMap development server](https://master.apis.dev.openstreetmap.org) for login and upload. In order to use the live servers the custom parameter `--dart-define=IS_RELEASE=true` has to be set when running/building the app. +By default, the app uses the [OpenStreetMap development server](https://master.apis.dev.openstreetmap.org) for login and upload. In order to use the live servers the custom parameter `--dart-define=IS_RELEASE=true` has to be set when running/building the app. **Note:** This has nothing to do with flutter's *release*, *profile* and *debug* mode. Due to the usage of verified App Link or Universal Links respectively, login on the OpenStreetMap server won't work without signing the app. In order to enable login the files `app_config.dart`, `osm_config.dart`, `build.gradle` and `Runner.entitlements` need to be configured accordingly. diff --git a/docs/QUESTION_CATALOG.md b/docs/QUESTION_CATALOG.md index 98f2623e..aeae6368 100644 --- a/docs/QUESTION_CATALOG.md +++ b/docs/QUESTION_CATALOG.md @@ -102,7 +102,7 @@ Displays a number wheel for each specified time unit. Possible time units are `d The duration is always completely returned to the constructor, meaning no duration inputs are lost. If for example the input is in hours, minutes and seconds, but only hours is marked as a return value, the hours value will include the minutes and seconds in its representation (potentially in the fractional part). Make sure that the `constructor` only generates the permitted values of the corresponding tag. -The `$input` variable will contain all duration values marked with `return: true` in the following order: `days`, `hours`, `minutes` and `seconds`. Therefore at least one duration value should have `return": true`. +The `$input` variable will contain all duration values marked with `return: true` in the following order: `days`, `hours`, `minutes` and `seconds`. Therefore, at least one duration value should have `return": true`. ```jsonc "answer": { @@ -337,8 +337,8 @@ output: `operator=_alu_` ### Answer examples -#### Multiple values using the semi-colon value separator -The example will write all selected values to the *cuisine* tag separated by semi-colon. +#### Multiple values using the semicolon value separator +The example will write all selected values to the *cuisine* tag separated by semicolon. **Explanation:** The `$input` variable will contain all selected values, which will be concatenated by the `JOIN` expression. ```jsonc @@ -377,7 +377,7 @@ The example will write all selected values to the *cuisine* tag separated by sem ``` #### Multiple values using multiple tags -The example will write the three tags *bus*, *tram* & *train*. For unselected options the values will fallback to *no*. +The example will write the three tags *bus*, *tram* & *train*. For unselected options the values will fall back to *no*. **Explanation:** The `$input` variable will be empty for unselected options. Because `COALESCE` evaluates to the first value/argument it will output *no* in this case. If the fallback value is omitted then the expression will evaluate to `null` which means that the tag won't be written. ```jsonc "answer": { @@ -413,7 +413,7 @@ The example will write the three tags *bus*, *tram* & *train*. For unselected op #### Using expressions to convert centimeters to meters The example makes use of the 3 expressions PAD, INSERT and REPLACE to convert from centimeters to meters. The REPLACE expression is only used to remove any pending zeros (and potentially the decimal point). Note that this expression combination only works for positive integers (not for negative or decimal numbers) and does a conversion by exactly two decimal places to the left. -**Explanation:** The expressions evaluate from the inner most to the outer most as shown in the table below. +**Explanation:** The expressions evaluate from the innermost to the outermost as shown in the table below. | $input | PAD | INSERT | REPLACE | | ------ | ----- | ------ | ------- | @@ -528,7 +528,7 @@ In order to match elements that have or don't have a certain key one can set the - `"some_osm_key": true` means that the element must have a tag with the key `some_osm_key` while its **value can be anything**. - `"some_osm_key": false` means that the element **must not** have a tag with the key `some_osm_key`. -To match against multiple values of the same key one could write multiple conditions. However this will often result in a lot of repetitive code wherefore a shorthand array notation exists: +To match against multiple values of the same key one could write multiple conditions. However, this will often result in a lot of repetitive code wherefore a shorthand array notation exists: `highway": ["motorway ", "trunk", "primary"]` The previous example will match any elements that contain the key `highway` with a value of either `motorway`, `trunk` or `primary`. You can also use `true`, `false` and regular expressions in this notation. For more complex tag matching scenarios **Regular expressions** can be used. They are written as normal strings enclosed by slashes (`/`) and use Dart's regular expression syntax and semantics, which is the same as for [JavaScript regular expressions](https://developer.mozilla.org/docs/Web/JavaScript/Guide/Regular_Expressions). @@ -537,7 +537,7 @@ Example use cases are: - matching a tag that contains certain value `/INCLUDED_VALUE/`. - matching a tag that contains a certain value between a separator string (e.g. semicolon) `/(^|^.+;)LIST_VALUE(;.+$|$)/`. -Currently setting regex flags is not supported. All of them are turned off except for the *match case sensitive* flag. +Currently, setting regex flags is not supported. All of them are turned off except for the *match case-sensitive* flag. **Notation summary:** @@ -562,7 +562,7 @@ This defines the element type or types the element must have in order to evaluat Possible types are: `Node`, `OpenWay`, `ClosedWay` and `Relation` -In contrast to the standard OSM element types, way is split into two sub-types to distinguish between area/boundary and path/segment elements. +In contrast to the standard OSM element types, way is split into two subtypes to distinguish between area/boundary and path/segment elements. ### `child` condition diff --git a/docs/WORKING_PRINCIPLE.md b/docs/WORKING_PRINCIPLE.md index d7011927..c782e4f8 100644 --- a/docs/WORKING_PRINCIPLE.md +++ b/docs/WORKING_PRINCIPLE.md @@ -2,7 +2,7 @@ # Working Principle The app aims to contribute OSM data via surveys and shall be used on-site. It is designed to be simple and usable without much prior knowledge. -The app does **not** try to be a full featured editor for complex mapping scenarios like JOSM, ID or Vespucci by any means. +The app does **not** try to be a full-featured editor for complex mapping scenarios like JOSM, ID or Vespucci by any means. ## Core principles: - The app only ever adds tags or elements and never deletes anything. @@ -10,7 +10,7 @@ The app does **not** try to be a full featured editor for complex mapping scenar - Users never enter any tags directly, instead the app phrases questions and transforms the answers into OSM tags (similar to [StreetComplete](https://github.com/streetcomplete/StreetComplete)). ## Target Elements: -The app focuses on public transport related OSM elements. Therefore we first gather all nearby stops via the [Overpass API](https://wiki.openstreetmap.org/wiki/Overpass_API). Based on these stops we generate "stop areas", which are basically just circles enclosing one or more nearby stops with a minimal predefined radius. These make up the areas where we are looking for OSM elements via the [OSM API](https://wiki.openstreetmap.org/wiki/API_v0.6#Bounding_box_computation). Our main focus lies on elements with the key `public_transport=platform`. Some further relevant elements are: footways, steps, parking areas or toilets around the stop. +The app focuses on public transport related OSM elements. Therefore, we first gather all nearby stops via the [Overpass API](https://wiki.openstreetmap.org/wiki/Overpass_API). Based on these stops we generate "stop areas", which are basically just circles enclosing one or more nearby stops with a minimal predefined radius. These make up the areas where we are looking for OSM elements via the [OSM API](https://wiki.openstreetmap.org/wiki/API_v0.6#Bounding_box_computation). Our main focus lies on elements with the key `public_transport=platform`. Some further relevant elements are: footways, steps, parking areas or toilets around the stop. ## Matching: diff --git a/pubspec.yaml b/pubspec.yaml index 01203517..36b73abf 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -11,7 +11,7 @@ version: 0.8.5+24 environment: sdk: ">=3.8.0 <4.0.0" - # The Flutter version is read in different build scripts and is used to setup the appropriate flutter toolkit. + # The Flutter version is read in different build scripts and is used to set up the appropriate flutter toolkit. # The build processes cannot handle range notations like >=2.17.1 <3.0.0 or ^3.7.0. # Therefore it is important to always specify a fixed flutter version in that format: [0-9]+.[0-9]+.[0-9]+ flutter: 3.44.4 @@ -58,7 +58,7 @@ dependencies: flutter_mvvm_architecture: git: url: https://github.com/Robbendebiene/flutter-mvvm-architecture.git - # Temporary fix, because of breaking chances + # Temporary fix, because of breaking changes ref: cdbfec0bec66614abfbd154850a735dd0b026888 get_it: ^7.6.0 mobx: ^2.2.0