话题框架与类库 › Flutter

框架与类库:Flutter

Windows平台Flutter桌面应用的底层模块化探索

Windows应用开发有着较为丰富和多样的技术选型。C#/WPF 这种偏Native的闭源方案,目前开发人员相对比较小众了。C++/QT 的跨平台框架,C++对于GUI开发来说上手会更难。JavaScript/CEF/Electron 基于Chromium 的跨端框架,使用前端技术栈来构建桌面应用,性能会略低一些。总而言之各有所长,有一点可以确定的是,跨端能力成为了选型的重要考量。

Flutter从诞生之初起,其核心目标就是跨平台,不仅仅支持Android和iOS的移动端设备,同时包括桌面端和Web端。随着2022年2月Flutter 2.10的推出,也带来了首个支持Windows平台的稳定版本。基于Flutter的跨平台特性,移动端或Web端的Flutter应用也能够在Windows系统上运行,Windows应用开发者能够享受到Flutter开发带来的便利和生产力上的提升,同时移动端开发者也能够快速上手Windows应用开发了。

Flutter单线程模型怎么保证UI运行流畅

与原生 Android 和 iOS 的多线程机制相比,单线程的 Dart 如何从语言设计层面和代码运行机制上保证 Flutter UI 的流畅性呢?

前端 Flutter 入门指南

Flutter 是 Google 推出的 UI 框架,帮助开发者通过一套代码同时运行在 iOS 和 Android 上,构建媲美原生体验的精美应用!本文将带你入门 Flutter。

iPad大屏&Flutter多引擎适配之路

在电商场景中iPad的大屏拥有比普通手机相比更大的屏幕,对于购物体验而言,如能充分利用好iPad的大屏体验,无疑提高用户购买体验,但一直以来在混合栈应用特别是Flutter混合栈中,在iPad大屏适配和Flutter多引擎适配都是个老大难问题。本文会介绍闲鱼在这iPad适配中的各个疑难点。

Flutter for Web 首次首屏优化——JS 分片优化

Flutter for Web(FFW)从 2021 年发布至今,在国内外互联网公司已经得到较多的应用。作为 Flutter 技术在 Web 领域的有力扩充,FFW 可以让熟悉 Flutter 的客户端同学直接上手写 H5,复用 App 端代码高效支撑业务需求;在 App 侧 FFW 也可作为 Flutter 动态下发的兜底方案。总的来说在业务和技术上 FFW 都具有相当的价值。

然而在使用 FFW 时有一个明显的问题:其编译产物 main.dart.js 较大,初始的 Hello world 工程编译后产物 js 大小为 1.2 MB,添加业务代码后 js 的大小还会继续增加。在阿里卖家的内容外投业务中,3 个页面的工程 js 大小为 2.0 MB,js 文件过大直接的影响就是页面首次首屏加载的速度。针对 js 的大小有较多优化方法,本文主要记录 main.dart.js 分片优化方案的实现。

EngineGroup:让 Flutter 桌面端引擎“飘”起来

在我们之前分享的《Dutter | 钉钉 Flutter 跨四端方案设计与技术实践》《Dutter | 前车之鉴:聊聊钉钉 Flutter 落地桌面端踩过的“坑”》文章中,有为大家简单介绍过钉钉 Flutter 桌面端应用的一些情况。在文章中我们有提到,因为需要支持多窗口、窗口内嵌等场景,在桌面端我们无法使用 FlutterBoost 一类的中间件来共享 FlutterEngine,只能采用多引擎方案来驱动多画布同时渲染。

此方案虽然能满足现阶段钉钉业务使用,但未来随着业务盖度、复杂度的提升,方案的弊端也愈加明显:引擎启动偶现卡顿、首帧耗时略长、内存占用高等。尤其是钉钉 Windows 端因为32位兼容问题,目前仍以 JIT 模式在运行 Flutter 页面,情况相比 AOT 模式更加差一些。以钉钉 Windows 目前线上业务为例,若不做任何优化,启动首帧展示耗时大概在 1000ms~2600ms 之间,每个引擎内存占用大概在 70MB 左右。

我们选择基于 Flutter 来构建钉钉跨4+端研发框架(Dutter) 的主要初衷即看中其在性能和体验上具备可媲美 Native 运行的能力,在完成前期基础设施搭建和核心链路验证之后,多引擎下的性能问题已成为阻碍我们达成既定目标的主要障碍,需要攻坚解决掉。

本文主要为大家介绍一下我们在此问题上探索方向以及最终方案,并以实际应用收益来为做一个直观展示,希望能为关注此领域的同学和团队提供一定参考。

Flutter语法检测及原理剖析-Fair语法检测实践

Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面。

