Android原生跳转到Flutter页面
1.启动Flutter页面 默认界面
startActivity(
                FlutterActivity.withNewEngine().build(activity!!)
            )
2.启动Flutter指定的界面比如设置界面
Android 中
startActivity(
                FlutterActivity
                    .withNewEngine()
                   .initialRoute("/setting")
                    .build(activity!!))
Flutter中 需要注册路由

遇到的问题,启动Flutter页面比较缓慢,优化
思路:在Application中提前初始化FlutterEngine 进行缓存 从缓存中取FlutterEngine进行启动
fun registerEngine(routerName: String,context: Context) {
        val engine = FlutterEngine(context)
        engine.navigationChannel.setInitialRoute(routerName)
        engine.dartExecutor.executeDartEntrypoint(DartExecutor.DartEntrypoint.createDefault())
        FlutterEngineCache.getInstance().put(routerName,engine)
    }
从缓存中获取
fun getEngine(routerName: String,context: Context) : Intent {
        return FlutterActivity.withCachedEngine(routerName).build(context)
    }
封装后:
package com.bestarschool.parent.util
import android.content.Context
import android.content.Intent
import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.embedding.engine.FlutterEngineCache
import io.flutter.embedding.engine.dart.DartExecutor
object EngineManager {
    // 保存
    fun registerEngine(routerName: String,context: Context) {
        val engine = FlutterEngine(context)
        engine.navigationChannel.setInitialRoute(routerName)
        engine.dartExecutor.executeDartEntrypoint(DartExecutor.DartEntrypoint.createDefault())
        FlutterEngineCache.getInstance().put(routerName,engine)
    }
    // 获取intent
    fun getEngine(routerName: String,context: Context) : Intent {
        return FlutterActivity.withCachedEngine(routerName).build(context)
    }
}
调用启动Flutter RouteManager.setting 为路由名称 /setting
startActivity(
                EngineManager.getEngine(RouteManager.setting,activity!!)
            )
问题:新启动的页面没有返回上一页按钮,但是项目中需要有返回按钮如何解决:思路如下
Scaffold(
      appBar: AppBar(
        leading: IconButton(
            onPressed: () {
              // 退出 flutter 页面
              Navigator.pop();
            },
            icon: Icon(Icons.arrow_back)),
        title: Text("设置页面"),
        centerTitle: true,
      )
这样写的问题 退出后停留在黑屏界面并没有完全退出,解决方案,调用 SystemNavigator.pop();
Scaffold(
      appBar: AppBar(
        leading: IconButton(
            onPressed: () {
              // 退出所有 flutter 页面
              SystemNavigator.pop();
            },
            icon: Icon(Icons.arrow_back)),
        title: Text("设置页面"),
        centerTitle: true,
      )
点击返回按钮能正常退出了,但是点击手机的返回键仍不能完全退出flutter页面,解决办法 ,去掉home 是我自己用法错误

 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号