Сколько лет коммерческого опыта в Flutter-разработке?

Ответ

У меня три года коммерческого опыта разработки на Flutter. За это время я участвовал в полном цикле создания более пяти приложений — от MVP для стартапов до масштабируемых корпоративных решений с высокой нагрузкой.

Мой основной стек включает:

  • State Management: BLoC/Cubit, Riverpod, Provider.
  • Архитектура: Четкое разделение на слои (Data, Domain, Presentation) по принципам Clean Architecture.
  • Работа с данными: Firebase (Auth, Firestore, Cloud Functions), REST (Dio, Retrofit), GraphQL.
  • Нативные интеграции: Опыт написания каналов (Platform Channels) для взаимодействия с нативным кодом на Kotlin и Swift.
  • Инфраструктура: GetIt для DI, Freezed для моделей, Build Runner, различные линтеры и форматеры.

Например, в одном из проектов я реализовывал сложный многоэтапный процесс с валидацией и синхронизацией оффлайн-данных. Вот упрощенная структура Cubit для такого сценария:

class MultiStepFormCubit extends Cubit<MultiStepFormState> {
  final ILocalRepository _localRepo;
  final IRemoteRepository _remoteRepo;

  MultiStepFormCubit(this._localRepo, this._remoteRepo) : super(const MultiStepFormState.initial());

  Future<void> submitStep(FormData data) async {
    emit(state.copyWith(status: FormStatus.loading));
    try {
      // 1. Сохраняем локально для оффлайн-доступа
      await _localRepo.cacheFormData(data);
      // 2. Пытаемся синхронизировать с бэкендом, если есть сеть
      if (await _checkConnectivity()) {
        await _remoteRepo.sync(data);
        emit(state.copyWith(status: FormStatus.success));
      } else {
        emit(state.copyWith(status: FormStatus.queuedForSync));
      }
    } catch (e) {
      emit(state.copyWith(status: FormStatus.error, errorMessage: e.toString()));
    }
  }
}

Я готов к сложным задачам, требующим глубокого понимания экосистемы Flutter и Dart, и могу быстро влиться в команду.

Ответ 18+ 🔞

Давай я тебе на пальцах объясню, что я тут умею, а то резюме эти читать — терпения ноль, ебать.

Три года на Flutter'е в коммерции — это не в песочнице поиграть. За это время я через себя пропустил овердохуища проектов: от этих ваших стартапских MVP, которые через полгода накрываются медным тазом, до серьёзных корпоративных штук, где пользователей — как грязи, и всё должно летать.

Короче, мой инструментарий:

  • За управление состоянием: BLoC/Cubit — моя любовь, Riverpod — уважаю, с Provider'ом тоже всё ясно.
  • Архитектура: Чистая архитектура (Clean Architecture) — это не просто модное слово. Data, Domain, Presentation — всё по полочкам, без этой каши в одном файле. Иначе потом поддерживать — волнение ебать.
  • Данные: От Firebase (тут и авторизация, и облачная база) до классических REST (Dio) и даже GraphQL.
  • Натив: Когда Flutter'у мало, лезу под капот. Писал эти самые Platform Channels, чтобы пообщаться с Kotlin и Swift. Не сахар, но что поделать.
  • Всякая автоматизация: GetIt для зависимостей, Freezed чтобы модели не писать вручную, линтеры чтобы код не выглядел как будто его кот, сука собака, наклавиатуре танцевал.

Вот, например, был проект с хитрой многострадальной формой, которую можно заполнять без сети. Сделал такую логику в Cubit'е, смотри:

class MultiStepFormCubit extends Cubit<MultiStepFormState> {
  final ILocalRepository _localRepo;
  final IRemoteRepository _remoteRepo;

  MultiStepFormCubit(this._localRepo, this._remoteRepo) : super(const MultiStepFormState.initial());

  Future<void> submitStep(FormData data) async {
    emit(state.copyWith(status: FormStatus.loading));
    try {
      // 1. Сразу пишем в локальное хранилище, чтобы не потерялось
      await _localRepo.cacheFormData(data);
      // 2. Если интернет есть — шлём на сервак
      if (await _checkConnectivity()) {
        await _remoteRepo.sync(data);
        emit(state.copyWith(status: FormStatus.success));
      } else {
        // Нет сети? Ну и хуй с ним, отложим на потом
        emit(state.copyWith(status: FormStatus.queuedForSync));
      }
    } catch (e) {
      emit(state.copyWith(status: FormStatus.error, errorMessage: e.toString()));
    }
  }
}

Короче, если нужен человек, который не просто кнопки по макету верстает, а понимает, как эта ебанько работает изнутри и как её не сломать при масштабировании — это ко мне. Вольюсь в команду быстро, задачи сложные не пугают, лишь бы не приносили говнокод, который потом разгребать.