Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
package io.flutter.embedding.android;

import static io.flutter.embedding.android.FlutterActivityLaunchConfigs.DART_ENTRYPOINT_META_DATA_KEY;
import static io.flutter.embedding.android.FlutterActivityLaunchConfigs.DART_ENTRYPOINT_URI_META_DATA_KEY;
import static io.flutter.embedding.android.FlutterActivityLaunchConfigs.DEFAULT_BACKGROUND_MODE;
import static io.flutter.embedding.android.FlutterActivityLaunchConfigs.DEFAULT_DART_ENTRYPOINT;
import static io.flutter.embedding.android.FlutterActivityLaunchConfigs.DEFAULT_INITIAL_ROUTE;
Expand Down Expand Up @@ -460,6 +461,9 @@ protected FlutterFragment createFlutterFragment() {
+ "Dart entrypoint: "
+ getDartEntrypointFunctionName()
+ "\n"
+ "Dart entrypoint library uri: "
+ (getDartEntrypointLibraryUri() != null ? getDartEntrypointLibraryUri() : "\"\"")
+ "\n"
+ "Initial route: "
+ getInitialRoute()
+ "\n"
Expand All @@ -471,6 +475,7 @@ protected FlutterFragment createFlutterFragment() {

return FlutterFragment.withNewEngine()
.dartEntrypoint(getDartEntrypointFunctionName())
.dartLibraryUri(getDartEntrypointLibraryUri())
.initialRoute(getInitialRoute())
.appBundlePath(getAppBundlePath())
.flutterShellArgs(FlutterShellArgs.fromIntent(getIntent()))
Expand Down Expand Up @@ -693,6 +698,32 @@ public String getDartEntrypointFunctionName() {
}
}

/**
* The Dart library URI for the entrypoint that will be executed as soon as the Dart snapshot is
* loaded.
*
* <p>Example value: "package:foo/bar.dart"
*
* <p>This preference can be controlled by setting a {@code <meta-data>} called {@link
* FlutterActivityLaunchConfigs#DART_ENTRYPOINT_URI_META_DATA_KEY} within the Android manifest
* definition for this {@code FlutterFragmentActivity}.
*
* <p>A value of null means use the default root library.
*
* <p>Subclasses may override this method to directly control the Dart entrypoint uri.
*/
@Nullable
public String getDartEntrypointLibraryUri() {
try {
Bundle metaData = getMetaData();
String desiredDartLibraryUri =
metaData != null ? metaData.getString(DART_ENTRYPOINT_URI_META_DATA_KEY) : null;
return desiredDartLibraryUri;
} catch (PackageManager.NameNotFoundException e) {
return null;
}
}

/**
* The initial route that a Flutter app will render upon loading and executing its Dart code.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,19 @@ protected RenderMode getRenderMode() {
assertEquals(activity.createFlutterFragment().getRenderMode(), RenderMode.texture);
}

@Test
public void createFlutterFragment__customDartEntrypointLibraryUri() {
final FlutterFragmentActivity activity =
new FakeFlutterFragmentActivity() {
@Override
public String getDartEntrypointLibraryUri() {
return "package:foo/bar.dart";
}
};
assertEquals(
activity.createFlutterFragment().getDartEntrypointLibraryUri(), "package:foo/bar.dart");
}

@Test
public void itRegistersPluginsAtConfigurationTime() {
try (ActivityScenario<FlutterFragmentActivity> scenario =
Expand Down Expand Up @@ -348,6 +361,11 @@ public String getDartEntrypointFunctionName() {
return "";
}

@Nullable
public String getDartEntrypointLibraryUri() {
return null;
}

@Override
protected String getInitialRoute() {
return "";
Expand Down