wemap_sdk_flutter 0.29.0 copy "wemap_sdk_flutter: ^0.29.0" to clipboard
wemap_sdk_flutter: ^0.29.0 copied to clipboard

A new home for Wemap flutter SDKs for Android/iOS application.

Change Log #


0.29.0 #

Breaking #

  • Removed static fields on ItineraryWidget — use ItineraryWidgetController

  • Removed ChooseStartWidget.showCenterMarker — use ItineraryWidgetController.isChoosingStartOnMap

  • Android: Replace private S3/AWS Maven setup with:

    maven {
        url "https://s3.eu-west-1.amazonaws.com/mobile.getwemap.com/releases/android"
    }
    

Added #

  • itineraryWidgetBuilder on WemapMap to customize or replace the itinerary panel (ItineraryWidgetController via ItineraryWidgetData)
  • onNavigationRecalculated callback on WemapMap
  • vpsScanSuccessIndicator on WemapMap (default false) — brief success banner after a user-initiated VPS scan
  • New Step.Kind values: ENTRANCE, EXIT, TURNSTILE, plus UNKNOWN
  • Optional POI list tags via poisListTagCategory on WemapMap

Changed #

  • Itinerary panel state moved to ItineraryWidgetController
  • Android: use the public Maven repo (no AWS credentials)
  • iOS: Swift Package Manager supported; native SDKs bumped to 0.29.x
  • Updated VPS / AR onboarding and status banners
  • Android: hide search bar and filters while AR is active
  • AR onboarding shown once per WemapMap instance until the user continues

Fixed #

  • AR shows all POIs during active navigation (it should show only the destination)
  • Navigation widget destination name display
  • iOS: onNavigationStopped now fires correctly
  • Navigation audio keeps its state across VPS scan and reads the updated next step
  • Navigation recalculation uses the SDK default distance threshold
  • Out-of-range Step kind/direction values map to UNKNOWN / null instead of crashing

Dependencies #

  • Android: Wemap_sdk_android0.29.1
  • iOS: Wemap_sdk_ios0.29.1

0.27.1 #

Added #

  • Android:

    • Optimize the first AR View launching
  • Itinerary calculation progress indicator

    • Show a progress indicator on the ItineraryWidget while the itinerary is being calculated
    • Keep the ItineraryWidget visible when calculation fails instead of removing it
  • VPS availability check

    • Add WemapMap.isVpsAvailable() returning VPSAvailability enum (available, notAvailable, supportedNotInstalled)
    • Add WemapMap.requestArCoreInstall() to prompt ARCore installation (Android only, no-op on iOS)

Changed #

  • GPS positioning behavior
    • MapManager.locateMe() with LocationSource.GPS now fetches location and draws the blue dot without forcing camera recentering
    • Integrators can explicitly choose camera behavior after localization (for example with mapManager.enableTrackingMode() or mapManager.enableTrackingWithHeadingMode())
    • Reminder: to retrieve coordinates with mapManager.getUserLocation(), user localization must be triggered first (typically call mapManager.locateMe())

Fixed #

  • Performance Make AR/map views switch more fluid
  • Android:
    • Fix: Camera flow is not displayed for android 9 (Samsung s8)
    • Fix: AR elements are always displayed while trying to scan VPS after itinerary being added
    • Fix: AR visibility change callback now fires reliably when toggling AR mode from Flutter
  • Widgets
    • Fix: Choose starting point from ItineraryWidget is not working as expected
    • Fix: LateInitializationError on itineraryHours when the first itinerary calculation fails (fields now have default values)
    • Fix: ScanDialogWidget from scan suggestion flow is no longer dismissible by tapping outside or system back
    • Fix: PMR rule not taken into account when switching to PMR and applying from the rules panel while an itinerary is displayed
    • Fix: Overlap of FiltersWidget and ItineraryWidget
    • Fix: Start/end switcher button on ItineraryWidget not behaving correctly
    • Fix: POIsListSheet should always be hidden when ItineraryWidget is displayed, even if the itinerary failed
    • Fix: DetailedView title row overflow on iPad by sizing from local layout constraints and applying text ellipsis
    • Fix: first POI item in POIsListSheet could be hidden under the overlaid header on iPad (list top spacer now matches dynamic header height)
    • Fix: FiltersWidget now uses content-driven height with a max-height cap (removes excessive empty space on iPad while keeping scroll for long content)

