启动特定的 Flutter 屏幕

pos*_*ron 2 android flutter

我有一个有 3 个屏幕的应用程序。我还有平台特定的代码,其中 html 文件由我的应用程序处理。我希望实现的是每次用户打开一个 html 文件时,它都会在我的应用程序中打开,并打开特定页面,比方说 2。我有代码来处理应用程序中打开的文件(当只有一个屏幕时),但我不确定如何处理多个屏幕。

这个相关代码:

   @Override
  public void configureFlutterEngine(FlutterEngine flutterEngine) {
    GeneratedPluginRegistrant.registerWith(flutterEngine);
    new MethodChannel(getFlutterEngine().getDartExecutor(), CHANNEL).setMethodCallHandler(new MethodCallHandler() {
      @Override
      public void onMethodCall(MethodCall call, MethodChannel.Result result) {
        if (call.method.equals("getReportFile")) {
          try {
            String res = getReportFile();
            result.success(res);
          } catch (SameFilesException e) {
            Log.i(TAG, e.getLocalizedMessage());
          }
        }
      }
    });
  }
Run Code Online (Sandbox Code Playgroud)

理想情况下,我希望能够从 MainActivity 设置特定屏幕,因为它可以在 MVC 模式中很好地发挥作用,但我不确定如何去做。有人提到https://api.flutter.dev/javadoc/io/flutter/embedding/android/FlutterActivity.html#getInitialRoute--,但我不确定在哪里可以使用方法1:传递布尔值作为FlutterActivityLaunchConfigs。 EXTRA_INITIAL_ROUTE 与启动 Intent,在 MainActivity 执行期间。

Igo*_*din 6

您可以扩展io.flutter.embedding.android.FlutterActivity以覆盖初始路线或飞镖入口点。也可以推送和弹出路由:

import io.flutter.embedding.android.FlutterActivity;
import io.flutter.embedding.engine.FlutterEngine;
import io.flutter.embedding.engine.plugins.shim.ShimPluginRegistry;
import io.flutter.plugins.GeneratedPluginRegistrant;

public class MainActivity extends FlutterActivity {
    @NonNull
    @Override
    public String getDartEntrypointFunctionName() {
        return "anotherMain";
    }

    @NonNull
    @Override
    public String getInitialRoute() {
        String action = getIntent().getAction();

        // Initial route depends on intent's action
        if (action != null && action.equals("example_action")) {
            return "some_route";
        } else {
            return "another_route";
        }
    }

    @Override
    protected void onNewIntent(@NonNull Intent intent) {
        String action = intent.getAction();

        // Example action
        boolean routeIntent = action != null && action.equals("push_a_route");
        FlutterEngine engine = getFlutterEngine();

        if (routeIntent && engine != null) {
            // Pushing a new route when new intent received
            engine.getNavigationChannel().pushRoute("some_route");
        }
    }

    @Override
    public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine) {
        super.configureFlutterEngine(flutterEngine);
        GeneratedPluginRegistrant.registerWith(new ShimPluginRegistry(flutterEngine));
    }
}
Run Code Online (Sandbox Code Playgroud)