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  是我自己用法错误

 

原文地址:http://www.cnblogs.com/jiayonghua/p/16921872.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性