Dependencies #

  • Android: Wemap_sdk_android0.27.0
  • iOS: Wemap_sdk_ios0.27.0

0.27.0 #

Breaking Changes #

  • MapOptions – offline zip file parameter renamed

    • offlineZipFileName (type String?) renamed to packDataPath (type String?)
    • Semantics updated: parameter now expects a path to pack data, not just a file name
    • Migration: replace offlineZipFileName: "file.zip" with packDataPath: "path/to/file.zip" (use full path when pack data is loaded from disk)
  • Itinerary search API

    • ItinerarySearchOptions removed, replaced by ItinerarySearchRules
    • Parameter searchOptions (type ItinerarySearchOptions?) replaced by searchRules (type ItinerarySearchRules?) in:
      • MapManager.addItineraryFromUserLocation
      • MapManager.addItineraryFromMapCenter
      • MapManager.addItinerary
      • MapManager.startNavigationFromUserLocation
    • ItinerarySearchRules uses ruleNames: List<String> (e.g. ["wheelchair"]) instead of boolean flags (avoidStairs, avoidEscalators, avoidElevators, etc.)
    • Migration: use ItinerarySearchRules.WHEELCHAIR for PRM, or mapManager.searchRuleNames() for available rule names
  • Step model

    • levelChange (type LevelChange?) replaced by:
      • levelDifference (type double?)
      • kind (type Kind? enum: DEPART, TURN, CONTINUE, ELEVATOR, ESCALATOR, STAIRS, etc.)
      • direction (type Direction?)
  • LevelChange model removed

    • LevelChange class, LevelChangeType enum, and Incline enum removed
    • level_change.dart no longer part of the library
  • Direction enum

    • Values changed from STRAIGHT, RIGHTNORMAL, RIGHTSHARP, RIGHTSLIGHT, LEFTNORMAL, LEFTSHARP, LEFTSLIGHT
    • To DOWN, UP, STRAIGHT, RIGHT, SLIGHT_RIGHT, SHARP_RIGHT, LEFT, SLIGHT_LEFT, SHARP_LEFT, U_TURN
    • Direction now defined in Step model instead of NavigationInstructions
  • ItineraryWidget

    • New required constructor parameter: availableRuleNames (type List<String>)
    • Integrators instantiating ItineraryWidget must provide availableRuleNames (e.g. from mapManager.searchRuleNames())
  • Change boolean field tagsOverlap of MapData with enum filteringLogic accessible through useTags

  • WemapMapmapDataLoadFailed replaced by builder

    • Parameter mapDataLoadFailed (type Widget?) replaced by mapDataLoadFailed (type Widget Function(BuildContext context, Object? error, StackTrace? stackTrace)?)
    • Integrators can now access the thrown error and optional stack trace to display custom error messages or handle failures

