Class FlutterEngine
- All Implemented Interfaces:
ViewUtils.DisplayUpdater
The FlutterEngine
is the container through which Dart code can be run in an Android
application.
Dart code in a FlutterEngine
can execute in the background, or it can be render to the
screen by using the accompanying FlutterRenderer
and Dart code using the Flutter
framework on the Dart side. Rendering can be started and stopped, thus allowing a
FlutterEngine
to move from UI interaction to data-only processing and then back to UI
interaction.
Multiple FlutterEngine
s may exist, execute Dart code, and render UIs within a single
Android app. For better memory performance characteristics, construct multiple
FlutterEngine
s via FlutterEngineGroup
rather than via
FlutterEngine
's constructor directly.
To start running Dart and/or Flutter within this FlutterEngine
, get a reference to
this engine's DartExecutor
and then use DartExecutor.executeDartEntrypoint(DartExecutor.DartEntrypoint)
. The DartExecutor.executeDartEntrypoint(DartExecutor.DartEntrypoint)
method must not be invoked twice
on the same FlutterEngine
.
To start rendering Flutter content to the screen, use getRenderer()
to obtain a
FlutterRenderer
and then attach a RenderSurface
. Consider using a FlutterView
as a RenderSurface
.
Instatiating the first FlutterEngine
per process will also load the Flutter engine's
native library and start the Dart VM. Subsequent FlutterEngine
s will run on the same VM
instance but will have their own Dart Isolate when the
DartExecutor
is run. Each Isolate is a self-contained Dart environment and cannot
communicate with each other except via Isolate ports.
-
Nested Class Summary
Modifier and TypeClassDescriptionstatic interface
Lifecycle callbacks for Flutter engine lifecycle events. -
Constructor Summary
ConstructorDescriptionFlutterEngine
(Context context) Constructs a newFlutterEngine
.FlutterEngine
(Context context, FlutterLoader flutterLoader, FlutterJNI flutterJNI) Same asFlutterEngine(Context, FlutterLoader, FlutterJNI, String[], boolean)
but with no Dart VM flags and automatically registers plugins.FlutterEngine
(Context context, FlutterLoader flutterLoader, FlutterJNI flutterJNI, PlatformViewsController platformViewsController, String[] dartVmArgs, boolean automaticallyRegisterPlugins) Same asFlutterEngine(Context, FlutterLoader, FlutterJNI, String[], boolean)
, plus the ability to provide a customPlatformViewsController
.FlutterEngine
(Context context, FlutterLoader flutterLoader, FlutterJNI flutterJNI, PlatformViewsController platformViewsController, String[] dartVmArgs, boolean automaticallyRegisterPlugins, boolean waitForRestorationData) Fully configurableFlutterEngine
constructor.FlutterEngine
(Context context, FlutterLoader flutterLoader, FlutterJNI flutterJNI, PlatformViewsController platformViewsController, String[] dartVmArgs, boolean automaticallyRegisterPlugins, boolean waitForRestorationData, FlutterEngineGroup group) FlutterEngine
(Context context, FlutterLoader flutterLoader, FlutterJNI flutterJNI, String[] dartVmArgs, boolean automaticallyRegisterPlugins) Same asFlutterEngine(Context, FlutterLoader, FlutterJNI)
, plus Dart VM flags indartVmArgs
, and control over whether plugins are automatically registered with thisFlutterEngine
inautomaticallyRegisterPlugins
.FlutterEngine
(Context context, String[] dartVmArgs) Same asFlutterEngine(Context)
with added support for passing Dart VM arguments.FlutterEngine
(Context context, String[] dartVmArgs, boolean automaticallyRegisterPlugins) Same asFlutterEngine(Context)
with added support for passing Dart VM arguments and avoiding automatic plugin registration.FlutterEngine
(Context context, String[] dartVmArgs, boolean automaticallyRegisterPlugins, boolean waitForRestorationData) Same asFlutterEngine(Context, String[], boolean)
with added support for configuring whether the engine will receive restoration data. -
Method Summary
Modifier and TypeMethodDescriptionvoid
Adds alistener
to be notified of Flutter engine lifecycle events, e.g.,onPreEngineStart()
.void
destroy()
Cleans up all components within thisFlutterEngine
and destroys the associated Dart Isolate.System channel that sends accessibility requests and events from Flutter to Android.System channel that sends back gesture commands from Android to Flutter.The Dart execution context associated with thisFlutterEngine
.System channel that allows manual installation and state querying of deferred components.System channel that sends Android lifecycle events to Flutter.System channel that sends locale data from Android to Flutter.io.flutter.plugin.localization.LocalizationPlugin
The LocalizationPlugin this FlutterEngine created.System channel that sends and receives text input requests and state.System channel that sends Flutter navigation commands from Android to Flutter.System channel that sends platform-oriented requests and information to Flutter, e.g., requests to play sounds, requests for haptics, system chrome settings, etc.PlatformViewsController
, which controls all platform views running within thisFlutterEngine
.Plugin registry, which registers plugins that want to be applied to thisFlutterEngine
.System channel that sends text processing requests from Flutter to Android.The rendering system associated with thisFlutterEngine
.System channel to exchange restoration data between framework and engine.System channel that sends platform/user settings from Android to Flutter, e.g., time format, scale factor, etc.System channel that sends and receives spell check requests and results.System channel that sends memory pressure warnings from Android to Flutter.System channel that sends and receives text input requests and state.void
Removes alistener
that was previously added withaddEngineLifecycleListener(EngineLifecycleListener)
.void
updateDisplayMetrics
(float width, float height, float density) Publishes display metrics to Dart code in Flutter.
-
Constructor Details
-
FlutterEngine
Constructs a newFlutterEngine
.A new
FlutterEngine
does not execute any Dart code automatically. SeegetDartExecutor()
andDartExecutor.executeDartEntrypoint(DartExecutor.DartEntrypoint)
to begin executing Dart code within thisFlutterEngine
.A new
FlutterEngine
will not display any UI until aRenderSurface
is registered. SeegetRenderer()
andFlutterRenderer.startRenderingToSurface(Surface, boolean)
.A new
FlutterEngine
automatically attaches all plugins. SeegetPlugins()
.A new
FlutterEngine
does come with all default system channels attached.The first
FlutterEngine
instance constructed per process will also load the Flutter native library and start a Dart VM.In order to pass Dart VM initialization arguments (see
FlutterShellArgs
) when creating the VM, manually set the initialization arguments by callingFlutterLoader.startInitialization(Context)
andFlutterLoader.ensureInitializationComplete(Context, String[])
before constructing the engine. -
FlutterEngine
Same asFlutterEngine(Context)
with added support for passing Dart VM arguments.If the Dart VM has already started, the given arguments will have no effect.
-
FlutterEngine
public FlutterEngine(@NonNull Context context, @Nullable String[] dartVmArgs, boolean automaticallyRegisterPlugins) Same asFlutterEngine(Context)
with added support for passing Dart VM arguments and avoiding automatic plugin registration.If the Dart VM has already started, the given arguments will have no effect.
-
FlutterEngine
public FlutterEngine(@NonNull Context context, @Nullable String[] dartVmArgs, boolean automaticallyRegisterPlugins, boolean waitForRestorationData) Same asFlutterEngine(Context, String[], boolean)
with added support for configuring whether the engine will receive restoration data.The
waitForRestorationData
flag controls whether the engine delays responding to requests from the framework for restoration data until that data has been provided to the engine viaRestorationChannel.setRestorationData(byte[] data)
. If the flag is false, the framework may temporarily initialize itself to default values before the restoration data has been made available to the engine. SettingwaitForRestorationData
to true avoids this extra work by delaying initialization until the data is available.When
waitForRestorationData
is set,RestorationChannel.setRestorationData(byte[] data)
must be called at a later point in time. If it later turns out that no restoration data is available to restore the framework from, that method must still be called with null as an argument to indicate "no data".If the framework never requests the restoration data, this flag has no effect.
-
FlutterEngine
public FlutterEngine(@NonNull Context context, @Nullable FlutterLoader flutterLoader, @NonNull FlutterJNI flutterJNI) Same asFlutterEngine(Context, FlutterLoader, FlutterJNI, String[], boolean)
but with no Dart VM flags and automatically registers plugins.flutterJNI
should be a new instance that has never been attached to an engine before. -
FlutterEngine
public FlutterEngine(@NonNull Context context, @Nullable FlutterLoader flutterLoader, @NonNull FlutterJNI flutterJNI, @Nullable String[] dartVmArgs, boolean automaticallyRegisterPlugins) Same asFlutterEngine(Context, FlutterLoader, FlutterJNI)
, plus Dart VM flags indartVmArgs
, and control over whether plugins are automatically registered with thisFlutterEngine
inautomaticallyRegisterPlugins
. If plugins are automatically registered, then they are registered during the execution of this constructor. -
FlutterEngine
public FlutterEngine(@NonNull Context context, @Nullable FlutterLoader flutterLoader, @NonNull FlutterJNI flutterJNI, @NonNull PlatformViewsController platformViewsController, @Nullable String[] dartVmArgs, boolean automaticallyRegisterPlugins) Same asFlutterEngine(Context, FlutterLoader, FlutterJNI, String[], boolean)
, plus the ability to provide a customPlatformViewsController
. -
FlutterEngine
public FlutterEngine(@NonNull Context context, @Nullable FlutterLoader flutterLoader, @NonNull FlutterJNI flutterJNI, @NonNull PlatformViewsController platformViewsController, @Nullable String[] dartVmArgs, boolean automaticallyRegisterPlugins, boolean waitForRestorationData) Fully configurableFlutterEngine
constructor. -
FlutterEngine
@VisibleForTesting(otherwise=3) public FlutterEngine(@NonNull Context context, @Nullable FlutterLoader flutterLoader, @NonNull FlutterJNI flutterJNI, @NonNull PlatformViewsController platformViewsController, @Nullable String[] dartVmArgs, boolean automaticallyRegisterPlugins, boolean waitForRestorationData, @Nullable FlutterEngineGroup group)
-
-
Method Details
-
destroy
public void destroy()Cleans up all components within thisFlutterEngine
and destroys the associated Dart Isolate. All state held by the Dart Isolate, such as the Flutter Elements tree, is lost.This
FlutterEngine
instance should be discarded after invoking this method. -
addEngineLifecycleListener
Adds alistener
to be notified of Flutter engine lifecycle events, e.g.,onPreEngineStart()
. -
removeEngineLifecycleListener
Removes alistener
that was previously added withaddEngineLifecycleListener(EngineLifecycleListener)
. -
getDartExecutor
The Dart execution context associated with thisFlutterEngine
.The
DartExecutor
can be used to start executing Dart code from a given entrypoint. SeeDartExecutor.executeDartEntrypoint(DartExecutor.DartEntrypoint)
.Use the
DartExecutor
to connect any desired message channels and method channels to facilitate communication between Android and Dart/Flutter. -
getRenderer
The rendering system associated with thisFlutterEngine
.To render a Flutter UI that is produced by this
FlutterEngine
's Dart code, attach aRenderSurface
to thisFlutterRenderer
. -
getAccessibilityChannel
System channel that sends accessibility requests and events from Flutter to Android. -
getLifecycleChannel
System channel that sends Android lifecycle events to Flutter. -
getLocalizationChannel
System channel that sends locale data from Android to Flutter. -
getBackGestureChannel
System channel that sends back gesture commands from Android to Flutter. -
getPlatformChannel
System channel that sends platform-oriented requests and information to Flutter, e.g., requests to play sounds, requests for haptics, system chrome settings, etc. -
getProcessTextChannel
System channel that sends text processing requests from Flutter to Android. -
getRestorationChannel
System channel to exchange restoration data between framework and engine.The engine can obtain the current restoration data from the framework via this channel to store it on disk and - when the app is relaunched - provide the stored data back to the framework to recreate the original state of the app.
-
getSettingsChannel
System channel that sends platform/user settings from Android to Flutter, e.g., time format, scale factor, etc. -
getDeferredComponentChannel
System channel that allows manual installation and state querying of deferred components. -
getSystemChannel
System channel that sends memory pressure warnings from Android to Flutter. -
getMouseCursorChannel
System channel that sends and receives text input requests and state. -
getTextInputChannel
System channel that sends and receives text input requests and state. -
getSpellCheckChannel
System channel that sends and receives spell check requests and results. -
getPlugins
Plugin registry, which registers plugins that want to be applied to thisFlutterEngine
. -
getLocalizationPlugin
@NonNull public io.flutter.plugin.localization.LocalizationPlugin getLocalizationPlugin()The LocalizationPlugin this FlutterEngine created. -
getPlatformViewsController
PlatformViewsController
, which controls all platform views running within thisFlutterEngine
. -
getActivityControlSurface
-
getServiceControlSurface
-
getBroadcastReceiverControlSurface
-
getContentProviderControlSurface
-
updateDisplayMetrics
public void updateDisplayMetrics(float width, float height, float density) Description copied from interface:ViewUtils.DisplayUpdater
Publishes display metrics to Dart code in Flutter.- Specified by:
updateDisplayMetrics
in interfaceViewUtils.DisplayUpdater
-