DT Dart  ·  25 вопросов  ·  ~70 мин  ·  ⏱ Таймер 10:00  ·  Средний  · 

Навигация и маршруты Flutter

Тест по теме «Навигация и маршруты Flutter» охватывает «Стек навигации Navigator», «Именованные маршруты», «Передача данных», «Восстановление состояния» и «Безопасность данных». В 25 вопросах нужно читать код, различать граничные случаи, выбирать место исправления, формулировать внешний договор и проектировать регрессионную проверку. Заданий с фрагментами кода — 15; в каждом вопросе один правильный ответ из пяти.

Отвечено: 0 из 25
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На работу отведено 70 минут. В заданиях с кодом опирайтесь на показанный фрагмент и наблюдаемое поведение; в ситуационных — на публичный договор и последствия решения.
Вопрос 1 из 25
Фрагмент допускает частный обход спорного случая. Как перенести ответственность туда, где определяется правило «Стек навигации Navigator»?
DartDart · Стек навигации Navigator · исправление
Future<void> editOrder(BuildContext context, OrderId id) async {
  final changed = await Navigator.of(context).push<bool>(
    MaterialPageRoute(builder: (_) => OrderPage(id: id)),
  );
  if (changed == true && context.mounted) refresh(context);
}

// Контекст задания: выбор места исправления.
Вопрос 2 из 25
Обычный путь в коде зелёный. Как построить проверку «Стек навигации Navigator», чтобы не пропустить различия между отказами?
DartDart · Стек навигации Navigator · границы
Future<void> editOrder(BuildContext context, OrderId id) async {
  final changed = await Navigator.of(context).push<bool>(
    MaterialPageRoute(builder: (_) => OrderPage(id: id)),
  );
  if (changed == true && context.mounted) refresh(context);
}

// Контекст задания: анализ граничных входов.
Вопрос 3 из 25
Что здесь следует считать правилом «Стек навигации Navigator», а что — лишь деталью текущей реализации?
DartDart · Стек навигации Navigator · семантика
Future<void> editOrder(BuildContext context, OrderId id) async {
  final changed = await Navigator.of(context).push<bool>(
    MaterialPageRoute(builder: (_) => OrderPage(id: id)),
  );
  if (changed == true && context.mounted) refresh(context);
}

// Контекст задания: проверка семантики фрагмента.
Вопрос 4 из 25
Что должно оставаться неизменным при замене реализации темы «Стек навигации Navigator»?
Вопрос 5 из 25
Какая регрессия для «Стек навигации Navigator» будет падать на старом дефекте и не ломаться от безопасной перестройки кода?
Вопрос 6 из 25
На ревью просят не размножать проверки по вызывающему коду. Какое исправление для «Именованные маршруты» отвечает этому требованию?
DartDart · Именованные маршруты · исправление
Route<dynamic> onGenerateRoute(RouteSettings settings) {
  final uri = Uri.parse(settings.name ?? '/');
  if (uri.pathSegments case ['orders', final rawId]) {
    final id = OrderId.tryParse(rawId);
    return id == null ? invalidRoute() : orderRoute(id);
  }
  return notFoundRoute();
}

// Контекст задания: выбор места исправления.
Вопрос 7 из 25
На какую гарантию языка или интерфейса можно опереться при разборе этого кода по теме «Именованные маршруты»?
DartDart · Именованные маршруты · семантика
Route<dynamic> onGenerateRoute(RouteSettings settings) {
  final uri = Uri.parse(settings.name ?? '/');
  if (uri.pathSegments case ['orders', final rawId]) {
    final id = OrderId.tryParse(rawId);
    return id == null ? invalidRoute() : orderRoute(id);
  }
  return notFoundRoute();
}

// Контекст задания: проверка семантики фрагмента.
Вопрос 8 из 25
Обычный путь в коде зелёный. Как построить проверку «Именованные маршруты», чтобы не пропустить различия между отказами?
DartDart · Именованные маршруты · границы
Route<dynamic> onGenerateRoute(RouteSettings settings) {
  final uri = Uri.parse(settings.name ?? '/');
  if (uri.pathSegments case ['orders', final rawId]) {
    final id = OrderId.tryParse(rawId);
    return id == null ? invalidRoute() : orderRoute(id);
  }
  return notFoundRoute();
}

// Контекст задания: анализ граничных входов.
Вопрос 9 из 25
Какой сценарий должен стать постоянной проверкой после исправления «Именованные маршруты»?
Вопрос 10 из 25
Что должно оставаться неизменным при замене реализации темы «Именованные маршруты»?
Вопрос 11 из 25
После одного успешного запуска фрагмент признали готовым. Какой набор случаев по теме «Передача данных» всё ещё нужно проверить раздельно?
DartDart · Передача данных · границы
final class OrderRouteArgs {
  const OrderRouteArgs({required this.id, required this.source});
  final OrderId id;
  final AnalyticsSource source;
}

final args = ModalRoute.of(context)!.settings.arguments as OrderRouteArgs;

