在 flutter 中利用 source_gen 实现条件编译(中)
在前篇 在 flutter 中利用 source_gen 实现条件编译(上) 中,主要介绍了在 Flutter 跨平台开发过程中“条件编译”特性的需求及现状。本篇将介绍一种利用 Flutter/Dart 官方的代码生成库 —— source_gen 实现条件编译的方法。
从 json_serializable 认识 source_gen
如果是按部就班地学习 flutter,那么应该是在 JSON 和序列化数据 这篇教程里第一次认识 flutter/dart 的 source_gen(代码生成) 技术。
json_serializable 做了什么在网络应用开发中,经常需要做 JSON 对象的序列化和反序列化。如果直接使用 dart:convert 包将json字符串反序列化,得到的将是一个通用的Map/List结构,然后开发时通过输入字段名字符串的方式从中取值,非常的不方便,所以在前后端已经定义好数据格式时,通过预定义实体类,json解析后将字段值映射到这个实体类的属性上,就可以在开发时获得类型提醒和约束,从而极大提高开发效率,并降低出错的概率。而json_serializab ...
基于Gitea+Drone的CI系统
关于CI系统(Continuous Integration),我已经有过了一些学习和实践了:
GitLab CI/CD (一) :自动打包部署Flutter项目 | DebuggerX’s BlogGitLab CI/CD (二) :自动编译部署Web项目 | DebuggerX’s Blog利用 GitHub Actions 自动构建 Linux 内核为 deb 包 | DebuggerX’s Blog
那么为什么还要再折腾这样一套CI方案呢?
GitLab的CI/CD:很好,很强大,功能非常完善,非常建议中小团队作为自建代码管理部署平台使用,唯一的问题就是太重了,需要一台性能配置颇高(至少使用2 vCPU和4 GiB内存)的独立服务器
GitHub Actions:也很好,使用非常方便,非常建议个人项目使用,但是同样缺陷明显,虽然可以部署私有runner,但是由于GitHub本身无法self-hosted,所以使用体验很受网络质量影响,并且由于各种安全限制,私有仓库使用体验不是那么的方便
所以基于如上原因,我是在家里一台24小时运行的小服务器上部署了一个 Gitea 服务,并将 ...
在 flutter 中利用 source_gen 实现条件编译(上)
随着 Flutter 3 正式发布,Flutter 的跨平台之旅迈入高潮。现在,Flutter 3 增加了对 macOS 和 Linux 应用的稳定支持,这意味着我们可以仅用一套代码库,为 6 个平台构建精美的体验。
一套代码跨平台的问题迄今为止,我已经使用 flutter 开发了数个跨平台项目,有的是相对常见的 Android / iOS 双平台项目,也有横跨桌面端、移动端和 Web 端这种平台差异更大的项目。由于 flutter 项目是使用同一套代码来编写所有目标平台的界面和逻辑,所以时常会出现以下情况:
不同平台下需要运行不同的代码逻辑例如,在 Android 平台上,应用左上角默认的返回键图标是【】,而在 iOS 平台上,默认的返回键图标样式是【】(参看:平台行为差异和适配 - 图标),为了能够使应用在不同平台上可以表现得更加符合平台的风格和习惯,往往需要判断运行平台编写分支代码
一般做法针对上面的例子,参看 flutter sdk 中 BackButton 的源码 back_button.dart#L31:
1234567891011121314151617181920c ...
个人对 Linux 的一些偏好设置
上一篇 利用 Xbindkeys 设置全局快捷键/一键切换输入法 中介绍了我关于系统快捷键的一点定制,这篇将继续介绍我个人对 Linux 的一些偏好设置,有些是为了提高效率方便使用,有些则是为了美观。
window.onload = function () {
document.querySelectorAll('.hide_code').forEach(function (div) {
var is = div.querySelectorAll('i');
is[0].click();
});
}
Bash.bashrc12345678910111213141516171819# History settings.# 配置显示 history 时显示时间HISTTIMEFORMAT="[%F-%T] "# 增加记录历史的最大条数HISTSIZE=10000HISTFILESIZE=20000# Alias definitions.# 将别名配置分离到独立文件中方便管理if [ - ...
利用 Xbindkeys 设置全局快捷键/一键切换输入法
就像在 DDE手势管理器:FAQ 中提到的,我对与电脑的交互方式一直有比较高的要求,毕竟工作加上生活娱乐,有太多太多的时间要花在电脑上了,符合个人习惯的操作方式可以极大地提高效率并缓解疲劳。除了触摸板手势和鼠标手势之外,我还有一些习惯的个人向系统快捷键设置,其中很重要使用频率极高的快捷键就是:通过单击键盘右侧的 Shift 按键切换输入法。
Why切换中英文输入法是一个使用频率极高的操作,尤其是在写代码和文档的时候。一般来说,默认的切换方式有两种:
使用 Ctrl + Shift 组合键,这是最符合一般习惯的。但是由于需要使用左手的小拇指和无名指以略微扭曲的姿势去按,所以长时间频繁使用会比较容易造成疲劳,而且需要按两个键的组合键,相比于按下一个键总归要多花一点点时间,这在高速打字或者需要尽快跟随思路编写代码的时候,这一点点的差别就可能会让人感觉到不爽。
使用中文输入法自带的方式切换中英文模式,比如搜狗输入法中可以选择切换中英文模式的快捷键: 但是搜狗输入法给出的选项是同时对左右两侧的 Ctrl / Shift 键生效的,而我只希望右侧的 Shift 键响应中英文的切换,因为正常来 ...
Docker 使用技巧杂记
记录一些使用 Docker 的经验和技巧,备忘 📝
加速Docker 镜像加速尝试过各种国内镜像,最终发现还是阿里云的最快,这与 【测速】使用不同的Docker镜像加速器下载速度 对比测试 这篇博客中的测试结果一致。由于阿里云会为每个用户分配独立的加速器地址,建议有阿里云账号的还是用自己的地址,查看方式是,登录阿里云账号后进入控制台,然后【容器镜像服务】->【镜像工具】->【镜像加速器】查看:
12345678sudo mkdir -p /etc/dockersudo tee /etc/docker/daemon.json <<-'EOF'{ "registry-mirrors": ["https://xxxxxx.mirror.aliyuncs.com"]}EOFsudo systemctl daemon-reloadsudo systemctl restart docker
let _time;
const img = document.querySelector('[alt="aliyun_mirrors"]').parentE ...
DDE手势管理器-更新日志
[v1.0.2]
修复内置命令不生效的问题。
发布地址: v1.0.3
本站下载: com.debuggerx.dde-gesture-manager_1.0.3.3_amd64.deb
[v1.0.2]
修复删除最后一个本地方案配置时触发的程序内部错误;
修复退出单个手势编辑模式时,若手势配置不正确则会出现编辑界面清空的错误。
发布地址: v1.0.2
本站下载: com.debuggerx.dde-gesture-manager_1.0.2.2_amd64.deb
[v1.0.1]
加入软件启动时读取公告并显示的功能
修复点击 markdown 预览界面中的文字部分无法进入编辑模式的问题
接入 Sentry 异常收集平台
发布地址: v1.0.1
本站下载: com.debuggerx.dde-gesture-manager_1.0.1.1_amd64.deb
[v1.0.0]
正式使用生产服务器作为数据源
完成 Deepin/UOS 应用商店规范的 deb 打包
发布地址: v1.0.0
DDE手势管理器-说明手册
概述DDE手势管理器是专为 DDE 桌面环境打造的触摸板手势管理工具(缩写:dgm),客户端使用 Flutter 构建,支持如下功能:
创建、编辑、删除本地手势配置方案
将选定手势方案应用到系统中
注册登陆后可以上传、分享自己创建的配置方案
可以下载、点赞他人分享的配置方案
贴合 DDE 的 UI 设计风格,支持系统主题切换和活动色
支持多语言
使用入门您可以通过以下方式运行或关闭手势管理器,或者创建快捷方式。
img[alt=logo] {
display: inline !important;
margin: -0.2em 0.5em !important;
width: 1.5em;
}
运行手势管理器
单击任务栏上的手势管理器图标,进入手势管理器界面。
上下滚动鼠标滚轮浏览或通过搜索,找到手势管理器图标,单击运行 。
右键单击 ,您可以:
单击 发送到桌面,在桌面创建快捷方式。
单击 发送到任务栏,将应用程序固定到任务栏。
关闭手势管理器
在手势管理器界面,单击 ,退出手势管理器。
右键单击任务栏上 ...
利用 GitHub Actions 自动构建 Linux 内核为 deb 包
在上一篇中,我记录了如何通过源码直接编译并安装 Linux 内核,这一篇将介绍如何将内核编译为 deb 包,使我们可以方便地利用系统包管理工具对编译好的内核进行安装和删除等管理操作,以及如何利用 GitHub Actions 帮我们自动化编译。
本地编译主要参考 debian 的官方文档:编译内核源代码:Debian 内核团队推荐
相比于前篇介绍的步骤,主要区别如下:
使用 sudo apt-get build-dep linux 的方式即可自动安装编译内核所需的全部依赖
可以用 wget 直接从 http://www.kernel.org/pub/linux/kernel/ 这个位置下载所需源码包
使用 make deb-pkg 命令编译,即可生成内核的 deb 安装包。
利用 KVM 虚拟机隔离编译环境
为了不污染工作机的系统环境,我编译软件一般都是先用 KVM 开一个虚拟机进行编译,然后将产物拷贝到物理机使用,下面记录完整流程
下载系统镜像 iso 文件,我下载的是 UOS 系统的安装镜像,放置于 ~/Downloads/uniontechos-desktop-21. ...
修改 Linux 内核使系统启动时间缩短约 30 秒
首先注明,标题描述的修改效果并不具备普适性,仅仅是针对我刚买的新本子的特殊处理,但文中涉及的一些思路和技巧应该还是对处理解决类似的问题有一定的帮助。
对比视频
var bili1 = document.querySelector('#bili1');
var container = document.querySelector('#article-container');
bili1.height = (container.clientWidth * 3 / 4) + 'px';
问题描述趁着 618 活动新买了台红米 air 笔记本,cpu 是 i7-10510Y,希望可以日常使用 Linux,尝试了多个发行版基本都能正常使用,唯一的问题就是启动时,当在 GRUB 选择系统页面选择系统后,画面会停留在 GURB 主题背景页面长达 30 秒,然后才能继续开机流程。
尝试了最新的 Ubuntu 系统,也是类似的问题,唯一的区别是 Ubuntu 下是选择系统后电脑黑屏 30 秒然后出现加载信息。
查看 dmesg 信息可以看到如下错误:
123456 ...