-
Chrome DevTools Performance 面板能把页面卡顿拆成可回放的主线程轨迹。本文用一次点击延迟场景,演示如何打开 Performance、录制交互、在 Main 轨道找到长任务,并用 Summary 与回放结果确认问题边界。
-
在项目开发中,我们经常需要同时请求多个接口。为了提升效率,通常会采用并发请求的方式。这是一个非常经典的异步编程场景。 下图直观地展示了这一过程: 不过,毫无限制地进行并发请求,极有可能引发性能方面的问题,比如内存溢出,或者服务器压力过大等情况。所以说,对最大并发数加以限制,已然成为一种较为常见的优化
-
哈喽,我是老刘 一个从事软件开发10年+,Flutter开发7年的程序员。 前两天有个朋友咨询升级到Flutter 3.35后的格式化问题。 简单来说就是升级到Flutter 3.35(基于Dart 3.7以上)后,格式化后的代码与之前的版本不同。 原先多行的代码,格式化工具会自动删除结尾的逗号,导
-
Dart 速通攻略(面向 Android 工程师) 背景:相信你对Ja va/Kotlin/Android已经十分熟悉了。接下来,本文将通过“对照+最小可用示例”的方式,助你快速掌握Dart(以Dart 3为基准)。 0. Dart 与 Kotlin/Ja va 思维对照 空安全:与 Kotlin
-
哈喽,我是老刘 老刘前段时间写了两篇关于Dart语言取消宏的文章: Dart的宏取消了,期待3年的功能,说没就没了? Dart宏被砍掉的真相:为什么Go、Python、Ja va等高级语言都拒绝宏? 很多人评论说Rust的宏就是非常好用的。 对于这个观点,老刘是举双手赞成的。所以今天呢,老刘就想来大
-
下载安装 Dart sdkwindows 和mac 安装方法有区别,根据个人需求进行下载安装。 windows 安装 官网下载链接dart-windows 上面是稳定版,下面是开发版。若与他人合作进行先前的项目或继续开发,稳定版更为适宜。若独自开启新项目,那么开发版是个不错的推荐。 双击exe文件即
-
Flutter路由 最近在学习Flutter中有用到路由,借此回顾一下Flutter路由跳转的方式. 编写的TODO示例Demo总共有两个界面: 主界面; 编辑界面 1.编写路由地址信息 abstract final class AppRoutes { static const homeRoute
-
背景 easy_refresh已经有一段时间没有更新了,不知道这个问题跟flutter版本有没有关系。 问题点 下拉刷新松开之后,刷新完成,会导致大片头部区域空白,一直不消失。 问题原因 当手势松开之后flutter-sdk里面会调用ScrollPositionwithsinglecontext.g
-
大家好,我是老刘 老刘做Flutter开发有7年了差不多。 我记得早先的时候还经常有人讨论为啥Flutter没有选择kotlin而是选了dart。 当时我罗列和很多原因,同时也说过我个人其实是很喜欢Kotlin的。 想当年,Kotlin 就是拯救我们脱离Ja va 苦海的。 优雅的 Lambda 表
-
之前写过一篇Android 自定义 View 实战:打造一个跟随滑动的丝滑指示器,今天使用 Flutter 来实现一个相同的效果。 本文将实现一个根据列表滚动动态偏移的自定义指示器。 1. 核心原理 实现这个效果的关键在于:监听滚动事件,并计算滚动比例。 监听滚动:使用 NotificationLi
-
准备好了吗?我们要把你习以为常的代码撕碎,看看它的内脏长什么样。 第一章:拆解 —— 编译器的“剪刀” 作为 Dart 开发者,我们每天都在写 async 和 await。它们就像空气一样自然,以至于我们常常忘记了它们的存在。 看下面这段代码,它优雅、线性,符合人类的直觉: Future makeC
-
Flutter 性能底层(一):内存世界的版图 —— Dart 分代模型 引言:透过现象看本质 作为 Flutter 开发者,我们每天都在与 Widget 打交道。无论是简单的 Text 还是复杂的 CustomPaint,我们习惯了通过不断地 new 对象来构建界面。 但在这些代码背后,你是否曾有
-
第一章:告别“剥洋葱”式的防御性编程 在 Dart 3 之前,处理未知数据(比如 dynamic、父类对象、或者 JSON Map)就像是在剥洋葱。我们需要一层一层地检查类型、检查长度、检查 Key 是否存在,最后小心翼翼地把数据取出来。 这种代码通常被称为**“防御性代码”**。它的特点是:真正干
-
大家对Dart中的 ?? 运算符感兴趣吗?它可是Dart里处理 **可选值(可空类型)** 的常用运算符,主要作用就是「空值合并」。接下来,我们就从基础用法、核心特点、拓展用法,再到实际场景,一步步为大家讲得明明白白,让大家快速掌握。 一、先明确 ?? 运算符的核心定义 ?? 被称为 「空值合并运算
-
第一章:被 switch-case 坑过的“未知状态” 如果说 Records 解决的是“数据怎么传”的问题,那么 Sealed Classes 解决的就是**“逻辑怎么写”**的问题。 在 App 开发(尤其是 Flutter 开发)中,我们每天都在处理各种“状态”: 网络请求:Loading,