Flutter 整洁架构如何实现
Flutter 整洁架构的具体实现步骤是什么?能否分享一个清晰的分层结构和代码示例,特别是如何处理数据层、领域层和表现层之间的依赖关系?感觉网上资料比较零散,希望有经验的大佬指点一下。
2 回复
Flutter 整洁架构通过分层实现:
- 领域层:业务逻辑与实体,独立于框架。
- 数据层:数据源与仓库实现,为领域层提供数据。
- 表示层:UI 与状态管理(如 Bloc),依赖领域层。
各层依赖向内,外层可依赖内层,保持低耦合与可测试性。
更多关于Flutter 整洁架构如何实现的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
Flutter 整洁架构(Clean Architecture)通过分层设计实现关注点分离,使代码更易维护和测试。以下是核心实现步骤:
1. 分层结构
┌─────────────────┐
│ Presentation │ UI层(页面/组件)
├─────────────────┤
│ Domain │ 业务逻辑层(用例/实体)
├─────────────────┤
│ Data │ 数据层(仓库实现/数据源)
└─────────────────┘
2. 各层职责与实现
① Domain层(核心业务逻辑)
- Entity:纯Dart对象,定义核心业务模型
class User {
final String id;
final String name;
User({required this.id, required this.name});
}
- Repository抽象:定义数据操作接口
abstract class UserRepository {
Future<User> getUser(String id);
Future<void> saveUser(User user);
}
- UseCase:单个业务操作单元
class GetUserUseCase {
final UserRepository repository;
GetUserUseCase(this.repository);
Future<User> execute(String id) => repository.getUser(id);
}
② Data层(数据获取与存储)
- 实现Domain层的Repository接口
class UserRepositoryImpl implements UserRepository {
final RemoteDataSource remoteDataSource;
final LocalDataSource localDataSource;
@override
Future<User> getUser(String id) async {
try {
final user = await remoteDataSource.getUser(id);
localDataSource.cacheUser(user);
return user;
} catch (e) {
return localDataSource.getUser(id);
}
}
}
③ Presentation层(UI展示)
- 使用BLoC/Provider/Riverpod等状态管理
class UserBloc {
final GetUserUseCase getUserUseCase;
final StreamController<User> _userController = StreamController();
Stream<User> get user => _userController.stream;
void fetchUser(String id) async {
final user = await getUserUseCase.execute(id);
_userController.add(user);
}
}
3. 依赖规则
- 向内依赖:外层可依赖内层,内层不感知外层
- 依赖注入:使用
get_it或构造函数注入
// 依赖配置
void setupDependencies() {
get_it.registerSingleton<UserRepository>(UserRepositoryImpl());
get_it.registerFactory(() => GetUserUseCase(get_it()));
}
4. 关键优势
- 可测试性:可单独测试UseCase(模拟Repository)
- 框架无关:Domain层不依赖Flutter
- 易维护:各层职责明确,修改影响局部化
示例项目结构
lib/
├── presentation/
│ ├── pages/
│ └── widgets/
├── domain/
│ ├── entities/
│ ├── repositories/
│ └── usecases/
└── data/
├── repositories/
├── datasources/
└── models/
通过这种架构,Flutter应用能有效解耦业务逻辑、UI和数据层,提升代码质量和可维护性。

