Flutter2.5发布,大版本更新

文|白开水
出品|OSC开源社区(ID:oschina2013)
Flutter2.5现已发布 。 这是一个大版本更新 , 开发团队称此版本在Flutter版本历史上排名第二:关闭了4600个问题 , 从252个贡献者和216个审阅者合并了3932个PR 。 回顾过去一年 , 共有1337位贡献者创建了21072个PR , 其中有15172个被合并 。
此版本延续了一些重要的性能和工具改进 , 以追踪你自己应用中的性能问题 。 同时还有一些新功能 , 包括对Android的全屏支持、更多MaterialYou(也称为v3)支持、更新的文本编辑以支持可切换的键盘快捷键、在WidgetInspector中更详细地查看你的小部件、在VisualStudioCode项目中添加依赖关系的新支持、从IntelliJ/AndroidStudio的测试运行中获取覆盖信息的新支持;以及一个全新的应用程序模板 , 为你的real-worldFlutter应用程序提供更好的基础 。
Performance:iOS着色器预热、异步任务、GC&messagepassing
此版本带来了多项性能改进 。 此列表中的第一个PR用于从离线训练运行(#25644)中连接Metal着色器预编译 , 它(如基准测试所示)将最坏情况的帧光栅化时间减少了2/3秒 , 将第99个百分位帧减少了一半 。 还在本版本中对UIisolate的事件循环的调度策略(#25789)进行了改进 , 现在帧处理优先于其他异步事件的处理 , 从而在测试中消除了此源的卡顿 。
Flutter2.5发布,大版本更新
文章图片
另一个导致卡顿的原因是GC暂停UI线程以回收内存 。 在这个版本中 , 未使用的图像的内存被快速回收(#26219、#82883、#84740) , 大大减少了GC 。
Flutter2.5发布,大版本更新
文章图片
测试结果表明 , 播放20秒动画GIF从需要400多次GC变为只需要4次 。 更少的主要GC意味着涉及图像出现和消失的动画将减少卡顿 , 并消耗更少的CPU和功率 。
Flutter2.5的另一个性能改进是在Dart和Objective-C/Swift(iOS)或Dart和Java/Kotlin(Android)之间发送消息时的延迟 。 通常作为tuning-upmessagechannels的一部分 , 从消息编解码器中删除不必要的副本可将延迟减少多达50% , 具体取决于消息大小和设备(#25988 , #26331) 。
Flutter2.5发布,大版本更新
文章图片
对于iOS用户而言的一项性能更新为:在此版本中 , 在AppleSiliconM1Mac上构建的Flutter应用程序可以在ARMiOS模拟器(#pull/85642)上原生运行 。 这意味着Intelx86_64指令和ARM之间没有Rosetta转换 , 从而提高你的iOS应用程序测试期间的性能 , 并允许你避免一些微妙的Rosetta问题(#74970、#79641) 。 这是全面支持FlutterforAppleSilicon的又一步 。
Dart2.14:格式、语言特性、pub&linting开箱即用
此版本的Flutter随Dart2.14一起发布 。 新版本的Dart带有新的格式 , 使级联更加清晰;新的pub支持ignoringfiles , 以及新的语言功能 , 包括三重移位运算符的回归 。 此外 , 该版本还创建了一组新的在Dart和Flutter项目之间共享的标准lints , 开箱即用 。
Flutter2.5发布,大版本更新
文章图片
此外 , Flutter2.5版本包括许多涉及全屏模式及其功能的修复 。 例如 , 应用程序现在可以监听其他模式下fullscreenchanges的使用情况;以便当系统UI返回时 , 开发人员现在可以编写代码以适当地返回全屏模式或执行其他操作 。
还继续构建了MaterialYou规范支持 。 包括对FloatingActionButton大小和主题的更新 , 以及新的MaterialState.scrolledUnder状态 。
FlutterDevTools也通过利用引擎更新获得了一些关注 。 其中一组更新使Flutter能够将跟踪事件与特定frames相关联 , 帮助开发人员确定frame可能超出预算的原因 。 因此 , 开发人员可以更轻松地诊断应用程序中的低质量着色器编译 。