Ответ
На последнем коммерческом проекте (fintech-приложение) мы использовали следующий стек на Flutter/Dart:
- Ядро: Flutter 3.x, Dart с null-safety.
- Архитектура: Чистая архитектура (Clean Architecture) с разделением на domain, data, presentation слои.
- State Management: Bloc/Cubit для управления сложным состоянием бизнес-логики. Для более локального состояния использовали Riverpod.
- Сетевое взаимодействие: Dio для HTTP-запросов с кастомной оберткой для обработки ошибок, токенов и логирования. Для типизации API-ответов использовали
json_serializable. - Локальное хранилище: Hive для кеширования пользовательских данных и настроек из-за его высокой скорости.
- Внедрение зависимостей: get_it в сочетании с injectable для автоматической генерации регистраторов.
- Тестирование: Unit-тесты с mockito для изолированного тестирования бизнес-логики (Cubit, UseCases). Widget-тесты для проверки UI. Интеграционные тесты для критических пользовательских сценариев.
- Инструменты: Firebase Crashlytics и Analytics, Code Magic для CI/CD.
Пример структуры Bloc для загрузки данных:
class UserProfileBloc extends Bloc<UserProfileEvent, UserProfileState> {
final GetUserProfileUseCase _getUserProfileUseCase;
UserProfileBloc(this._getUserProfileUseCase) : super(UserProfileInitial()) {
on<FetchUserProfile>((event, emit) async {
emit(UserProfileLoading());
final result = await _getUserProfileUseCase.call(event.userId);
result.fold(
(failure) => emit(UserProfileError(failure.message)),
(profile) => emit(UserProfileLoaded(profile)),
);
});
}
}
Также был опыт работы с GraphQL (пакет graphql_flutter) и написанием нативных модулей для работы с биометрией и Secure Storage.