FlutterUnit 是张风捷特烈的一个开源的 Flutter 全平台 项目,支持 Android、iOS、Windows、MacOS、Linux、Web 六大主流平台。项目通过交互应用的形式,整理收录 Flutter 内置组件、实用有趣的知识集锦、辅助工具等要点,辅助 Flutter 开发者更快捷、优化地体验 Flutter 开发。
春节期间,优化了一下 FlutterUnit 在国际化、导航2.0、项目结构优化之后,现在推出 FlutterUnit 3.0 版本。大家可以在 FlutterUnit 项目的 release 中下载体验。

1. 国际化的支持
目前已经初步支持国际化,对于应用中非内容的固定文字,进行了国际化处理,目前只支持简体中文和英文两种语言,后期有时间会支持其他语言。
- 移动端在: 我的/应用设置/多语言 中切。
- 桌面端在: 设置/多语言 中切换。
移动端 | 移动端 | 移动端 |
---|---|---|
![]() |
![]() |
![]() |
桌面端 | 桌面端 |
---|---|
![]() |
![]() |
![]() |
![]() |
关于 Flutter 应用的国际化,我发布过对应的 B站视频。
FlutterUnit 中采用功能需求的分包 package 管理,对于国际化的需求,提取出 l10n 的模块包,这样需要使用国际化的模块,引入 l10n 即可:

国际化最主要的还是体力活,收集需要国际化的字符串,然后进行翻译、在代码中替换。在此感谢 女友
帮忙整理国际化的文字资源。另外,国际化功能属于全局的状态变化,和之前的主题色、字体类似,在全局状态中增加国际化的数据,通过 AppConfigBloc
进行维护:

在 Dart 枚举支持数据成员之后,这类具有固定描述信息的可枚举数据,处理起来就非常方便,比如这里定义 Language
枚举作为国际化的核心数据,就具有很好的语义性:
dart
import 'dart:ui';
enum Language {
zh_CN(locale: Locale('zh','CN'), label: '简体中文'),
en_US(locale: Locale('en','US'), label: 'English');
final Locale locale;
final String label;
const Language({
required this.locale,
required this.label,
});
}
组件的信息目前并没有进行国际化,这是一个很庞大的任务。我一个人很难去维护,后面我会定义一些描述规范,通过开源的力量,让所有人都可以参与到内容的国际化维护之中,这也是 FlutterUnit 的初心。

2. 导航 2.0 的支持
在 《Flutter 路由导航: 源码探索与实战》 小册完成后,我对 Flutter 导航 2.0 有了全面的认知。因此 FlutterUnit 也很快地迁移到了导航 2.0。其中最大的交互优势在于 FlutterUnit 桌面端终于拥有了 局部导航 的能力。如下所示,进入详情页等界面后,左侧的导航栏是固定存在的,而非全屏幕的跳转,这样体验会好很多。

如果自己使用 Flutter 内置的导航 2.0,会比较麻烦。 这里使用了官方推出的 GoRouter, 它是一个优秀的对导航 2.0 体系使用的封装,可以让开发者非常便利地使用声明式的导航操作。对导航感兴趣的朋友,可以支持一下我的路由小册 ~

3. 项目结构优化
FlutterUnit 中的各个模块的关联性并不强,非常适合模块化的分包处理。将功能需求分割成相互独立的模块,模块间可以相互依赖访问对方的功能。在主项目中,维护导航的相关工作,这就是我目前通过 FlutterUnit 对项目结构的思考。

4. 未来展望
一直想做些日常辅助的工具,后续将会着重对工具宝箱进行开发。通过 Dart 实现一些有用的小工具,当然并不限于编程开发的范畴。

之前通过 SpringBoot 为 FlutterUnit 开发过后端,但一直没有继续推进。最近在研究 rust 的后端开发,想把 SpringBoot 的项目迁移到 rust ,并搭建一套完善的接口。云上的 FlutterUnit 也是我一直的夙愿,但由于服务器、开发时间等种种原因,推进很慢。
最后,感谢大家的支持,FlutterUnit 的 star 一直以稳定的速度增加,目前已经达到 7K ,我也会一直维护下去,收录更过有趣实用的内容,让大家体验 Flutter 更多的魅力。
