2025-02-14-【研发】Flutter全栈开发
Flutter 全栈开发指南
本文旨在为开发者提供一份从零基础到生产环境最佳实践的 Flutter 开发指南,涵盖基础概念、进阶架构、性能优化及常见问题解决方案。
一、基础篇:构建你的第一个应用
1.1 Dart 语言速览
Flutter 使用 Dart 语言。Dart 结合了静态语言的类型安全和动态语言的开发效率。
核心特性:
- JIT & AOT:开发时 JIT (Just-In-Time) 提供热重载 (Hot Reload),发布时 AOT (Ahead-Of-Time) 编译为原生机器码。
- 空安全 (Null Safety):默认开启,从编译层面杜绝空指针异常。
1 | |
1.2 Widget 基础:一切皆组件
Flutter 的核心理念是 “Everything is a Widget”。
- StatelessWidget:不可变状态组件(如 Icon, Text)。
- StatefulWidget:持有可变状态的组件(如 Checkbox, TextField)。
示例:计数器组件
1 | |
1.3 布局系统
Flutter 提供了强大的 Flex 布局模型。
- Row/Column:水平/垂直线性布局。
- Stack:层叠布局(类似 CSS absolute)。
- Container:多功能容器(padding, margin, border, background)。
- Expanded/Flexible:控制子组件在 Row/Column 中的伸缩。
1 | |
二、进阶篇:架构与核心能力
2.1 状态管理 (State Management)
随着应用复杂度增加,setState 难以维护全局状态。推荐使用 Provider 或 Riverpod。
Provider 模式示例:
定义模型 (ChangeNotifier)
1
2
3
4
5
6
7
8
9class UserProvider extends ChangeNotifier {
String _username = '';
String get username => _username;
void login(String name) {
_username = name;
notifyListeners(); // 通知监听者更新
}
}注入状态 (ChangeNotifierProvider)
1
2
3
4
5
6
7
8void main() {
runApp(
ChangeNotifierProvider(
create: (_) => UserProvider(),
child: const MyApp(),
),
);
}消费状态 (Consumer/Provider.of)
1
2
3Consumer<UserProvider>(
builder: (context, user, child) => Text('User: ${user.username}'),
);
2.2 路由管理 (Navigation)
推荐使用 GoRouter,支持声明式路由、深层链接 (Deep Linking) 和路由守卫。
1 | |
2.3 网络请求
Dio 是 Flutter 最强大的 HTTP 客户端,支持拦截器、全局配置、FormData 等。
1 | |
三、最佳实践:生产环境指南
3.1 项目目录结构
良好的目录结构有助于维护。推荐 Feature-First 或 Layer-First 结构。
1 | |
3.2 性能优化
- 使用
const构造函数:减少 Widget 重建开销。 - 避免在
build方法中进行耗时操作:如网络请求或复杂计算。 - 列表优化:长列表必须使用
ListView.builder,避免一次性渲染所有 Item。 - 图片缓存:使用
cached_network_image库。
3.3 国际化 (i18n)
使用 flutter_localizations 和 ARB 文件管理多语言。
pubspec.yaml添加依赖。- 创建
l10n/app_en.arb和l10n/app_zh.arb。 - 代码中使用
AppLocalizations.of(context)!.hello。
四、常见问题 (FAQ)
Q1: 键盘弹出遮挡输入框怎么办?
解法:将页面主体包裹在 SingleChildScrollView 或 ListView 中,或使用 Scaffold 的 resizeToAvoidBottomInset: true (默认开启)。
Q2: 列表滚动卡顿?
排查:
- 检查 Item 是否过于复杂。
- 是否在 build 中加载大图(未使用缓存)。
- Debug 模式下卡顿是正常的(JIT),请在 Profile/Release 模式下测试。
Q3: 如何减小 APK/IPA 体积?
- 移除未使用的资源和库。
- 使用
--obfuscate --split-debug-info混淆并移除符号表。 - Android 开启
minifyEnabled true和shrinkResources true。
参考资料
2025-02-14-【研发】Flutter全栈开发
https://zhangyingxuan.github.io/2025-02-14-【研发】Flutter全栈开发/