摘自:网易新闻客户端Flutter混合开发实践

引言
网易新闻项目本身很庞大,业务繁多,全部改为Flutter实现肯定是不现实的,在使用Flutter的前期阶段,我们挑选了相对独立的几个模块,在现有工程的基础上对其进行Flutter改造,以循序渐进的改造方式保证项目稳健,下面以Android为例,从以下几个方面介绍下此混合开发实践过程:

Flutter集成方式

如上介绍说明,开发者可以使用Flutter开始一个全新的应用,也可以把Flutter作为应用的一个module,把这个module引入到现有的工程中,因此有如下图的两种接入方式:

网易新闻采用上图右所示的方式,以现有工程为主端的Flutter Module的方式集成到现有工程中去,具体集成方法可参考https://github.com/flutter/flutter/wiki/Add-Flutter-to-existing-apps,开发者在lib文件下使用Dart语言编写相应的业务代码。

混合栈及路由

以module的方式接入Flutter, 对于要改造的模块或者页面,在Activity或Fragment的onCreateView中创建FlutterView,Activity或者Fragment为FlutterView的一个容器;另Flutter的framework层提供的navigator管理控制Flutter内部的页面, 如下图中pageWidgetC1,C2,C3的都为Dart实现的flutter页面,而它们是处在同一个Activity中的,因此就有了混合栈的问题(原生栈和Flutter内部栈同时存在)。

对于混合栈路由的处理,如下图左所示,一个Activity里有多个Flutter页面,Flutter之间的跳转切换由Flutter内部栈管理,不过相应的对于页面跳转动画,手势右滑跟随退出等效果也要同原生端效果再实现一套,且需要同Android,iOS原生端现有的保持一致性,但Android,iOS两端现有的本来就是不一致的,因此就有了如下右图所示的第二个方案,一个Activitiy对应一个Flutter页面,路由由原生维护一套,Flutter页面之间的跳转其实是Native的跳转,比如Flutter page1跳转Flutter Page2,需要page1通过约定的消息协议通知到Native,Native收到跳转Flutter页面的协议后会再开启一个承载FlutterView的Activity来绘制Flutter page2页面,但该方案对于跳转层级比较深的页面,多个FlutterView实例对于性能有一定的损耗,因为每个flutterView的底层对应一个engine, 且页面比较隔离,对于数据同步问题要通过native获取,当然对于第一个方案混合路由来说,在原生页面和Flutter页面交替出现的场景下,也同样会存在这些问题。


这两种方案都是可选的,但都不是最优方案,Flutter设计的初衷应该是多以新的纯的Flutter工程为出发点来支持跨平台开发的,对于在现有工程改造的混合开发没有很好的支持,具体采用哪种方案,根据自己项目情况来定,或者更改Flutter的engine来优化内存和数据同步等问题。
网易新闻因为前期选取的改造模块比较独立,一个模块对应一个Activtiy, 该Activtiy里有多个Flutter页面,对于跳转动画,手势右滑跟随退出等效果同Android原生端效果一致,且在统一路由跳转处增加配置项,可切换一对一方案,这样可以保证iOS的接入与原生的交互体验一致性,后续随着越来越多的业务模块改造,对于现有设计方案,我们会不断更新调整优化。

稳定性保证

对于稳定性保证采用如下方案:
选取个别渠道上进行灰度测试;
动态接口开关控制用户逐渐放量测试;
通过FlutterError.onError和runZoned捕获异常,异常错误信息用channel机制通过native上报到崩溃收集系统(fabric-Crashlytics)。
上线情况:网易新闻Flutter用户量由4%逐渐放量到目前10%, 在几个版本的迭代过程中,异常收集达到万分之一,已达到生产标准。

