红米K40(MIUI 12.5)彻底禁用系统更新教程
前不久,我将手头的红米K40从澎湃OS强制降级回了MIUI 12.5(V12.5.19.0.RKHCNXM),过程可谓是一波三折。由于是未解BL锁的跨版本降级,中途触发了防回滚机制(ARB),经历了“The system has be…
前不久,我将手头的红米K40从澎湃OS强制降级回了MIUI 12.5(V12.5.19.0.RKHCNXM),过程可谓是一波三折。由于是未解BL锁的跨版本降级,中途触发了防回滚机制(ARB),经历了“The system has be…
博客上线几年,一直跑在 http 上。直到前几天想把站点的分享卡片和图片引用理一理,才发现混合内容规则把 http 站点拦在外面,索性把 HTTPS 一起办了。 证书这块,最初看到的是 JoyQi 那篇《彻底放弃收费 SSL 证书》。…
前一阵我把 Spring Security 的登录、角色、权限这条链路重新捋了一遍,写了一个叫 springsecurity-hello 的小项目。它不复杂:五张表、一个登录接口、一个 JWT 过滤器,再加几个用 @PreAuthor…
这周处理了两条反馈,都不是崩溃。 第一条来自一个老用户:他手机上有一份没同步出去的草稿,升级到新版本之后打开草稿箱是空的。数据没被删——是我改了 drafts 表的字段,而本地那个库文件早就存在了,建表那段代码一次都没执行过。 第二条…
我这周处理的一条反馈很没道理:用户在联系人详情页点「同组的人」进另一个详情,再按 Android 的返回键,回到的不是刚才那个列表,而是首页。两个页面本身都正常,控制台一行报错都没有。 查下去的结论是那次跳转我写的是 context.…
上一篇把网络层收拢之后,我手上剩下一个更难看的角落:model/contact.dart 那个文件。十二个字段,一个类里三段——成员声明、fromJson 里十二行 json['x'] as T、toJson 里十二行 'x': in…
我那个通讯录 App 的网络层,第一版是每个页面自己 Dio().get(...),catch 里各写各的提示。功能都能跑,我也没觉得有问题,直到后端把 token 的 header 名从 X-Token 换成 Authorizati…
我维护着一个把考勤数据从源库同步到目标库的批处理服务。两个库不在同一个机房,中间隔着一条 RTT(一次网络往返的耗时)约 41ms 的链路;外部调度器每半小时调用一次 HTTP 接口触发作业,每次先清空目标表,再把源库的人员全量和最近…
我做的第一个带长列表的页面,是本地通讯录的展示,两百多条联系人,一帧都不掉。等到接上服务端接口、数据涨到三千条,手指按住屏幕往上拖,列表就开始一顿一顿。那时候我的第一反应是「Flutter 列表性能不过如此」,后来才知道问题基本都不在…
我刚开始写 Flutter 的时候,调布局的手法跟当年写网页差不多:宽度不对就套一层 SizedBox,挤了就减 padding,改一轮跑一轮看效果。字体放大一档、或者换到平板,之前调好的间距又开始溢出。真正让我停下来的是一次 Ren…
前两篇我都在讲怎么把界面搭起来,这一篇讲那个「界面之外的部分」:数据放在哪、谁能读到它、它变了谁跟着变。 我是从「项目里第三个把回调函数往下传的文件」开始认真想这件事的。在那之前我对 setState 的理解是「改了变量就调一下它」,…
这一篇讲 Dart 本身。我是带着 Java 和一点 JS 的背景进 Flutter 的,头两周真正拖住我的不是 Widget 和布局,而是 Dart 里那些「看着眼熟但意思不一样」的东西:late、const、mixin、await…