重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
本文中native和flutter的跳转是借助于咸鱼的FlutterBoost和ARouter框架实现的。
我们提供的服务有:成都网站建设、成都网站制作、微信公众号开发、网站优化、网站认证、灵台ssl等。为近千家企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的灵台网站制作公司
Sync Now...
flutterBoost中需要给每个页面定义一个router_path,然后根据router_path找到对应页面再跳转。
在Application的onCreate中初始化
android jump to flutter
flutter jump to android
本文演示flutter创建 page1 和 page2 两个页面,并且页面之间跳转添加动画
:之所以让AppDelegate继承于UINavigationControllerDelegate,并实现navigationController:willShow方法, ,所以实现代理方法对导航栏的显示做了判断。
JumpTestViewController.swift 为:
JumpChannel.kt :
SecondActivity.kt :
在AndroidManifest.xml的application中注册SecondActivity:
在res文件夹下创建一个layout文件夹,并添加activity_second.xml文件:
Demo: flutter_jumpto_native
使用flutter_webview_plugin 加载一个H5页面,是从dart页面中跳转h5页面,h5页面中可返回dart页面,也可跳转到其他dart页面。
经测试,在Android上可正常使用,但在ios上关闭web页面时显示白屏,web页面并没有close,还没找到原因。。。
现象:
flutter页面通过present跳转原生页面后,原生页面上的点击会首先响应下面的flutter页面中的内容(比如按钮什么的)。
这是flutter框架一直存在的一个bug。在github上有相关的issue。
原因推测:
推测是flutter对控制器(或者view)加了分类,重写了控制器的点击事件,用来计算是否在对应的点击位置有flutter响应事件。没有的话再扔出去点击事件。
解决方案1:
在原生控制器中,加入点击事件的几个方法的空实现,用以覆盖flutter框架中的实现:
-(void)touchesBegan:(NSSetUITouch * *)touches withEvent:(UIEvent *)event{
}
-(void)touchesMoved:(NSSetUITouch * *)touches withEvent:(UIEvent *)event{
}
-(void)touchesCancelled:(NSSetUITouch * *)touches withEvent:(UIEvent *)event{
}
-(void)touchesEnded:(NSSetUITouch * *)touches withEvent:(UIEvent *)event{
}
让事件不被flutter截获即可。
解决方案2:
直接切换window的根控制器到原生控制器即可。别忘暂时保存flutter控制器。
在返回时再切换回flutter中。
解决方案3:
在flutter跳转到原生页面之前,在flutter中加上一个蒙层,用来隔绝手势往flutter下面的view传递。原生页面返回flutter时再移除这个蒙层。