目录
[1. 📂 Flutter 了解](#1. 📂 Flutter 了解)
[1.1 Flutter 架构](#1.1 Flutter 架构)
[1.2 应用架构](#1.2 应用架构)
[1.3 Widget](#1.3 Widget)
[1.4 模块划分](#1.4 模块划分)
[2. 🔱 Dart 语法](#2. 🔱 Dart 语法)
[2.1 基础](#2.1 基础)
[2.2 变量声明](#2.2 变量声明)
[2.3 空安全](#2.3 空安全)
[2.4 类之间的关系](#2.4 类之间的关系)
[2.5 函数](#2.5 函数)
[2.6 异步](#2.6 异步)
[3. 💠 初始化](#3. 💠 初始化)
[3.1 应用初始化](#3.1 应用初始化)
[3.2 Widget 初始化](#3.2 Widget 初始化)
[4. ⚛️ 基础组件](#4. ⚛️ 基础组件)
[4.1 日志系统](#4.1 日志系统)
[4.2 数据库系统](#4.2 数据库系统)
[5. 🎉 其他](#5. 🎉 其他)
[5.1 APK 编译生成](#5.1 APK 编译生成)
[5.2 代码提交](#5.2 代码提交)
[5.3 代码调试](#5.3 代码调试)
[✅ 小结](#✅ 小结)
[🛎️ 参考](#🛎️ 参考)
1. 📂 Flutter 了解
-
Flutter 是开源免费的,应用开发场景,跨平台(移动、web、桌面端)的 UI 框架;
-
Flutter 是 Google 的便携式 UI 工具包,由 Google 和开发社区共同创造,使用 Dart(一种现代化的、简洁的面向对象语言) 实现其大部分系统功能 (布局、手势、动画、框架、Widget 等);
-
Flutter 性能调试工具:开发工具 (DevTools ) 是一套 Dart 和 Flutter 的性能调试工具:https://docs.flutter.cn/tools/devtools ;
-
开发工具:通过插件的方式使用 Android Studio、IntelliJ IDEA 和 VS Code 开发,其他如:Firebase Studio 支持 Dart 和 Flutter;
-
Flutter 成长:Flutter 1 于 2018 年 12 月推出, Flutter 2 于 2021 年 3 月 3 日发布, Flutter 3 于 2023 年 5 月 10 日发布。
1.1 Flutter 架构

Flutter 开发文档
https://docs.flutter.cn/
1.2 应用架构

Guide to app architecture
https://docs.flutter.cn/app-architecture/guide
1.3 Widget
Flutter 框架将 Widget 分为两大类:StatefulWidget 有状态的和 StatelessWidget 无状态的。
代码中建议尽量使用无状态的 StatelessWidget ,如果一个 Widget 会变化(例如由于用户交互),它是有状态的 StatefulWidget。
|------|------------------------|-----------------------------|
| 维度 | StatelessWidget (无状态) | StatefulWidget (有状态) |
| 核心定义 | 界面一旦构建,在生命周期内不再发生变化 | 界面可以根据用户交互或数据流的变化而动态更新 |
| 数据特性 | 它是不可变的,属性通常由构造函数传入 | 包含一个持久的 State 对象,它是可变的 |
| 构建机制 | 依赖父组件的改变来触发销毁并重新创建 | 可以通过调用 setState() 触发自身局部的重绘 |
| 性能开销 | 结构简单,内存占用更低,渲染速度更快 | 相对复杂,需要维护额外的 State 对象和生命周期 |
| 推荐用法 | 首选方案,适用展示型 UI,如图标、静态文字 | 在 Widget 内部状态会改变时使用,如表单、动画 |
| 代码结构 | 只有一个类,重写 build 方法 | 由两个类组成:Widget 类和对应的 State 类 |
1.4 模块划分

2. 🔱 Dart 语法
2.1 基础
-
应用运行入口 :顶层的 main() 函数作为应用运行入口。
-
Dart 是类型安全的编程语言,静态类型检查+运行时检查。
2.2 变量声明
-
变量声明的几种方式:var、显式申明、Object、dynamic、final、const。一个 final 变量只能设置一次,const 变量是编译时常量(const 常量隐式包含了 final)。
-
变量延迟初始化 :late。如下情况可考虑使用 late:1)可能不需要该变量,并且初始化它的开销很高;2)你正在初始化一个实例变量,它的初始化方法需要调用 this。
-
私有变量:_变量名。
2.3 空安全

?? 可空变量空值合并(如: name ?? '未知用户'------如果name为null,使用'未知用户')。
2.4 类之间的关系
-
类的基类:所有类的基类都是Object(除了null),所有的类都隐式定义成了一个接口,因此任意类都可以作为接口被实现,abstract class 既可以被继承,也可以被实现。
-
类的修饰:abstract、base、final、interface、sealed、mixin。
- base类不允许在其自身库之外进行实现;
- final类禁止继承和实现,所以final修饰符包含了base的效果;
- sealed类创建一组已知的、可枚举的子类型,sealed类是隐式抽象,但sealed类的子类不是隐式抽象。
-
类的扩展:extension <extension name>? on <type> {},extension name可省略。
-
类的组合:
-
extends:单继承;
-
with:混入 mixin,重用代码;
-
implements:实现接口 abstract class/interface class,定义行为。

2.5 函数
-
=> (胖箭头) :箭头语法用于仅包含一条语句的函数。
-
函数可返回多个值:(String, int) foo() { return ('something', 42);}。
|------|-------------|------------------------|
| 特性 | 顶层变量 / 函数 | 静态变量 / 函数 (static) |
| 定义位置 | 类外部(文件顶层) | 类内部 |
| 调用前缀 | 无(直接调用) | 必须带类名(如 MyClass.foo()) |
| 封装性 | 较弱,容易污染命名空间 | 较强,逻辑组织在类名下 |
| 内存占用 | 仅在第一次使用时加载 | 仅在第一次使用时加载 |
| 多态性 | 不支持重写 | 不支持重写 |
2.6 异步
-
异步:使用 async 、 await 以及 Future、Stream(async+、await for、yield) 关键字。
-
多个异步等待:Future.wait() 静态方法来管理多个 Future 对象并等待它们完成。
Dart 简介
https://dart.cn/language
3. 💠 初始化
3.1 应用初始化

/// 应用入口,初始化需分层执行:基础层→核心层→扩展层→后台层。
void main() async {
// ========== 1. 基础层:初始化 Flutter 引擎绑定(需确保 Flutter 引擎和框架已经初始化) ==========
WidgetsFlutterBinding.ensureInitialized();
// ========== 2. 核心层:UI组件、本地存储、全局配置、初始化日志、数据库、网络库等 ==========
try {
await LogManager().initialize();
// 同步、异步初始化其他核心服务(如有)
} catch (e) {
debugPrint("日志管理器初始化失败,降级为控制台打印:$e");
}
// ========== 3. 启动应用 ==========
logI("App Running...");
runApp(
ChangeNotifierProvider(
create: (_) => LoginUserViewModel()..loadCountryCode(),
child: const App(),
),
);
// ========== 4. 扩展层/后台层:其他初始化,如:初始化三方SDK、初始化埋点、检查更新等 ==========
WidgetsBinding.instance.addPostFrameCallback((_) async {
logI("Other init...");
});
}
3.2 Widget 初始化
|-----------------------------|----------|------------------------|------------------------------------------------|
| 放置位置 | 核心用途 | MVVM 职责建议 | 避坑指南 |
| Constructor | 接收外部参数 | 仅传递必要 ID 或配置,不创建实例 | 优先使用 const 提高渲染效率 |
| initState() | 一次性初始化 | 触发 ViewModel 的数据加载逻辑 | 仅执行一次,此时 context 尚未完全就绪 |
| didChangeDependencies() | 响应环境变化 | 处理主题或语言切换后的逻辑关联 | 会被多次触发,严禁执行耗时请求,StatefulWidget 的 State 中重写 |
| build() | 描述 UI 结构 | 绑定状态数据,将模型转化为组件 | 保持纯净,禁止实例化对象或执行逻辑,每次 setState 或父组件 rebuild 会回调 |
| dispose() | 释放内存资源 | 通知 ViewModel 取消订阅或停止任务 | 必须关闭所有控制器与监听,防止泄漏 |
4. ⚛️ 基础组件
4.1 日志系统
为了降低维护成本,我们将日志系统分为三层,各司其职:
第一层:门面层 (Facade):提供最简单的全局函数和单例入口,让开发者"无感"调用;
第二层:核心层 (Core):负责配置解析、级别过滤、逻辑分发;
第三层:实现层 (Handler):具体的落地执行者,如控制台着色打印、文件分片存储。

Flutter 日志模块之参考设计-CSDN博客
https://blog.csdn.net/Agg_bin/article/details/156642705
4.2 数据库系统
为了保证模块的可维护性,我们采用分层架构:
第一层:Bean (Table):定义表结构;
第二层:DB (AppDatabase):数据库配置、连接与迁移逻辑;
第三层:DAO (Data Access Object):隔离业务 SQL 逻辑;
第四层:Manager (DBManager):全局单例,屏蔽初始化细节。

Flutter 数据库模块之 Draft 设计-CSDN博客
https://blog.csdn.net/Agg_bin/article/details/156612693
5. 🎉 其他
5.1 APK 编译生成
生成 APK 文件:flutter build apk --release。
--不同模式的差异如下:
-
debug:用于开发和调试,包含调试信息,支持热重载和调试功能,适合开发过程中使用。
-
release:用于发布应用,优化了代码和资源,去除了调试信息,适合发布到 Google Play 或其他应用商店。
-
profile:介于 debug 和 release 之间,用于性能分析,包含了一些调试信息,但在运行时启用了性能优化,适合用于性能测试。
--生成APK时可以指定版本号、版本名:
flutter build apk --build-name=1.2.0 --build-number=5
-
运行命令生成分割架构的 APK 文件:flutter build apk --split-per-abi。
-
生成只包含 arm64-v8a 架构的 APK Release 文件:flutter build apk --release --target-platform android-arm64。
5.2 代码提交
build_runner生成的文件建议提交。
-
build_runner 是代码生成和构建工具,常用于生成代码、资源文件等,建议提交 .g.dart 生成文件;
-
如果只提交源代码文件,不提交 .g.dart 文件,通过 .gitignore 来忽略它们,那么本地代码需要使用 dart run build_runner build 或 dart run build_runner watch 来生成或自动生成这些文件。
5.3 代码调试
项目运行后,打开 AS 工具栏中的 View-Tool Windows-Flutter Inspector,可以跟踪代码中的 Widget 调用。
✅ 小结
本文作为一篇 Flutter 入门总结,很多内容是基于本人编程水平去罗列的,并未展示全貌。
另外,由于本人能力有限,如有错误,敬请批评指正,谢谢。
🛎️ 参考
1\] Flutter 官方文档:[https://docs.flutter.cn/](https://docs.flutter.cn/ "https://docs.flutter.cn/") \[2\] 应用架构 MVVM:[https://docs.flutter.cn/app-architecture/guide](https://docs.flutter.cn/app-architecture/guide "https://docs.flutter.cn/app-architecture/guide") \[3\] Dart 官方文档:[https://dart.cn/language](https://dart.cn/language "https://dart.cn/language") \[4\] 日志系统参考:[https://blog.csdn.net/Agg_bin/article/details/156642705](https://blog.csdn.net/Agg_bin/article/details/156642705 "https://blog.csdn.net/Agg_bin/article/details/156642705") \[5\] 数据库系统参考:[https://blog.csdn.net/Agg_bin/article/details/156612693](https://blog.csdn.net/Agg_bin/article/details/156612693 "https://blog.csdn.net/Agg_bin/article/details/156612693")