Added #

  • Offline mode – PackDataManager API
    • Expose PackDataManager for programmatic download of pack data: downloadPackData(mapID) returns PackData with filePath, eTag, version, and fileName
    • Add isNewPackDataAvailable(mapID, eTag) to check if a pack data update is available
  • Enhance FailedItineraryDialog & remove ItineraryWidget when itinerary fails
  • Add searchRuleNames method to get all available rule names of the current map
  • Add custom rules filter on ItineraryWidget
    • New static ItineraryWidget.selectedRuleNames (List<String>) holds the currently applied rule names; read/write to inspect or pre-set selection
    • New expandable rules panel: tap "Rules" to show/hide a list of itinerary rules from availableRuleNames
    • Pending state: rule selection is buffered until user taps "Apply"; "Clear" resets selection
    • Rules button shows a badge with the count of selected rules (excluding wheelchair when PRM switch is on)
  • Handle filteringLogic.DEFAULT filtering logic
  • Expose filteringLogic field in MapData through useTags
  • Expose new field actionButtons of MapData to configure action buttons
    • Add configuration field withLabel to show or hide the label for action buttons
  • Rework locate-me button behaviour to adopt/control camera mode
  • Add new method enableTrackingWithHeadingMode to set camera mode to TrackingWithHeading
  • Add media and carousel to POI detailedView
  • Add onTagTapped event to detailedView widget
  • Add indicator on POIsListSheet while searching/filter is in process
  • Add CSS file into detailed view HTML content
  • Add showPOIs method to display a list of POIs
  • Add event onBackgroundScanStatusChanged triggered when system is making background scans
  • Add event onUserLocalized triggered when user is localized with VPS scan
  • Add a notification VPSSialogWidget asking to hold phone upright so the system can recognize user surroundings
    • A new boolean parameter holdUpPhoneDialog is accessible within WemapMap to enable/disable this notification
    • Notification is displayed when background scan is ready and VPS state is degraded
  • Add scanSuggestionDialog parameter on WemapMap (default: false) to suggest the user start a VPS scan for localization
    • When enabled: shows ScanDialogWidget on onNotPositioningReasonChanged (e.g. conveying detected, scan required) prompting to localize via scan
    • Also shows rescan dialog when VPS times out after global timeout
  • Add new reasons for NotPositioning state

Changed #

  • Use follow-with-heading mode when navigation is started if navigationWidgetEnabled is true
  • Frame the carousel part in detailedView widget
  • Enhance FiltersWidget and TagWidget rendering
  • Rename ScanReason to NotPositioningReason
  • Rename event onScanReasonChanged to onNotPositioningReasonChanged
  • Use isWheelchair option for PRM button of ItineraryWidget instead of avoidEscalators and avoidStairs

Fixed #

  • Fix(iOS): Fatal error "Not supported on CLHeading" in Swift
  • Fix(android): restore Kotlin 2.1.x compatibility
  • Fix(iOS): Show user heading indicator when SIMULATOR locationSource is used
  • Fix(iOS): Endless map loading on some maps
  • Fix: POIs list and search bar missing when quitting itinerary
  • Fix: VPS scan doesn't work when state is NOT_POSITIONING and user taps "Go" in detailed view
  • Fix: Detailed view height now flexes to fit content
  • Fix: Search/filter results in POIsListSheet shouldn't be limited, API pagination (was limited to 20 POIs)
  • Fix: POI display on map when many tags are active
  • Fix: Search bar lag while typing
  • Fix: Adjust holdUpPhone notification position to prevent UI overlap

Dependencies #

  • Android: Wemap_sdk_android0.27.0
  • iOS: Wemap_sdk_ios0.27.0

0.26.2 #

Added #

  • Add bearing, animated support to moveCamera method
  • Create new LocationSource SIMULATOR
    • Add setCoordinates method to MapManager to simulate user location when SIMULATOR location source is used

Dependencies #

  • Android: Wemap_sdk_android0.26.3
  • iOS: Wemap_sdk_ios0.26.4

0.26.1 #

Added #

  • Expose user location updates through a dart stream mapManager.getUserLocationStream()
  • Expose user Attitude (orientation) updates through a dart stream mapManager.getUserAttitudeStream()

Changed #

  • Remove blue dot when tracking is lost
  • Android: No more need to provide includeSDKSources property in gradle.properties

Fixed #

  • Android: Map: levels on some styles are not well handled
  • Fix DraggableScrollableController.size reported crash

Dependencies #

  • Android: Wemap_sdk_android0.26.1
  • iOS: Wemap_sdk_ios0.26.0

0.26.0 #

