Расскажи про стек технологий на прошлых местах работы

«Расскажи про стек технологий на прошлых местах работы» — вопрос из категории Софт-скиллы, который задают на 36% собеседований Flutter Разработчик. Ниже — развёрнутый пример ответа, который можно адаптировать под свой опыт.

Ответ

На последнем коммерческом проекте (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.