wemap_sdk_flutter 0.29.0
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— useItineraryWidgetController -
Removed
ChooseStartWidget.showCenterMarker— useItineraryWidgetController.isChoosingStartOnMap -
Android: Replace private S3/AWS Maven setup with:
maven { url "https://s3.eu-west-1.amazonaws.com/mobile.getwemap.com/releases/android" }
Added #
itineraryWidgetBuilderonWemapMapto customize or replace the itinerary panel (ItineraryWidgetControllerviaItineraryWidgetData)onNavigationRecalculatedcallback onWemapMapvpsScanSuccessIndicatoronWemapMap(defaultfalse) — brief success banner after a user-initiated VPS scan- New
Step.Kindvalues:ENTRANCE,EXIT,TURNSTILE, plusUNKNOWN - Optional POI list tags via
poisListTagCategoryonWemapMap
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
WemapMapinstance until the user continues
Fixed #
- AR shows all POIs during active navigation (it should show only the destination)
- Navigation widget destination name display
- iOS:
onNavigationStoppednow 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
Stepkind/direction values map toUNKNOWN/nullinstead of crashing
Dependencies #
- Android:
Wemap_sdk_android→0.29.1 - iOS:
Wemap_sdk_ios→0.29.1
0.27.1 #
Added #
-
Android:
- Optimize the first AR View launching
-
Itinerary calculation progress indicator
- Show a progress indicator on the
ItineraryWidgetwhile the itinerary is being calculated - Keep the
ItineraryWidgetvisible when calculation fails instead of removing it
- Show a progress indicator on the
-
VPS availability check
- Add
WemapMap.isVpsAvailable()returningVPSAvailabilityenum (available,notAvailable,supportedNotInstalled) - Add
WemapMap.requestArCoreInstall()to prompt ARCore installation (Android only, no-op on iOS)
- Add
Changed #
- GPS positioning behavior
MapManager.locateMe()withLocationSource.GPSnow fetches location and draws the blue dot without forcing camera recentering- Integrators can explicitly choose camera behavior after localization (for example with
mapManager.enableTrackingMode()ormapManager.enableTrackingWithHeadingMode()) - Reminder: to retrieve coordinates with
mapManager.getUserLocation(), user localization must be triggered first (typically callmapManager.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
ItineraryWidgetis not working as expected - Fix:
LateInitializationErroronitineraryHourswhen the first itinerary calculation fails (fields now have default values) - Fix:
ScanDialogWidgetfrom 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
FiltersWidgetandItineraryWidget - Fix: Start/end switcher button on
ItineraryWidgetnot behaving correctly - Fix:
POIsListSheetshould always be hidden whenItineraryWidgetis displayed, even if the itinerary failed - Fix:
DetailedViewtitle row overflow on iPad by sizing from local layout constraints and applying text ellipsis - Fix: first POI item in
POIsListSheetcould be hidden under the overlaid header on iPad (list top spacer now matches dynamic header height) - Fix:
FiltersWidgetnow uses content-driven height with a max-height cap (removes excessive empty space on iPad while keeping scroll for long content)
- Fix: Choose starting point from
Dependencies #
- Android:
Wemap_sdk_android→0.27.0 - iOS:
Wemap_sdk_ios→0.27.0
0.27.0 #
Breaking Changes #
-
MapOptions – offline zip file parameter renamed
offlineZipFileName(typeString?) renamed topackDataPath(typeString?)- Semantics updated: parameter now expects a path to pack data, not just a file name
- Migration: replace
offlineZipFileName: "file.zip"withpackDataPath: "path/to/file.zip"(use full path when pack data is loaded from disk)
-
Itinerary search API
ItinerarySearchOptionsremoved, replaced byItinerarySearchRules- Parameter
searchOptions(typeItinerarySearchOptions?) replaced bysearchRules(typeItinerarySearchRules?) in:MapManager.addItineraryFromUserLocationMapManager.addItineraryFromMapCenterMapManager.addItineraryMapManager.startNavigationFromUserLocation
ItinerarySearchRulesusesruleNames: List<String>(e.g.["wheelchair"]) instead of boolean flags (avoidStairs,avoidEscalators,avoidElevators, etc.)- Migration: use
ItinerarySearchRules.WHEELCHAIRfor PRM, ormapManager.searchRuleNames()for available rule names
-
StepmodellevelChange(typeLevelChange?) replaced by:levelDifference(typedouble?)kind(typeKind?enum:DEPART,TURN,CONTINUE,ELEVATOR,ESCALATOR,STAIRS, etc.)direction(typeDirection?)
-
LevelChangemodel removedLevelChangeclass,LevelChangeTypeenum, andInclineenum removedlevel_change.dartno longer part of the library
-
Directionenum- 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 Directionnow defined inStepmodel instead ofNavigationInstructions
- Values changed from
-
ItineraryWidget- New required constructor parameter:
availableRuleNames(typeList<String>) - Integrators instantiating
ItineraryWidgetmust provideavailableRuleNames(e.g. frommapManager.searchRuleNames())
- New required constructor parameter:
-
Change boolean field
tagsOverlapofMapDatawith enumfilteringLogicaccessible throughuseTags -
WemapMap–mapDataLoadFailedreplaced by builder- Parameter
mapDataLoadFailed(typeWidget?) replaced bymapDataLoadFailed(typeWidget 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
- Parameter
Added #
- Offline mode – PackDataManager API
- Expose
PackDataManagerfor programmatic download of pack data:downloadPackData(mapID)returnsPackDatawithfilePath,eTag,version, andfileName - Add
isNewPackDataAvailable(mapID, eTag)to check if a pack data update is available
- Expose
- Enhance
FailedItineraryDialog& removeItineraryWidgetwhen itinerary fails - Add
searchRuleNamesmethod 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)
- New static
- Handle
filteringLogic.DEFAULTfiltering logic - Expose
filteringLogicfield inMapDatathroughuseTags - Expose new field
actionButtonsofMapDatato configure action buttons- Add configuration field
withLabelto show or hide the label for action buttons
- Add configuration field
- Rework locate-me button behaviour to adopt/control camera mode
- Add new method
enableTrackingWithHeadingModeto set camera mode to TrackingWithHeading - Add media and carousel to POI
detailedView - Add
onTagTappedevent todetailedViewwidget - Add indicator on
POIsListSheetwhile searching/filter is in process - Add CSS file into detailed view HTML content
- Add
showPOIsmethod to display a list of POIs - Add event
onBackgroundScanStatusChangedtriggered when system is making background scans - Add event
onUserLocalizedtriggered when user is localized with VPS scan - Add a notification
VPSSialogWidgetasking to hold phone upright so the system can recognize user surroundings- A new boolean parameter
holdUpPhoneDialogis accessible withinWemapMapto enable/disable this notification - Notification is displayed when background scan is ready and VPS state is degraded
- A new boolean parameter
- Add
scanSuggestionDialogparameter onWemapMap(default: false) to suggest the user start a VPS scan for localization- When enabled: shows
ScanDialogWidgetononNotPositioningReasonChanged(e.g. conveying detected, scan required) prompting to localize via scan - Also shows rescan dialog when VPS times out after global timeout
- When enabled: shows
- Add new reasons for NotPositioning state
Changed #
- Use follow-with-heading mode when navigation is started if
navigationWidgetEnabledis true - Frame the carousel part in
detailedViewwidget - Enhance
FiltersWidgetandTagWidgetrendering - Rename
ScanReasontoNotPositioningReason - Rename event
onScanReasonChangedtoonNotPositioningReasonChanged - Use
isWheelchairoption for PRM button ofItineraryWidgetinstead ofavoidEscalatorsandavoidStairs
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
SIMULATORlocationSource 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
POIsListSheetshouldn'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_android→0.27.0 - iOS:
Wemap_sdk_ios→0.27.0
0.26.2 #
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
includeSDKSourcesproperty ingradle.properties
Fixed #
- Android: Map: levels on some styles are not well handled
- Fix
DraggableScrollableController.sizereported crash
Dependencies #
- Android:
Wemap_sdk_android→0.26.1 - iOS:
Wemap_sdk_ios→0.26.0
0.26.0 #
Added #
- Expose
removeMarkernative method to remove the marker by coordinates - Expose
addMarkernative method and marker tapped eventonMarkerClickto Flutter - Add event for long click on the map
onMapLongClick
Fixed #
- fixed(iOS): VPS looses tracking on first POI selection
Dependencies #
- Android:
Wemap_sdk_android→0.26.0 - iOS:
Wemap_sdk_ios→0.26.0
0.23.0 #
Added #
- Add new parameters for
WemapMapwidget to embed default sub widgets:navigationWidgetEnabledforNavigationWidgetitineraryWidgetEnabledforItineraryWidgetpoisListSheetEnabledforpoisListSheet
- 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
updateUserLocationto force updates inaddItineraryFromUserLocationmethod - Add new method
sortPOIsByGraphDistanceto sort POIs by graph distance from the user location - Fallback: when
sortPOIsByGraphDistancefails, sort POIs list using Euclidean distance - Add new widget
POIsListSheetto list all sorted POIs whensearchBarEnabledis true - Enhance filtering for better performance
ItineraryWidget: Add ability to manually select itinerary start via text field
Changed #
- Make
WemapMapsub-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
DetailedViewwidget: 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_android→0.23.1 - iOS:
Wemap_sdk_ios→0.23.0
0.22.0 #
Breaking Changes #
-
addItineraryFromUserLocationmethod signature changed toaddItineraryFromUserLocation( {required Coordinate destination, ItinerarySearchOptions? searchOptions, Color? color}).coordinateattribute changed todestinationavoidElevators,avoidEscalatorsandavoidStairsare now attributes ofItinerarySearchOptions
-
same changes are applied to this methods:
addItineraryFromMapCenteraddItinerary
Added #
ItinerarySearchOptionsmodel to set conditions while searching for itineraries- new options are added:
avoidMovingWalkwaysavoidTicketRestrictedAreasisWheelchair
Fixed #
- ArrivedToDestinationWidget null check operator Error
Dependencies #
- Android:
Wemap_sdk_android→0.22.0 - iOS:
Wemap_sdk_ios→0.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
shortNameis empty. - Sync release version with Wemap native SDK versions.
Fixed #
- Fixed filter issue on Android.
- Fixed
getUserLocationmethod 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_android→0.20.2 - iOS:
Wemap_sdk_ios→0.20.2
0.8.0 #
Breaking Changes #
OnNavigationStartedCallbacknow requires aNavigationparameter.- 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.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 #
0.5.0 #
0.4.1 #
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