alibaba / flutter_boost

FlutterBoost is a Flutter plugin which enables hybrid integration of Flutter for your existing native apps with minimum efforts
https://github.com/alibaba/flutter_boost
MIT License
6.94k stars 1.22k forks source link

Android 原生应用将flutter嵌入到FlutterFragment,返回键问题 #914

Open lv823063712 opened 3 years ago

lv823063712 commented 3 years ago

在使用中发现了一个问题,原生Fragment嵌入flutter,flutter内部打开了多个flutter界面,一按手机返回键直接返回到上一个activity了,而不是返回到上一个flutter界面。

操作 :MainAcitvity(Fragment依附的Activity)->Fragment(添加FlutterFragment的Fragment)->FlutterFragment->main.dart->test.dart 点击手机的返回键 预期:返回到main.dart界面 实际:触发了MainActivity处理返回键的问题

嵌入方法 var mFragment = FlutterFragment.NewEngineFragmentBuilder() .url("flutterPage") .params(params) .build<FlutterFragment>() var beginTransaction = childFragmentManager.beginTransaction() beginTransaction.add(R.id.flutterfragmentsa, mFragment).commit() beginTransaction.show(mFragment)

mainActivity 处理返回键的方法

override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean { if (keyCode == KeyEvent.KEYCODE_BACK && event?.repeatCount == 0) { if ((System.currentTimeMillis() - mExitTime) > 2000) { toast(getString(R.string.tips_global_again_exit)) mExitTime = System.currentTimeMillis() } else { UserUtil.removeIsLoadFlutter(mActivity) Utils.deleteFilesByDirectory(File("" + this.cacheDir + "/image_manager_disk_cache")) MyApplication.mContext.exitApp() } return true } return super.onKeyDown(keyCode, event) }

框架中找了半天没有找到处理的方法

duaiyun1314 commented 3 years ago

别等了,兄弟

lv823063712 commented 3 years ago

别等了,兄弟

为啥?是这个没了么

duaiyun1314 commented 3 years ago

别等了,兄弟

为啥?是这个没了么

监听activity的返回然后通过channel传递给flutter侧,让flutter的navigator来处理

KevinGong2013 commented 3 years ago

或者在dart端,自定义route把返回键的事件冒泡上来,然后再确定是否需要调用flutter boost的pop方法

noborder commented 3 years ago

你的flutter sdk 是什么版本,如果是1.22的话,需要用 origin/v1.22.4-hotfixes 分支