This page provides details about enhancements in the 200.8 release of ArcGIS Maps SDK for Flutter. It also lists deprecations, resolved issues, known issues, and more.
Enhancements
Geometry editing
Customizable geometry editing workflows using the programmatic reticle tool
You can now configure your GeometryEditor to use the new ProgrammaticReticleTool to facilitate customized geometry editing workflows such as those using buttons rather than tap interactions. Unlike our existing tools the ProgrammaticReticleTool has no built in touch interaction. Instead, it is driven by programmatic operations allowing you to configure your own behavior and interaction using buttons or other triggers of your choosing.
Use ProgrammaticReticleTool.selectElementAtReticle() and ProgrammaticReticleTool.pickUpSelectedElement() to select and pick up the GeometryEditorVertex or GeometryEditorMidVertex at the reticle position. Then, drop a picked-up vertex or insert a new vertex using ProgrammaticReticleTool.placeElementAtReticle().
The ProgrammaticReticleTool.vertexCreationPreviewEnabled property can be used to enable or disable the appearance of vertex feedback and feedback lines that are drawn underneath the reticle. It can also be used to enable or disable both visual and haptic snap feedback. This is useful when implementing workflows that do not allow for vertex creation.
Hovered and picked up element changed events
The GeometryEditor.onHoveredElementChanged and GeometryEditor.onPickedUpElementChanged events can be used in your app to react to state changes in the GeometryEditor, and are especially useful when working with the new ProgrammaticReticleTool.
For example, when GeometryEditor.onHoveredElementChanged occurs, based on the GeometryEditor.hoveredElement, your app UI can display a button that selects and picks up the element currently underneath the reticle, as shown below. Similarly, when GeometryEditor.onPickedUpElementChangedoccurs, your app UI can display a button that drops the GeometryEditor.pickedUpElement or places a new vertex, using ProgrammaticReticleTool.placeElementAtReticle(). You can check the GeometryEditor.pickedUpElement to indicate to the user whether or not they will be inserting a new vertex or dropping a currently picked up element.

Disable grow effect when hovering over geometry editor elements
Use the new GeometryEditorStyle.growEffect to enable and disable the visual effect of vertices and mid-vertices growing when hovered.
Vertices and mid-vertices can be separately configured using GeometryEditorGrowEffect.applyToVertices and GeometryEditorEffect.applyToMidVertices.
Identify geometry editor elements
Use the ArcGISMapViewController.identifyGeometryEditor() method to identify elements at a given position when using the GeometryEditor. This allows you to implement workflows such as selecting geometry editor elements or updating the viewpoint to be centered at that element on a long press.

