热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

flutterapp开发过程

项目中出现的一些花心思的点,记录下来:1.tabbar对应的不同widget的界面的实例好像不是存在在内存中,而且切换一次重新创建一次。

项目中出现的一些花心思的点,记录下来:

1. tabbar对应的不同widget的界面的实例好像不是存在在内存中,而且切换一次重新创建一次。

做法:第三方库lazy_indexed_stack

2. loading库使用的是flutter_easyloading,但是是全局的, 需要首页几个tab页各自对应的有loading。

做法:定义一个LoadingContainer,包含Stack,children一个是原有的界面,一个是loading。

3. webview 用的flutter_webview_plugin,返回时要调用flutterWebViewPlugin.close(),不然导航栏看着会怪异。

做法: 用webview_flutter。

4. webview上如何再push view? 只好替换为webview_flutter。

做法:用webview_flutter。

5. flutter页面没有iOS中到viewWillAppear 和viewDidAppear等生命周期方法,有个需求要在首页设置statusBar为light,其他页面设置为dark。如何达到这个生命周期方法的效果呢?

做法: 未想到。

6. 如果使用WillPopScope,如webview里用它来做多个网页的返回,但是手势返回就会失效。

做法: 如果是网页,设计上应该做类似微信内网页模块效果,底部加上前进和后退的按钮,这样能支持手势返回。

7. 性能需求的解决方案,如帧率,内存使用,CPU使用,消耗CPU或GPU的点,开发中哪些需要注意的优化点等。

目前帧率采用第三方库:statsfl, 在iPhone7上,整体都是流畅的,包括长列表,webview会有点掉帧,其他页面跳转时有点掉帧。

优化点:

a. 透明度:设计上喜欢弄导航栏渐变,目前发现导航栏渐变会导致明显的卡顿,做了一点小优化,alpha改变了一定范围后再setState刷新界面。

8. 本地日志,如何采用mmap的日志方案?

有美团logan的方案。

9. 如何进行异常和崩溃采集?

是否能看到崩溃点的堆栈信息,待试验?

10. 关于 null safety。

swift的一大优点就在于空安全,dart在最近的版本中引入了空安全,对业务代码改动太多。

11. 关于埋点。

12. 内存回收的原理,以及是否有泄露的问题?

13. setState差别

flutter是全部更新,而不是只更新函数体内的状态。这点好像与react有区别。那么全部更新会有性能问题吗?flutter本身又会有复用的机制。

14. 线程的差别

flutter默认采用的是单线程

如果用多线程,线程是独立的内存,这样也方便dart进行内存的回收可以更快速便捷;与iOS不一样,iOS是线程间共享内存。

异步是采用事件循环的方式,与js相同。

计算密集的方式,采用computer会开启线程。

15. 双token如何处理?

A, B, C 三个异步的网络请求,都accessToken超期了,这个时候只能有一个去通过refreshToken刷新accessToken,然后利用新的accessToken重新执行A, B, C请求。

iOS下可以采用锁的方式,见“Moya下的双token代码”文章。

flutter下的暂时没想好。

16. 事件循环

flutter的事件循环是异步的核心,与iOS的runloop有些类似;

iOS的runloop无事情时会休眠有事情时会唤醒;

flutter的应该是一直循环;

17. 组件化

后期代码多了后,同样会有组件化的问题,目前flutterr组件化文章很少。

18. 网络代理

flutter默认是不支持网络代码,好处也是可以防止https中间人攻击;缺点就是抓包调试不方便;

当前采用了隐藏界面,可以设置代理ip和端口。

原生代码是用的dio库,可以统一设置网络代理;而h5的网络是独立的,没有走原生的网络代理;所以h5除非也进行处理,否则是无法抓包的。

或者原生有其他的方式来进行hook h5的请求之类的,待研究。

19. 扩大按钮点击区域

iOS的通过分类重写了UIButton的pointInside 或者 hitTest方法,再通过关联对象的方式设置了新的left,right,top,bottom的值,来判断是否在相应区域内;

flutter: 通过一个放大的Container包裹,Container的color需要设置;

20. 代码规范工具

swift可以借助xcode运行 pod库的代码规范工具;需要研究flutter对应的方案;

21. flutter的动态化

待关注行业动态;


