Flutter Android FlutterEngineCache 启动白屏。分析与解决 耗时2days

Posted 安果移不动

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flutter Android FlutterEngineCache 启动白屏。分析与解决 耗时2days相关的知识,希望对你有一定的参考价值。

项目背景

原生android 集成 Flutter Module 

原生Android里面加了一个入口。这个入口跳进去是Flutter页面 但是需要传递路由参数并与原生形成交互

最下面是解决方案。上面是整个的采坑流程。这个坑还很深。还没空往下看看是为什么。因为项目在走迭代。以后感兴趣或者是有能力分析出来的小伙伴可以发博客给我看看

https://flutter.cn/docs/development/add-to-app/android/add-flutter-screen?tab=custom-activity-launch-kotlin-tab

todo

解决方案可能有点野 但是解决了。。。官方文档没有的部分。。。。因为官方都想不到。你要这么整!

解决方案就是没有使用 FlutterEngineCache的方式启动  直接使用集成的方式 然后这个与原生交互就完成了对吧


class MyFlutterActivity : FlutterActivity() {




    override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
        super.configureFlutterEngine(flutterEngine)
        MethodChannel(flutterEngine.dartExecutor.binaryMessenger, FlutterRouterUtils.CHANNEL)
            .setMethodCallHandler(ETGMethodCallHand(activity))

    }


}

那么问题来了。这个这个。。路由是怎么解决的。这里没有路由方法调用 

    fun initFlutterCachedEngine(
        content: Context,
        flutterEngine: FlutterEngine,
        mRouterPath: String
    ) {
        // Instantiate a FlutterEngine.

        MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL)
            .setMethodCallHandler(ETGMethodCallHand(content))
        flutterEngine.getNavigationChannel().setInitialRoute(mRouterPath)
        // Start executing Dart code to pre-warm the FlutterEngine.
        flutterEngine.dartExecutor.executeDartEntrypoint(
            DartExecutor.DartEntrypoint.createDefault()
        )

        // Cache the FlutterEngine to be used by FlutterActivity or FlutterFragment.
        FlutterEngineCache
            .getInstance()
            .put(ENGINE_XIAOKAISHUATI, flutterEngine)
    }

先初始化这个引擎并绑定这个

 

但是这个路由是怎么设置上去的呢?

 

以上是关于Flutter Android FlutterEngineCache 启动白屏。分析与解决 耗时2days的主要内容,如果未能解决你的问题,请参考以下文章

Flutter(六)Android与Flutter混合开发(Hybird)

flutter-android打包

在android studio中自定义flutter app:打开android flutter代码

Android项目集成Flutter

Flutter与Android通信的三种方式

【Flutter】运行安卓报错:flutter doctor --android-licenses报错