Skip to content

Release notes for 200.8

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.

Hover and pick up events

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.

Geometry editor identify

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: ENH-000168892 Add ability to define the tolerance of a spatial reference.

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(R) 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 $FenceLayer.
  • TranslateText function is not yet supported and will be supported in a future release.

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

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 is true by default, but can be set to false to prevent rotation during a pinch zoom gesture.
  • Exposed additional list operations, insertAll, removeRange, removeWhere, and retainWhere, on classes that use Dart's List interface.

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 wkt2 string description of a SpatialReference is now read in preference over wkt for FeatureLayers and Geodatabases and is also contained in their Spatial Reference output json.
  • JSONSerializable.toJSON() method now serializes properties from the unknownJSON collection.
  • This is the last release where creating an IntegratedMeshLayer using the ArcGISSceneLayer constructor workflow is supported. Starting from next release, it is recommended that you use the IntegratedMeshLayer constructor to create a layer of that type.

Deprecations

API deprecations

  • The FeatureSubtype.domains property is deprecated and will be removed in a future release. Use the Field.domain in the FeatureSubtype.fieldOverrides instead.

  • IntegratedMesh enum value is deprecated from 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 BasemapStyle with the equivalent Open Basemap styles, as follows:

    OSM Basemap styleOpen Basemap style
    OSMStandardopenOSMStyle
    OSMStandardReliefopenOSMStyleRelief
    OSMStandardReliefBaseopenOSMStyleReliefBase
    OSMStreetsopenStreets
    OSMStreetsReliefopenStreetsRelief
    OSMLightGrayopenLightGray
    OSMLightGrayBaseopenLightGrayBase
    OSMLightGrayLabelsopenLightGrayLabels
    OSMDarkGrayopenDarkGray
    OSMDarkGrayBaseopenDarkGrayBase
    OSMDarkGrayLabelsopenDarkGrayLabels
    OSMStreetsReliefBaseopenStreetsReliefBase
    OSMBlueprintopenBlueprint
    OSMHybridopenHybrid
    OSMHybridDetailopenHybridDetail
    OSMNavigationopenNavigation
    OSMNavigationDarkopenNavigationDark

OS and framework deprecations

There are no OS or framework deprecations with this release.

Issues resolved

Issues addressed in this release are listed below.

  • 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 ArcGISException: code=3002; Geodatabase data type mismatch when adding to a feature table with fields defined as Int16 (Field.shortInt) or Int32 (Field.longInt). Note that Dart only natively supports 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 FeatureReduction and set to a FeatureLayer or GraphicsOverlay is part of the Flutter parity work. This means that currently the FeatureLayer.featureReduction and GraphicsOverlay.featureReduction setters are not yet in a usable state. This will be addressed in a subsequent release.

  • Passing local file paths to ModelSceneSymbol.withUri() and ImageFrame.withUri() constructors do not work due to a parsing exception. Instead of using, as an example, ImageFrame.withUri(uri), use the Uri constructor to strip out everything except the path to pass a clean Uri to the constructor as such: ImageFrame.withUri(Uri(path: uri.path));.

Changes in samples

Your browser is no longer supported. Please upgrade your browser for the best experience. See our browser deprecation post for more details.