Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+1 467новых вакансий за сутки·93 721вакансия открыта сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании7 267
РезюмеAIПодготовкаСтатьи
BoostТарифыBoost
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 401 кандидат открыт к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python17 129
  • Облачные технологии14 088
  • QA вакансии3 457
  • Backend вакансии2 115
  • Инженер данных1 805
  • Продакт-менеджер1 262

Разработка

  • Android1 865
  • iOS1 698
  • Fullstack вакансии989
  • AI вакансии949
  • Frontend вакансии744
  • Mobile вакансии44

По стеку

  • Go8 660
  • Java6 550
  • Node.js2 020
  • .NET1 722
  • Kotlin1 619
  • Rust1 455
  • C#711
  • PHP683
  • C++572

DevOps и инфраструктура

  • Kubernetes7 769
  • DevOps вакансии6 056
  • Linux-инфраструктура5 493
  • Terraform / IaC4 266
  • CI/CD3 250
  • Мониторинг и Observability1 788
  • SRE567
  • Кибербезопасность453

Аналитика и данные

  • Data Scientist1 141
  • Бизнес-аналитик927
  • Аналитик данных854
  • Системный аналитик153

Другие направления

  • Проджект-менеджер616
  • UI/UX дизайн146
  • Ручное тестирование14

По регионам

  • Вакансии в США44 281
  • Вакансии в Европе23 875
  • Вакансии в Канаде4 475
  • Работа в России3 922

По формату

  • Удалённые вакансии75 035
  • Релокация в США44 281
  • Гибридная работа12 401
  • Офисная работа7 079

По уровню

  • Senior вакансии42 679
  • Middle вакансии20 894
  • Junior вакансии6 722

Сейчас нанимают

Все компании
  • Wise190 вакансий
  • Rakuten189 вакансий
  • ASML166 вакансий
  • Grab137 вакансий
  • Celonis39 вакансий
  • Spotify37 вакансий
  • Adyen28 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace16 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К теме FlutterВсе вопросы
FlutterJuniorТеория

Как работают Navigator.push() и Navigator.pop()?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

Navigator.push() добавляет новый маршрут на стек экранов, Navigator.pop() — удаляет верхний маршрут и возвращает управление предыдущему экрану; pop() может передавать результат вызывающему экрану.

Navigator.push()

Метод принимает два аргумента: BuildContext и объект Route. Чаще всего используют MaterialPageRoute:

// Переход на новый экран
Navigator.push(
  context,
  MaterialPageRoute(
    builder: (context) => const DetailScreen(id: 42),
  ),
);

// Ожидание результата с await
final result = await Navigator.push<String>(
  context,
  MaterialPageRoute(
    builder: (context) => const EditScreen(),
  ),
);
if (result != null) {
  ScaffoldMessenger.of(context).showSnackBar(
    SnackBar(content: Text('Получено: $result')),
  );
}

Навигация во Flutter: Navigator.push() и Navigator.pop()

Flutter использует стек экранов (routes). Navigator.push() добавляет новый маршрут поверх стека, а Navigator.pop() удаляет верхний маршрут и возвращает управление предыдущему экрану.

Navigator.pop()

Закрывает текущий экран. Можно передать результат обратно вызывающему экрану:

// Простое закрытие
Navigator.pop(context);

// Закрытие с передачей результата
Navigator.pop(context, 'Данные сохранены');

Именованные маршруты

Для структурированных приложений удобны именованные маршруты, объявленные в MaterialApp:

MaterialApp(
  initialRoute: '/',
  routes: {
    '/': (context) => const HomeScreen(),
    '/detail': (context) => const DetailScreen(),
    '/settings': (context) => const SettingsScreen(),
  },
);

// Переход по имени
Navigator.pushNamed(context, '/detail');

// С аргументами
Navigator.pushNamed(
  context,
  '/detail',
  arguments: {'id': 42, 'title': 'Заголовок'},
);

// Получение аргументов внутри экрана
final args = ModalRoute.of(context)!.settings.arguments as Map<String, dynamic>;

pushReplacement и pushAndRemoveUntil

Для потоков авторизации и онбординга нужны специальные методы:

// Заменяет текущий экран (кнопка "Назад" не вернёт предыдущий)
Navigator.pushReplacement(
  context,
  MaterialPageRoute(builder: (context) => const HomeScreen()),
);

// Очищает весь стек и открывает новый экран (например, после логина)
Navigator.pushAndRemoveUntil(
  context,
  MaterialPageRoute(builder: (context) => const DashboardScreen()),
  (route) => false, // предикат — false убирает все предыдущие маршруты
);

Go Router как альтернатива

В крупных приложениях рекомендуется пакет go_router, который поддерживает deep links, web URL и декларативные маршруты:

final router = GoRouter(
  routes: [
    GoRoute(path: '/', builder: (context, state) => const HomeScreen()),
    GoRoute(path: '/detail/:id', builder: (context, state) {
      final id = state.pathParameters['id']!;
      return DetailScreen(id: int.parse(id));
    }),
  ],
);

// Переход
context.go('/detail/42');
context.pop();

Подводные камни

  • Вызов Navigator.pop() на единственном экране в стеке вызывает исключение — проверяйте Navigator.canPop(context) перед вызовом.
  • Передача context после асинхронных операций (await) может привести к ошибке «use_build_context_synchronously» — проверяйте mounted после await.
  • Именованные маршруты не поддерживают типизированные аргументы на уровне компилятора — ошибки появляются только в рантайме.
  • При использовании вложенных Navigator (например, в BottomNavigationBar) метод Navigator.pop() работает только с ближайшим NavigatorState — используйте Navigator.of(context, rootNavigator: true) для выхода из вложенного стека.
  • Отсутствие анимации при навигации на Web-платформе — по умолчанию MaterialPageRoute использует платформо-зависимую анимацию, что ломает ожидания пользователей на вебе.
  • pushAndRemoveUntil с предикатом (route) => false удаляет все маршруты — не оставит возможности вернуться даже через кнопку «Назад» устройства.

Частые вопросы на собеседовании

  • Как работает управление состоянием (state management) во Flutter? Назовите распространённые решения.
  • Как работает дерево виджетов (widget tree) во Flutter (widget tree, element tree, render tree)?
  • Каковы лучшие практики оптимизации производительности Flutter?
  • В чём разница между StatelessWidget и StatefulWidget?

Типичные ошибки

  • Сводить «работают Navigator.push() и Navigator.pop()» к синтаксису и не объяснять render tree.
  • Игнорировать жизненный цикл, основной поток или момент освобождения ресурсов в сценарии flutter-17.
  • Выбирать API по привычке, не проверяя состояние, ошибки, доступность и платформенные ограничения.

Что проверяет интервьюер

  • Формулирует точную модель для «работают Navigator.push() и Navigator.pop()» и подтверждает ее корректным примером.
  • Умеет связать ответ с frame scheduling, тестированием и отладкой на устройстве.
  • Называет ограничения подхода flutter-17, включая производительность, память и сопровождение.

Как вы знаете этот вопрос?

Проверить себя по теме Flutter →

Источники

  • https://docs.flutter.dev/ui/navigation
←Предыдущий вопросВ чём разница между `setState`, Provider, Riverpod, Bloc и GetX?Следующий вопрос→Что такое `pubspec.yaml` и как управлять зависимостями во Flutter?

Связанные темы

FlutterMobile-Engineeringnavigation-architecture