推荐阅读
  • macOS Big Sur全新设计大版本更新,10+个值得关注的新功能
    本文介绍了Apple发布的新一代操作系统macOS Big Sur,该系统采用全新的界面设计,包括图标、应用界面、程序坞和菜单栏等方面的变化。新系统还增加了通知中心、桌面小组件、强化的Safari浏览器以及隐私保护等多项功能。文章指出,macOS Big Sur的设计与iPadOS越来越接近,结合了去年iPadOS对鼠标的完善等功能。 ... [详细]
  • 使用eclipse创建一个Java项目的步骤
    本文介绍了使用eclipse创建一个Java项目的步骤,包括启动eclipse、选择New Project命令、在对话框中输入项目名称等。同时还介绍了Java Settings对话框中的一些选项,以及如何修改Java程序的输出目录。 ... [详细]
  • 本文介绍了iOS开发中检测和解决内存泄漏的方法,包括静态分析、使用instruments检查内存泄漏以及代码测试等。同时还介绍了最能挣钱的行业,包括互联网行业、娱乐行业、教育行业、智能行业和老年服务行业,并提供了选行业的技巧。 ... [详细]
  • IhaveconfiguredanactionforaremotenotificationwhenitarrivestomyiOsapp.Iwanttwodiff ... [详细]
  • 20211101CleverTap参与度和分析工具功能平台学习/实践
    1.应用场景主要用于学习CleverTap的使用,该平台主要用于客户保留与参与平台.为客户提供价值.这里接触到的原因,是目前公司用到该平台的服务~2.学习操作 ... [详细]
  • 本文介绍了在Vue项目中如何结合Element UI解决连续上传多张图片及图片编辑的问题。作者强调了在编码前要明确需求和所需要的结果,并详细描述了自己的代码实现过程。 ... [详细]
  • 模板引擎StringTemplate的使用方法和特点
    本文介绍了模板引擎StringTemplate的使用方法和特点,包括强制Model和View的分离、Lazy-Evaluation、Recursive enable等。同时,还介绍了StringTemplate语法中的属性和普通字符的使用方法,并提供了向模板填充属性的示例代码。 ... [详细]
  • 如何提高PHP编程技能及推荐高级教程
    本文介绍了如何提高PHP编程技能的方法,推荐了一些高级教程。学习任何一种编程语言都需要长期的坚持和不懈的努力,本文提醒读者要有足够的耐心和时间投入。通过实践操作学习,可以更好地理解和掌握PHP语言的特异性,特别是单引号和双引号的用法。同时,本文也指出了只走马观花看整体而不深入学习的学习方式无法真正掌握这门语言,建议读者要从整体来考虑局部,培养大局观。最后,本文提醒读者完成一个像模像样的网站需要付出更多的努力和实践。 ... [详细]
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • 使用圣杯布局模式实现网站首页的内容布局
    本文介绍了使用圣杯布局模式实现网站首页的内容布局的方法,包括HTML部分代码和实例。同时还提供了公司新闻、最新产品、关于我们、联系我们等页面的布局示例。商品展示区包括了车里子和农家生态土鸡蛋等产品的价格信息。 ... [详细]
  • 本文介绍了iPhone降频开关的位置和设置方法,以及解释了内存中的其他文件的含义和清理方法。同时提醒用户,在内存不足时系统会自动删除这些文件来腾出容量,因此不必过于担心。 ... [详细]
  • STL迭代器的种类及其功能介绍
    本文介绍了标准模板库(STL)定义的五种迭代器的种类和功能。通过图表展示了这几种迭代器之间的关系,并详细描述了各个迭代器的功能和使用方法。其中,输入迭代器用于从容器中读取元素,输出迭代器用于向容器中写入元素,正向迭代器是输入迭代器和输出迭代器的组合。本文的目的是帮助读者更好地理解STL迭代器的使用方法和特点。 ... [详细]
  • Unity3D引擎的体系结构和功能详解
    本文详细介绍了Unity3D引擎的体系结构和功能。Unity3D是一个屡获殊荣的工具,用于创建交互式3D应用程序。它由游戏引擎和编辑器组成,支持C#、Boo和JavaScript脚本编程。该引擎涵盖了声音、图形、物理和网络功能等主题。Unity编辑器具有多语言脚本编辑器和预制装配系统等特点。本文还介绍了Unity的许可证情况。Unity基本功能有限的免费,适用于PC、MAC和Web开发。其他平台或完整的功能集需要购买许可证。 ... [详细]
  • linux进阶50——无锁CAS
    1.概念比较并交换(compareandswap,CAS),是原⼦操作的⼀种,可⽤于在多线程编程中实现不被打断的数据交换操作࿰ ... [详细]
  • 苹果手机home键设置1.我们点击打开iPhone手机桌面上的设置图标。2.点击打开页面中的通用选项。 ... [详细]
author-avatar
长风剑客2502852893
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有