在使用 FlutterFragment 时使用 Flutter Engine 重置 FlutterFragment 内容

问题描述 投票:0回答:1

我在 Android 应用程序中使用 Flutter 模块。 我在 Activity 中定义了一个处于预热状态的全局 Flutter Engine,并在特定场景需要时将其附加到 FlutterFragment。 下面是触发 onCreate()on Activity 后调用的预热引擎。

void setupFlutterEngine(){
        FlutterEngine flutterEngine=new FlutterEngine(getApplicationContext());

//        Start executing Dart code in the FlutterEngine.
        flutterEngine.getDartExecutor().executeDartEntrypoint(
                DartExecutor.DartEntrypoint.createDefault()
        );

//      Cache the pre-warmed FlutterEngine to be used later by FlutterFragment.
        FlutterEngineCache
                .getInstance()
                .put(FLUTTER_ENGINE_CACHE_TAG, flutterEngine);

    }

一切正常,我正在实例化缓存引擎并将其添加到我的 FlutterFragment 中,如下所示:

FlutterEngine flutterEngine=FlutterEngineCache.getInstance().get(FLUTTER_ENGINE_CACHE_TAG);

flutterMethodChannel = new MethodChannel(flutterEngine.getDartExecutor().getBinaryMessenger(), methodChannelTag);

flutterMethodChannel.setMethodCallHandler(new MethodChannel.MethodCallHandler() {
            @Override
            public void onMethodCall(@NonNull MethodCall call, @NonNull MethodChannel.Result result) {
                
            }
        });

        GeneratedPluginRegistrant.registerWith(flutterEngine); 

flutterFragment = FlutterFragment
                .withCachedEngine(FLUTTER_ENGINE_CACHE_TAG)
                .renderMode(RenderMode.surface)
                .transparencyMode(TransparencyMode.opaque)
                .shouldAttachEngineToActivity(true)
                .build();

我想在片段被销毁时完成flutter模块的当前视图,但不想销毁引擎,我想重用FlutterEngine并想在Flutter中的main()方法下从第一个屏幕重新启动再次添加片段时的模块。

android flutter dart flutter-layout flutter-engine
1个回答
0
投票

我曾经找到过这个问题的解决方案: 只是

    @Override
    public void onFlutterUiNoLongerDisplayed() {
    super.onFlutterUiNoLongerDisplayed();
    if(isFinishing()){
        MethodChannel channel = new MethodChannel(HarriApplication.flutterEngine.getDartExecutor().getBinaryMessenger(), "plugins.harri/settings");
        channel.invokeMethod("popToRoot", null);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.