Added #

  • Expose removeMarker native method to remove the marker by coordinates
  • Expose addMarker native method and marker tapped event onMarkerClick to Flutter
  • Add event for long click on the map onMapLongClick

Fixed #

  • fixed(iOS): VPS looses tracking on first POI selection

Dependencies #

  • Android: Wemap_sdk_android0.26.0
  • iOS: Wemap_sdk_ios0.26.0

0.23.0 #

Added #

  • Add new parameters for WemapMap widget to embed default sub widgets:
    • navigationWidgetEnabled for NavigationWidget
    • itineraryWidgetEnabled for ItineraryWidget
    • poisListSheetEnabled for poisListSheet
  • Add position extrapolation when conveyor is detected
  • Wrap main widgets with Semantics for VoiceOver/TalkBack support, and add a button to enable/disable instruction announcements
  • Add new boolean parameter updateUserLocation to force updates in addItineraryFromUserLocation method
  • Add new method sortPOIsByGraphDistance to sort POIs by graph distance from the user location
  • Fallback: when sortPOIsByGraphDistance fails, sort POIs list using Euclidean distance
  • Add new widget POIsListSheet to list all sorted POIs when searchBarEnabled is true
  • Enhance filtering for better performance
  • ItineraryWidget: Add ability to manually select itinerary start via text field

Changed #

  • Make WemapMap sub-widgets options disabled by default (ex: searchBarEnabled, levelsTabEnabled, ...etc)
  • Adjust 2D instruction panel during navigation
  • General UX/UI improvements

Fixed #

  • Fix 5-second wait issue on first VPS scan when calling addItineraryFromUserLocation
  • Fix WemapMap screen sometimes appearing gray for the first VPS itinerary
  • Fix screen turning gray on back button press while an itinerary is active
  • Fix itinerary widget remaining displayed after reaching destination
  • DetailedView widget: Suggest scan if location is imprecise and user requests itinerary
  • Fix camera view remaining hidden during VPS scanning (Android 9 - Samsung S8)
  • Fix "null m" text appearing at the end of an instruction during navigation
  • Reset POI state (hidden/shown) when disposing and re-initializing WemapMap

Dependencies #

  • Android: Wemap_sdk_android0.23.1
  • iOS: Wemap_sdk_ios0.23.0

0.22.0 #

Breaking Changes #

  • addItineraryFromUserLocation method signature changed to addItineraryFromUserLocation( {required Coordinate destination, ItinerarySearchOptions? searchOptions, Color? color}).

    • coordinate attribute changed to destination
    • avoidElevators , avoidEscalators and avoidStairs are now attributes of ItinerarySearchOptions
  • same changes are applied to this methods:

    • addItineraryFromMapCenter
    • addItinerary

Added #

  • ItinerarySearchOptions model to set conditions while searching for itineraries
    • new options are added:
    • avoidMovingWalkways
    • avoidTicketRestrictedAreas
    • isWheelchair

Fixed #

  • ArrivedToDestinationWidget null check operator Error

Dependencies #

  • Android: Wemap_sdk_android0.22.0
  • iOS: Wemap_sdk_ios0.22.0

0.20.2 #

Added #

  • Ability to use a common raster tile for multiple offline packs data.

Changed #

  • Send images in color by default for VPS.
  • LevelsWidget: Display level name if shortName is empty.
  • Sync release version with Wemap native SDK versions.

Fixed #

  • Fixed filter issue on Android.
  • Fixed getUserLocation method not found error.
  • Android: Building selection not working systematically on map init.
  • iOS: App crash by itineraries list is empty on adding Itinerary call

Dependencies #

  • Android: Wemap_sdk_android0.20.2
  • iOS: Wemap_sdk_ios0.20.2

0.8.0 #

Breaking Changes #

  • OnNavigationStartedCallback now requires a Navigation parameter.
  • onNavigationStarted event now comes with Navigation parameter to indicate which navigation is started

