项目搭建
flutter create --org com.example my_app
cd my_app
flutter run
建议一开始就规划好项目结构:
lib/
├── main.dart
├── app.dart
├── models/ # 数据模型
├── services/ # 网络请求、本地存储等
├── pages/ # 页面
├── widgets/ # 可复用组件
└── utils/ # 工具函数
状态管理
Flutter 的状态管理方案很多,独立开发者不要纠结,选一个够用的就行:
- 简单项目:
setState+InheritedWidget就够了 - 中等项目:Riverpod,API 设计合理,类型安全
- 复杂项目:Bloc,适合有明确状态流转的场景
我用的是 Riverpod,上手之后开发效率很高。
网络请求
用 Dio 就对了:
final dio = Dio(BaseOptions(
baseUrl: 'https://api.example.com',
connectTimeout: Duration(seconds: 5),
receiveTimeout: Duration(seconds: 10),
));
// 添加拦截器处理 token
dio.interceptors.add(InterceptorsWrapper(
onRequest: (options, handler) {
options.headers['Authorization'] = 'Bearer $token';
handler.next(options);
},
));
本地存储
- 简单键值对:shared_preferences
- 结构化数据:sqflite(SQLite)或 Hive(NoSQL)
- 安全存储(token等):flutter_secure_storage
适配与测试
屏幕适配
用 MediaQuery 和 LayoutBuilder 做响应式布局,不要写死尺寸。flutter_screenutil 可以帮你做等比缩放,但不要过度依赖。
测试
至少写单元测试覆盖核心业务逻辑:
test('计算订单总价', () {
final order = Order(items: [
OrderItem(price: 10, quantity: 2),
OrderItem(price: 20, quantity: 1),
]);
expect(order.totalPrice, 40);
});
上架准备
Android
- 生成签名密钥:
keytool -genkey -v -keystore my-key.jks -keyalg RSA -keysize 2048 -validity 10000 - 配置
android/app/build.gradle中的签名信息 - 构建:
flutter build apk --release或flutter build appbundle - 国内主要上架:华为应用市场、小米应用商店、OPPO/vivo 应用商店
- 每个市场的审核要求略有不同,提前看好文档
iOS
- 注册 Apple Developer 账号(688元/年)
- 在 Xcode 中配置证书和描述文件
- 构建:
flutter build ipa - 通过 Transporter 上传到 App Store Connect
- 填写应用信息、截图、隐私政策
- 提交审核
审核常见问题
- 隐私政策必须有,而且要能访问
- 如果有用户注册,必须提供注销账号的功能
- iOS 审核比较严格,虚拟商品必须走内购
- 截图要真实,不能和实际功能不符
小结
Flutter 做跨端 App 确实省事,一个人维护一套代码就能覆盖两个平台。上架流程虽然繁琐,但走一遍就熟了。