Flutter开发之《网易新闻客户端Flutter混合开发实践》笔记(52)相关推荐

  1. 视频教程-Flutter布局实战网易新闻客户端-flutter

    Flutter布局实战网易新闻客户端 Flutter书籍作者.曾任职于多家互联网大型企业,担任移动端项目技术负责人,主导研发和攻关技术难题,项目涉及教育.金融.医疗.交通.车载设备.智能家居等众多领域 ...

  2. IOS开发——仿网易新闻客户端

    IOS开发--仿网易新闻客户端 本文没有内容,传个资源 衔接地址:http://download.csdn.net/detail/u012881779/7152281 左侧导航部分: 新闻版块 订阅版 ...

  3. 网易新闻客户端Flutter混合开发实践

    转载:http://dy.163.com/v2/article/detail/EA0O4PQ705376OPS.html Flutter简单介绍 Flutter是Google打造的UI工具包,帮助开发 ...

  4. android 网易新闻 详情页面实现,Android实现网易新闻客户端首页效果

    关于实现网易新闻客户端的界面,以前写过很多博客,请参考: 今天用ViewPager + FragmentAdapter + ViewPagerIndicator来实现. ViewPagerIndica ...

  5. 模仿网易新闻客户端(RSS版)(二)

    一.摘要 继上一篇博客<模仿网易新闻客户端(一)>之后,笔者继续开发我们自己的"网易新闻客户端",由于找不到现成的url新闻链接地址,所以这里就用RSS订阅所提供的ur ...

  6. Android高仿网易新闻客户端之首页

    关于实现网易新闻客户端的界面,以前写过很多博客,请参考: Android实现网易新闻客户端效果 Android实现网易新闻客户端侧滑菜单(一) Android实现网易新闻客户端侧滑菜单(二) 今天用V ...

  7. android 高仿网易新闻,Android高仿网易新闻客户端

    关于实现网易新闻客户端的界面,以前写过很多博客,请参考: 今天用ViewPager + FragmentAdapter + ViewPagerIndicator来实现. ViewPagerIndica ...

  8. android 网易新闻 登录界面,Android实现网易新闻客户端首页效果

    关于实现网易新闻客户端的界面,以前写过很多博客,请参考: 今天用ViewPager + FragmentAdapter + ViewPagerIndicator来实现. ViewPagerIndica ...

  9. Android Studio精彩案例(四)《DrawerLayout使用详解仿网易新闻客户端侧边栏 》

    转载本专栏文章,请注明出处,尊重原创 .文章博客地址:道龙的博客 为了提高兴趣,咱们开头先看看最终要实现什么样的效果: 侧拉菜单在Android应用中非常常见,它的实现方式太多了,今天我们就说说使用G ...

最新文章

  1. python SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: trunca
  2. OpenNI框架介绍
  3. 输出nginx执行过程中函数调用关系
  4. java.nio.file.NoSuchFileException
  5. 批量操作WinRAR实用技巧七招
  6. 图解linux下top命令的使用
  7. NOIP2009 最优贸易
  8. 回测引擎代码分析流程图
  9. 《ETL原理及应用》学习笔记 ·004【kettle的使用-2】
  10. jquery事件绑定与事件委托
  11. 在Objective-C中浅谈面向对象
  12. 军哥lnmp一键安装包详解
  13. java 实现电子签名_java swing实现手写板电子签名系统
  14. 京东天猫茅台抢购代码的一些总结
  15. win10重置网络命令_重置网络:Win10重置网络的技巧
  16. 第三阶段应用层——1.2 数码相册—字符编码
  17. n个人围成一圈,顺序编号。从第一个人开始从1到m报数,凡报到m的人退出圈子,编程求解最后留下的人的初始编号。
  18. 远程公司内网服务器【内网穿透】
  19. Eclipse SWT 创建项目(一)
  20. vue之使用vue-cli搭建SPA项目

热门文章

  1. Adaptive Execution让Spark SQL更高效更好用
  2. ubuntu server 改变系统语言支持中文
  3. Oracle 用数据泵导入导出数据
  4. [转]C++基础:C++的结构struct
  5. sysbench 性能测试
  6. 如何在cnblogs中插入LaTeX数学公式
  7. 【知识强化】第二章 进程管理 2.1 进程与线程
  8. AI 实验--v_JULY_v
  9. HTML Meta中添加X-UA-Compatible和IE=Edge,chrome=1有什么作用?
  10. hdu 2459 (后缀数组+RMQ)