Added #

  • Add locale and fallback locale to WemapMap widget
  • Example: show dialog when no Map ID is entered
  • Example: add firebase analytics to sample app
  • Rework detailed view widget to be more similar to the one in Web
  • Add progress indicator on WemapMap widget until its map being ready
  • Android: add some params for visual debugging in MapOptions & add them for the sample app
  • iOS: add some params for visual debugging in MapOptions & add them for the sample app
  • Expose ConveyingDetector constants in MapOptions & make them as params for the sample app
  • Enable POIs selection when the map is ready
  • Switching from Map to AR view starts the navigation if an itinerary is already added
  • Add new event onARViewDisplayedChanged triggered when AR View visibility changed
  • UI/UX: enhance Levels Widget
  • Sample app: back button event while AR view is displayed, leads to the Map View
  • Add a static ValueNotifier isARViewDisplayed, to notify whether or not AR view is displayed
  • Add option of converting VPS images to grayscale
  • Model: create Navigation model
  • Example: add menu bar on AppBar for settings like; VPS image type (png/jpg) and compression quality
  • Example: save map params with shared preferences
  • Switch to SCAN_REQUIRED state when user is static in an elevator or escalator
  • AR for both platforms
  • Add a custom dialog widget for user arrival to destination
  • Add onItineraryRemoved event
  • Add a custom dialog widget to suggest navigation starting with current itinerary
  • Optimize POIs list fetching to be shared (WemapMap static attribute)

Changed #

  • iOS: set minimum deployment target to 13 instead of 12
  • Android: increase minSDKVersion from 21 to 24
  • Make the itinerary default color linked to the native default
  • Change AR step instructions altitude from 3(m) to 1.5
  • No more start navigation suggestion when an itinerary is added using addItineraryFromMapCenter method
  • Make the VPS image format by default JPG instead of PNG
  • Change ValueNotifier isARViewDisplayed into onARViewDisplayedChanged event
  • Use ExpensiveAndroidView for proxy
  • Load mapData in Flutter side before widget initialisation using FutureBuilder
  • Android: make the Proxy SurfaceAndroidView works again
  • Change natively all used tracking modes from TrackingWithHeading to Tracking
  • Upgrade to flutter 3.27.2

Fixed #

  • iOS: sometimes on switch between map and AR user position is returned to start during navigation
  • FiltersWidget should take into account tags when no category provided in snippet
  • Android: POIs are not selectable after switching the map with a specific scenario
  • Android: take into account maps with no VPS provided
  • Android: use surfaceView for VPS scanning, to hide AR elements while scanning
  • POIs selection should be enabled when adding itinerary is failed (because adding itinerary, disables POIs selection)
  • Don't ask to start nav if you are already in navigation
  • Displayed arrival time in minutes is not correct when it's less than 10 minutes
  • Fixed flutter errors about 'Null check operator used on a null value' on events (onItineraryAdded & onStartedVpsProcess)
  • Fixed some UI overflow issues on some devices

Dependencies #

  • Android: Wemap_sdk_native -> 0.19.2
  • iOS: Wemap_sdk_ios -> 0.19.2

0.5.4 #

Added #

  • Give the possibility to change itinerary color while navigation (color param added)

0.5.3 #

Fixed #

  • Selected tags indicator should be hidden when filtersTabEnabled=false

Changed #

  • Make default itinerary color as in native SDKs (BLUE)
  • Remove snackBar from SDK when events (onArrivedAtDestination, onNavigationFailed) triggered, add it into Sample app

Added #

  • Give the possibility to change itinerary color (color param added)

0.5.2 #

Fixed #

  • [iOS] POIs displayed only after a specific zoom

Added #

  • Expose mediaType and mediaURL attributes of the POI from snippet

Dependencies #

  • Android: Wemap_sdk_native -> 0.16.0
  • iOS: Wemap_sdk_ios -> 0.16.0

0.5.1 #

Fixed #

  • [iOS] onMapReady event on Offline

0.5.0 #

Added #

  • Offline support
  • POIs search logic on offline mode