Customizable precision with tolerance and resolution
Use the new SpatialReferenceBuilder to create new SpatialReference objects with custom tolerance and resolution values for high accuracy workflows and GeometryEngine.
The SpatialReference class exposes new read-only properties for SpatialReference.tolerance, SpatialReference.verticalTolerance, SpatialReference.resolution, and SpatialReference.verticalResolution.
This resolves the following enhancement request: EN.
Authentication
Enhancement to ArcGISAuthenticationChallenge
ArcGISAuthenticationChallenge now provides an enum to determine the type of authentication challenge Iap, OAuthOrToken, or Token. It helps to determine whether the authentication challenge is issued by the proxy, portal, or service.
Query and identify optimizations
ArcGISFeature access optimization
Accessing ArcGISFeatures by performing query operations on a ServiceFeatureTable, as well as through the identify methods with FeatureLayers, has seen a significant boost in performance. This improvement is particularly evident when working with a map or scene that contains a large feature dataset, as these asynchronous operations now return results more efficiently, even while all features are still being rendered.
Layers
PDF Support
PDF files are now a supported raster file format, including GeoPDF® and geospatial PDFs using the ISO encoding. They can now be directly added to maps or scenes as raster layers or basemaps without the need to first convert them to another format. The first page of a PDF will be read and georeferenced according to optional embedded spatial reference information, and at a default DPI of 300.
Arcade
Support for new Arcade version
The SDK now supports Arcade 1.33
- Geotrigger notification profile now supports
$.Fence Layer Translatefunction is not yet supported and will be supported in a future release.Text
Projection Engine
Geographic (datum) transformations
- Added geographic (datum) transformation method Molodensky-Badekas (Position Vector). The existing Molodensky-Badekas method uses the Coordinate Frame version of the rotation matrix.
- Added geographic (datum) transformation method NTv2_Velocity. Although the method is designed to support datum anchor epochs and data epochs, only frame epochs of the geographic coordinate systems are currently supported for interframe conversions such as between NAD83(CSRS)v2 and NAD83(CSRS)v8.
SDK enhancements
Additional APIs exposed since 200.7
- 3D:
- Scene view and camera controllers.
- 3D layers types.
- 3D symbology.
- 3D analysis including line of sight and viewshed operations.
- Network Authentication:
- Support for Public Key Infrastructure (PKI), Integrated Windows Authentication (IWA) and server trust workflows.
- For full details of support, see the Security and authentication guide doc.
- Pop-up
First release of ArcGIS Maps SDK for Flutter Toolkit
- Ready-made widgets to simplify development with ArcGIS Maps SDK for Flutter.
- Initial components:
Enhancements to existing API
- Pinch to zoom gesture: a threshold has been added to prevent accidental rotation while zooming. This makes the gesture more reliable. In addition to this, a new property has been added:
InteractionOptions.rotateDuringZoomEnabled. This istrueby default, but can be set tofalseto prevent rotation during a pinch zoom gesture. - Exposed additional list operations,
insert,All remove,Range remove, andWhere retain, on classes that use Dart'sWhere Listinterface.
Breaking API changes
There are no breaking API changes with this release.
Behavior changes
- With this release,
GeometryEngine.reshape()now supports true curves. - With ArcGIS Online now supporting true curves, you can now apply edits to circular arcs in an ArcGIS Online hosted feature service.
- The
wkt2string description of aSpatialReferenceis now read in preference overwktforFeatureLayers andGeodatabases and is also contained in theirSpatial Referenceoutput json. JSONmethod now serializes properties from theSerializable.to JSO N() unknowncollection.JSON - This is the last release where creating an
IntegratedMeshLayerusing theArcGISSceneLayerconstructor workflow is supported. Starting from next release, it is recommended that you use theIntegratedconstructor to create a layer of that type.Mesh Layer
Deprecations
API deprecations
-
The
FeatureSubtype.domainsproperty is deprecated and will be removed in a future release. Use theField.domainin theFeatureSubtype.fieldOverridesinstead. -
Integratedenum value is deprecated fromMesh SceneLayerDataType. -
OpenStreetMap (OSM) basemaps are in mature support and will no longer be updated. They will be removed in a future version of the ArcGIS Maps SDK for Flutter. For more information, see the Overture Maps Data in ArcGIS blog. We recommend that you replace your OSM
BasemapStylewith the equivalent Open Basemap styles, as follows:OSM Basemap style Open Basemap style OSMStandard openOSMStyle OSMStandardRelief openOSMStyleRelief OSMStandardReliefBase openOSMStyleReliefBase OSMStreets openStreets OSMStreetsRelief openStreetsRelief OSMLightGray openLightGray OSMLightGrayBase openLightGrayBase OSMLightGrayLabels openLightGrayLabels OSMDarkGray openDarkGray OSMDarkGrayBase openDarkGrayBase OSMDarkGrayLabels openDarkGrayLabels OSMStreetsReliefBase openStreetsReliefBase OSMBlueprint openBlueprint OSMHybrid openHybrid OSMHybridDetail openHybridDetail OSMNavigation openNavigation OSMNavigationDark openNavigationDark
OS and framework deprecations
There are no OS or framework deprecations with this release.
Issues resolved
Issues addressed in this release are listed below.
- Unable to evaluate
FeatureArcade function referencing aSet By Name() SubtypeFeatureLayerin pop-ups. - The
ServiceFeatureTable.undoLocalEdits()andServiceGeodatabase.undoLocalEdits()methods fail to revert the addition of features in a change-tracked non-spatial table.
Layers configured with custom dictionaries do not display on the map when parsing dictionary version in a web style.- BUG-000174246 - When drawing a graphic line with static rendering mode, unnecessary graphics are drawn along with the graphic line in a 3D
ArcGISSceneView.
- Issue reported on Esri Community: Creating features with non-int64 integer types leads to
ArcGISwhen adding to a feature table with fields defined asException : code=3002; Geodatabase data type mismatch Int16(Field.short) orInt Int32(Field.long). Note that Dart only natively supportsInt Int64, so while this issue has been addressed such that values can be passed to different integer fields in a geodatabase, Dart will truncate any invalid values and so data integrity and validation should be handled at application and/or service level.
Known issues
Known issues or limitations for this release are listed below.
-
Currently feature reduction (or clustering) is only supported by displaying clusters as configured in a web map, as well as the ability to toggle on/off. Exposing the ability to create
FeatureReductionand set to aFeatureLayerorGraphicsOverlayis part of the Flutter parity work. This means that currently theFeatureLayer.featureReductionandGraphicsOverlay.featureReductionsetters are not yet in a usable state. This will be addressed in a subsequent release. -
Passing local file paths to
ModelandScene Symbol.with Uri() Imageconstructors do not work due to a parsing exception. Instead of using, as an example,Frame.with Uri() Image, use theFrame.with Uri(uri) Uriconstructor to strip out everything except the path to pass a cleanUrito the constructor as such:Image.Frame.with Uri( Uri(path : uri.path));
Changes in samples
New Samples
- Add integrated mesh layer
- Add point cloud layer from file
- Add point scene layer
- Display web scene from portal item
- Animate 3D graphic
- Change camera controller
- Display scene
- Display scene from mobile scene package
- Edit geometries with programmatic reticle tool
- Filter features in scene
- Match viewpoint of geo views
- Set surface navigation constraint
- Show extruded features
- Show line of sight between points
- Show realistic light and shadows
- Show viewshed from geoelement in scene
- Show viewshed from point in scene
- Style point with scene symbol
- Select features in scene layer
Enhancements
- Show grid and Group layers together samples enhanced to include 3D support.