Documentation Index
Fetch the complete documentation index at: https://launchdarkly-preview.mintlify.app/llms.txt
Use this file to discover all available pages before exploring further.
Overview
This topic explains the changes in the Flutter SDK version 4 release and how to migrate to that version. Version 4.0 includes breaking changes. Version 4 of the Flutter SDK is now implemented in Flutter and supports development on all Flutter platforms. As part of this update, version 4 includes the following changes:- The Flutter SDK now uses either a mobile key or a client-side ID as its credential, depending on the platform that you build for. To learn more, read Understanding changes to initialization.
- Setting the configuration options no longer uses a builder pattern. You can set the configuration options directly, including the credential. Then, pass the configuration object to the client when you instantiate it. To learn more, read Understanding changes to LDConfig.
- The
LDClientis not required to be a singleton. Instead, you instantiate the client with configuration options and a context, and then call functions on this instance. To learn more, read Understanding changes to LDClient and LDValue. - Most of the
LDClientmethods are now synchronous, and do not needawait. To learn more, read Understanding changes to LDClient and LDValue. - The mechanics of some of the connecting, listening, and fetching functionality has changed. To learn more, read Understanding changes to connecting, listening, and fetching.
- Anonymous contexts now have the same behavior across all platforms. Anonymous contexts now respect the key provided. In the Flutter SDK version 3, anonymous contexts on Android would have their provided key overwritten with a generated key, while anonymous contexts on iOS would have their provided key respected.
- The
LDContextbuilder now provides setters for primitive types, so that you do not need to create theLDValues yourself. Each setter also provides an optional parameter to indicate whether the attribute is private. To learn more, read Understanding changes to LDContext. - Logging is now available. To learn more, read Logging.
Understanding changes to initialization
The Flutter SDK version 4 uses either a mobile key or a client-side ID as its credential, depending on the platform that you build for. If you are building for Windows, Mac, Linux, Android, or iOS, you must use a mobile key. If you are building for a web browser, you must use a client-side ID. In version 3, only a mobile key was accepted. Your environment’s mobile key and client-side ID are both available from the Environments list for each project. You can set these credentials in theLAUNCHDARKLY_MOBILE_KEY and LAUNCHDARKLY_CLIENT_SIDE_ID environment variables, and then use the CredentialSource helper to select your credential and provide it to your configuration. CredentialSource expects one of the two environment variables to be set, but not both.
Here’s how to provide credentials in your configuration options:
Understanding changes to LDConfig
In version 4 of the Flutter SDK, you can set the configuration options directly. The credential and automatic environment attributes configuration options are required. All other configuration options are optional and use default values if not set. After you set the configuration, you can create a client using the configuration and a context. Here’s an example that configures the credential, automatic environment attributes, and evaluation reasons options:Understanding changes to LDClient and LDValue
In version 4 of the Flutter SDK, theLDClient is no longer a singleton. Instead, you create a client of type LDClient and then call functions on it. You must change your initialization code to accommodate this.
Here’s how:
LDClient methods are now synchronous, and do not need an await in version 4 of the SDK. The close, flush, identify, and clear methods are asynchronous and still need an await. However, the other LDClient methods, including the *Variation methods for evaluating flags, are now synchronous:
LDClient methods that use parameters with the type LDValue now require that you pass in an LDValue explicitly. In version 3 of the SDK, you could pass in null for these parameters. In version 4, you must use an LDValue of null. To learn more, read LDValue.
Understanding changes to connecting, listening, and fetching
In version 4 of the Flutter SDK, there are a few breaking changes to client methods for connecting, listening, and fetching.Connection mode changes
It is rare to change the client’s connection mode from the default. If you do set the client’s connection mode on startup, the specifics have changed. In version 4, use theinitialConnectionMode configuration option:
offline:
Subscribing to flag changes
To subscribe to feature flag changes, register listeners for change events from the SDK. The format for doing this has changed in version 4 of the SDK. Here’s how:Background fetch
If you are using the Flutter SDK version 4 on desktop or on the web, by default your application will continue to get updates. For example, if the end user minimizes your Windows app or moves to a different tab in their web browser, the SDK will continue to fetch flags in the background. You can change this behavior in your client configuration. If you are using the Flutter SDK version 4 in a power-constrained situation, such as in a mobile application on iOS or Android, the SDK will not receive real-time events when backgrounded. In the Flutter SDK version 3, the SDK did receive real-time events through background fetch on Android platforms, but not on iOS platforms. In version 4 of the SDK, this behavior has been standardized. Mobile applications do not receive real-time events when backgrounded.Understanding changes to LDContext
TheLDContext builder now provides setters for primitive types, so that you do not need to create the LDValues yourself.
Starting in version 4, the Flutter SDK provides setBool, setNum, and setString methods that you can use when you attributes to a context. Each setter also provides an optional parameter to indicate whether the attribute is private.
Here’s how:
Logging
Version 4 of the Flutter SDK now supports logging. By default, the SDK logs at theinfo level with a tag of “LaunchDarkly.” To change the logging, construct an LDLogger and include it in your LDConfig. You can change the log level, tag, and output destinations when you construct the logger.
Here’s how: