代码 > flutter选择背景和文字背景冲突

2024-05-29

具体来说,就是选择背景SelectionColor比背景色backgroundColor优先级低,所以在设置过前/背景色的文本上,选择色的设置无效。

一番搜索,已经有两个issus被提出来了

https://github.com/flutter/flutter/issues/79168

https://github.com/flutter/flutter/issues/96112

怎么说呢,虽然不算常见场景,但需要用的时候还挺蛋疼。

这么久也没修复,感觉真的要修复得接管整个选择目标的渲染流程了。蛋疼。

 

PS

用了个比较脏的Hack

用WidgetSpan(Container(Text())) 代替了TextSpan

将背景色和TextStyle分离

背景色设在Container上

TextStyle给Text

这样Text是没背景色的,选择色就能覆盖背景色了,

由于TextStyle是只读的,还不能单纯的去除背景信息,只能再封装一下原来的textstyle方法。

不得不说,真脏。

代码 > flutter的showDialog

2024-05-23

这次调代码的主要原因就是随着flutter sdk版本升级,showdiablog失效了……

 

怎么说呢。

 

flutter的showDialog虽然名字是showDialog,但它本质值是伪装成showDialog的功能。

本质是在导航里插入一个临时节点,然后在临时节点里显示Dialog的内容。

3.10-3.22不知道那个版本的更新修改了逻辑,showDialog会触发一次路由匹配……

 

正经来说

showDialog需要指定context和useRootNavigator。

理论上,按照传统的showDialog函数的用法。

少副作用的showDialog需要在容器里用一个Navigator组件来包住子元素。

然后通过指定Navigator的Key的方式,在运行时获取到Navigator的context。

然后,再取消useRootNavigator,这样才能限制showDialog的副作用在自定义的Navigator内。

完全理通的时候,能够理解这个逻辑。

但文档里没说清楚的话,刚开始用真的太容易踩坑了。

代码 > 修正flutter升级3.10升级到3.22后渲染出的问题

2024-05-22

具体来说,由于我的代码是按文字行渲染然后缓存的,发现部分行在linux桌面会随机丢失,统一版本mac os x 无此问题。

目测是异步没及时渲染成功的问题。于是调整了下代码。成功修复。

await recorder.endRecording().toImage()

调整为

recorder.endRecording().toImageSync()

问题解决。

基本是这个异步方法的问题。不知道是渲染问题,还是库的问题。

Linux > 修复ceph失效问题

2024-04-11

今天修复了自建pve的ceph失效问题。

症状是pve中ceph操作都超时,命令行ceph任何操作没反应,pveceph status 的话authenticate timed out after 300

折腾了一天,最后排除下来

5个mon节点,2个掉队了,一个磁盘出错,ceph-mon文件损坏,启动服务就bus error。

只剩2个mon不够投票,ceph就卡死了。

最后用文件占位法,把ceph文件mv成其他名字,reinstall下,搞定,赶紧把还有两个Mon重建了。

明天换磁盘重建。

老了,真的有点折腾不动了。

杂言碎语 > 最近身陷中年危机感

2024-03-28

压力真的很大。

不是钱的问题。

有一种害怕被世界淘汰的恐惧。

想办法尽量排解点压力吧……

代码 > 使用了下清华开源的ChatGLM2-6B

2024-03-25

作了些简单的修正,轻松的架上了。

不得不说,还是有点东西的。

至少简单的文案能高个框架出来,感觉还是能解放点生产力的。

实际效果肯定不能和chatgpt比,但chatgpt肯定也不能在我的3060上跑阿。

不知道能否继续定制和学习,如果能方便的定制和学习的话,的确是非常不错的生产力工具。

网络 > 试用了下飞书

2024-03-19

总体来说,对比竞品,主要是企业微信,还是非常不错的。

准备再用一段时间感受感受是否有坑。

Linux > 看了下hugo

2024-03-18

想搞个静态站,看了下hugo,试了下模板……

只能说,挺蛋疼的。

只能说,hugo之类静态发布的站点有其优点。

主要是不需要数据库,以及随之而来的高性能和安全。以及可以在github/文件服务/ftp空间上直接发布。

剩下的都是缺点,特别是发布和更新上。

发布麻烦,又不适合非IT人员。

最适合的场景个人觉得完全不是博客,而是相对内容发布较少的项目网站或组织首页。

Linux > 好用的socks proxy server microsocks

2023-12-18

https://github.com/rofl0r/microsocks

 

不错的单文件代理程序。

配合ufw的限制,很容易就能作出一个通过密码访问的proxy。

其他的dante/squid都太重了。

自己写的话不小心出bug容易被滥用。

代码 > flutter中强制Statefull子元素更新

2023-11-22

为了效率,flutter的setState是只更新依赖当前State的Widget的,维护自己独立Widget,通过listen event独立更新的子Widget是不会因为setState更新的。

但有时候整个Widget的刷新是必须的,一层层向下Bind Event是不可接受的。

这时候可以通过setState更新父元素的key来实现。不同的key的父元素代表不同的组件,自然会重建了。

元素添加一个属性

var _refreshKey = UniqueKey();
 

build时指定key

return RawKeyboardListener(
key: _refreshKey,
 

需要时重设key

setState(() {
_refreshKey = UniqueKey();
});
 

就能替换整个组件树了。