Flutter clean architecture / Idan Biton
The clean architecture seperates its features by lib/features/FEATURE_NAME
Feature structure is seperate into 3 parts:
PART 1 /data
Repository - Handle API methods by success status.
xxxxxxxxxx
import '.../core/resources/data_state.dart';
import '.../features/daily_posts/domain/entities/post_entity.dart';
import '.../features/daily_posts/domain/repository/posts_repository.dart';
import '../data_sources/remote/posts_api_service.dart';
import 'package:dio/dio.dart';
class PostRepositoryImpl implements PostRepository {
final PostsApiService _postsApiService;
PostRepositoryImpl(this._postsApiService);
// Handle API methods by success status.
@override
Future<DataState<List<PostEntity>>> getPosts() async {
try {
final httpResponse =
await _postsApiService.getPosts(country:countryQuery);
if (httpResponse.response.statusCode == HttpStatus.ok) {
return DataSuccess(httpResponse.data);
} else {
return DataFailed(DioError(error: httpResponse.response.statusMessage));
}
} on DioError catch(e){
return DataFailed(e);
}
}
}
PART 2 /domain
this part must be Independent & seperate into 3 parts
1. entities - Basically a model.use FREEZED Here so post_model.dart ➡️ post_entity.dart
2. repository - API Methosds Summary list of /data/repository
As you can see this code /domain/repository/post_repository.dart
is summary of /data/repostory/post_repository_impl.dart that mentioned in PART 1
xxxxxxxxxx
import '.../core/resources/data_state.dart';
import '.../features/daily_posts/domain/entities/post_entity.dart';
abstract class PostRepository {
// API methods Summary only.
Future>> getPosts();
}