Fixed #

  • Fix "OR" logic filter

Dependencies #

  • Android: Wemap_sdk_native -> 0.15.0
  • iOS: Wemap_sdk_ios -> 0.15.0

0.4.2 #

Fixed #

  • getPOIs method don't work sometimes for iOS after onMapReady event triggered

0.4.1 #

Added #

  • CI/CD: add github workflow for documentation generation and publishing

Fixed #

  • Itinerary Widget should be disabled when Detailed View is disabled

Dependencies #

0.4.0 #

Added #

  • Add GPS location provider option
  • [Flutter SDK] add button for PRM itineraries
  • Allow user, from low accuracy scanning modal, to manually enter starting point
  • [Flutter app] Add events for crashlytics

Changed #

  • Make the built-in screen on top of the camera while VPS scanning optional
  • Migrate gradle to be used by Flutter 3.19

Fixed #

  • POIs filtering and selection don't work for some maps
  • [Flutter app] Analyze multi-level itinerary crash at St-Lazare

Dependencies #

  • Android: Wemap_sdk_native 0.12.0 -> 0.14.2
  • iOS: Wemap_sdk_ios 0.12.0 -> 0.14.2

0.3.0 #

Added #

  • Add dev/prod firebase deployment
  • Navigation: An itinerary is displayed and user can follow itinerary step by step
    • Navigation - Update list of steps
    • Disable POIs selection during itinerary screen and navigation screen
    • Locate me button allow user to re-track in navigation
    • Next step remaining distance must update when moving
  • Itinerary: Take into account the case when an itinerary is not found to a PoI
  • Create CI/CD
  • UI/UX: enhance the UI/UX
  • Documentation: add dart doc generator to the SDK
  • Example: change the default sample App icon, Retrieve list of promoted maps from backend
  • Create dynamic dependencies to Android SDKs
  • Positioning: add VPS feature, implement its methods and events, Switch level automatically after a VPS scan
  • Flutter: make iOS example work with WemapSDKs sources from git and local
  • Events: onPointOfInterestSelected, onPointOfInterestUnselected, OnMapClick, OnNavigationFailed
  • Methods: getPOIs, selectPOIById, unselectPOIById, hideAllPOIs, hidePOIById, showPOIById, moveCamera, getZoom, storeCamera, restoreCamera
  • Widget: Embed Levels Tab to the Livemap Widget, Embed Filters widget, Embed DetailedView widget for POI's data
  • Model: Add MapOptions for Livemap Widget to specify map's id, token and environment (DEV or PROD)

Changed #

  • Manager: put all managers into one
  • Navigation: Check navigation details
  • Map: Apply the following rules for Map rotation
  • DetailedView: Reduce the detail view using only the size of the content
    • Block external links in the detailed view
  • Example: change the sample app label
  • Example: change the target android/iOS app for firebase crashlytics
  • Model: use turf as part of model
  • Events: change onMapCreated to onMapReady (more efficient)

Fixed #

  • Search: Show the levels of PoIs in the results widget
  • Filter: tag filtering is so long
  • VPS: Low connection message is not shown when internet is off (Android/iOS)
    • Low connection message overlap another message
    • Camera shouldn't automatically be activated at the launch when the map has VPS on iOS
  • Level: The bottom search results widget hides the levels
  • Itinerary: Itinerary default color on Android is red instead of blue
  • Map: Locate me button hides the (i) button
  • Level: Reverse levels order
  • Level: When the user is in TRACKING mode, the level cannot be change
  • CI/CD: prepare Flutter Library for distribution

Dependencies #

  • Android: Wemap_sdk_native 0.5.2 -> 0.12.0
  • iOS: Wemap_sdk_ios 0.5.1 -> 0.12.0

0.0.1 #

Added #

  • Widget: Styled Livemap Widget with emmid and token parameters
  • Events: onMapCreated, onBuildingFocusChanged, onActiveLevelChanged
  • Methods: activeLevel
  • Example: costume example with available features