Fair是58技术开源的一个Flutter动态化的框架,能够实现UI和逻辑的动态化。

开发者在使用Fair开发过程中存在一些痛点,比如可能会出现使用语法糖不正确或者存在不支持的语法糖问题,所以我们需要一个配套插件去提示用户使用Fair语法糖。

Flutter沉浸式复杂吸顶交互页面结构设计与实践

笔者部门内部一款C端app 新能源车系页展示车系的所有相关信息,包括车系图,车系信息,车型,口碑,车主实拍,相关推荐车系,广告等众多模块信息,展示信息模块多,模块信息需要可动态配置,可扩展性强,交互复杂,是一个重要的车系详情展示页面。为了节省开发时间,整个页面采用跨端技术Flutter开发,是使用Flutter开发复杂页面的一次有益验证和实践。

Flutter|一文搞懂何谓状态管理

随着“大前端”概念流行的同时,响应式编程的理念也随之被越来越多的人所了解和学习,要了解和学习响应式的编程框架就一定离不开状态管理,客户端Android、iOS是通过明确的命令式指令去控制我们的UI变化,如setText,而在响应式编程下,我们只需要描述好UI和状态之间的关系,然后专注于状态的改变就好了,框架会根据状态的变化来自动更新UI。

总结来说就是:状态管理就是当某个状态发生改变的时候,告知使用该状态的状态监听者,让状态所监听的属性随知改变,从而达到联动效果。

Flutter状态管理新的实践

本文介绍flutter端状态刷新的一种新的思路和尝试,通过dart的扩展属性,定义一个观察者模式,去更新widget的状态,以及如何在widget的生命周期寻找一个切入点,建立订阅关系。

Flutter 长截屏适配 Miui 系统,一点都不难

现有 App 大部分业务场景都是以长列表呈现,为更好满足用户内容分享的诉求,Android 各大厂商都在系统层面提供十分便捷的长截屏能力。然而我们发现 Flutter 长列表页面在部分 Android 手机上无法截长屏,Flutter 官方和社区也没有提供框架层面的长截屏能力。

闲鱼作为 Flutter 在国内业务落地的代表作,大部分页面都以 Flutter 承接。为了闲鱼用户也能享受厂商系统的长截屏能力,更好的满足商品、社区内容分享的诉求,闲鱼技术团队主动做了分析和适配。

针对线上舆情做了统计分析,发现小米用户舆情反馈量占比最多,其次少量是华为用户。为此我们针对 Miui 长截屏功能做了适配。

携程酒店Flutter性能优化实践

携程酒店业务使用Flutter技术开发的时间快接近两年,这期间有列表页、详情页、相册页等页面使用了Flutter技术栈进行了跨平台整合,大大提高了研发效率。在开发过程中,也遇到了一些性能相关问题和用户反馈,比如长列表滚动卡顿、页面打开时间较长、页面打开后部分数据加载时间较长等问题。为解决这些问题,我们选用了多个性能指标监控业务运行状态,借助性能检测工具定位问题,并查阅源码、文档等资源解决问题,形成了这篇文章。

同时在不断的需求迭代和代码更新过程中,APP的性能稳定性持续受到挑战,为此我们建立了线上性能监控系统,通过量化,治理,监控三方面手段,持续改善APP性能和用户体验。目前页面的各种性能指标诸如FPS、TTI、内存等都达到了不错的效果,本文将介绍我们在优化过程中所遇到的问题和采取的主要优化方案。

Deferred Components-实现Flutter运行时动态下发Dart代码

Deferred Components,官方实现的Flutter代码动态下发的方案。本文主要介绍官方方案的实现细节,探索在国内环境下使用Deferred Components,并且实现了最小验证demo。

Flutter富文本编辑器系列文章3——交互篇

一个Flutter场景下高性能、可扩展的富文本编辑器。

打造Flutter高性能富文本编辑器——渲染篇

一个Flutter场景下高性能、可扩展的富文本编辑器。

PowerImage 高扩展性的flutter图片库

去年,闲鱼技术团队新一代图片库 PowerImage 在经过一系列灰度、问题修复、代码调优后,已全量稳定应用于闲鱼。相对于上一代 IFImage,PowerImage 经过进一步的演进,适应了更多的业务场景与最新的 flutter 特性,解决了一系列痛点:比如,因为完全抛弃了原生的 ImageCache,在与原生图片混用的场景下,会让一些低频的图片反而占用了缓存;比如,我们在模拟器上无法展示图片;比如我们在相册中,需要在图片库之外再搭建图片通道。

Home - Wiki
Copyright © 2011-2024 iteam. Current version is 2.125.1. UTC+08:00, 2024-05-17 13:54
浙ICP备14020137号-1 $Map of visitor$