// Контекст задания: анализ граничных входов.
Вопрос 12 из 25
На ревью просят не размножать проверки по вызывающему коду. Какое исправление для «Передача данных» отвечает этому требованию?
DartDart · Передача данных · исправление
final class OrderRouteArgs {
  const OrderRouteArgs({required this.id, required this.source});
  final OrderId id;
  final AnalyticsSource source;
}

final args = ModalRoute.of(context)!.settings.arguments as OrderRouteArgs;

// Контекст задания: выбор места исправления.
Вопрос 13 из 25
На какую гарантию языка или интерфейса можно опереться при разборе этого кода по теме «Передача данных»?
DartDart · Передача данных · семантика
final class OrderRouteArgs {
  const OrderRouteArgs({required this.id, required this.source});
  final OrderId id;
  final AnalyticsSource source;
}

final args = ModalRoute.of(context)!.settings.arguments as OrderRouteArgs;

// Контекст задания: проверка семантики фрагмента.
Вопрос 14 из 25
Какой контракт по теме «Передача данных» отделяет наблюдаемое поведение от внутренних шагов?
Вопрос 15 из 25
Какой сценарий должен стать постоянной проверкой после исправления «Передача данных»?
Вопрос 16 из 25
Код проходит обычный сценарий. Какие проверки по теме «Восстановление состояния» нужны, чтобы разные граничные исходы не слились в один?
DartDart · Восстановление состояния · границы
class RestorableOrderId extends RestorableValue<String?> {
  @override String? createDefaultValue() => null;
  @override void didUpdateValue(String? oldValue) => notifyListeners();
  @override String? fromPrimitives(Object? data) => data as String?;
  @override Object? toPrimitives() => value;
}

// Контекст задания: анализ граничных входов.
Вопрос 17 из 25
Что в поведении этого кода гарантировано правилами темы «Восстановление состояния», а не случайно совпало в одном запуске?
DartDart · Восстановление состояния · семантика
class RestorableOrderId extends RestorableValue<String?> {
  @override String? createDefaultValue() => null;
  @override void didUpdateValue(String? oldValue) => notifyListeners();
  @override String? fromPrimitives(Object? data) => data as String?;
  @override Object? toPrimitives() => value;
}

// Контекст задания: проверка семантики фрагмента.
Вопрос 18 из 25
На ревью просят не размножать проверки по вызывающему коду. Какое исправление для «Восстановление состояния» отвечает этому требованию?
DartDart · Восстановление состояния · исправление
class RestorableOrderId extends RestorableValue<String?> {
  @override String? createDefaultValue() => null;
  @override void didUpdateValue(String? oldValue) => notifyListeners();
  @override String? fromPrimitives(Object? data) => data as String?;
  @override Object? toPrimitives() => value;
}

// Контекст задания: выбор места исправления.
Вопрос 19 из 25
Перед обновлением зависимости нужно защитить исправление «Восстановление состояния». Какая проверка подходит лучше всего?
Вопрос 20 из 25
Какой контракт по теме «Восстановление состояния» отделяет наблюдаемое поведение от внутренних шагов?
Вопрос 21 из 25
Какое утверждение корректно связывает показанный код с семантикой темы «Безопасность данных»?
DartDart · Безопасность данных · семантика
Future<Route<void>> secureOrderRoute(String rawId) async {
  final id = OrderId.tryParse(rawId);
  if (id == null) return invalidRoute();
  if (!await permissions.canRead(id)) return forbiddenRoute();
  return MaterialPageRoute(builder: (_) => OrderPage(id: id));
}

// Контекст задания: проверка семантики фрагмента.
Вопрос 22 из 25
В показанном решении проблему обходят рядом с одним вызовом. Какое изменение исправляет саму границу темы «Безопасность данных»?
DartDart · Безопасность данных · исправление
Future<Route<void>> secureOrderRoute(String rawId) async {
  final id = OrderId.tryParse(rawId);
  if (id == null) return invalidRoute();
  if (!await permissions.canRead(id)) return forbiddenRoute();
  return MaterialPageRoute(builder: (_) => OrderPage(id: id));
}

// Контекст задания: выбор места исправления.
Вопрос 23 из 25
После одного успешного запуска фрагмент признали готовым. Какой набор случаев по теме «Безопасность данных» всё ещё нужно проверить раздельно?
DartDart · Безопасность данных · границы
Future<Route<void>> secureOrderRoute(String rawId) async {
  final id = OrderId.tryParse(rawId);
  if (id == null) return invalidRoute();
  if (!await permissions.canRead(id)) return forbiddenRoute();
  return MaterialPageRoute(builder: (_) => OrderPage(id: id));
}

// Контекст задания: анализ граничных входов.
Вопрос 24 из 25
Как сформулировать публичное обещание темы «Безопасность данных», не привязывая клиента к конкретному классу?
Вопрос 25 из 25
Перед обновлением зависимости нужно защитить исправление «Безопасность данных». Какая проверка подходит лучше всего?

Ответьте на все 25 вопросов, чтобы получить результат

🔗 Встроить тест на свой сайт (iframe) ▼

Скопируйте код и вставьте в любое место на вашем сайте:

Также доступна прямая ссылка на embed-страницу