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

Flutter: дерево виджетов и жизненный цикл

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

Отвечено: 0 из 25
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На работу отведено 70 минут. В заданиях с кодом опирайтесь на показанный фрагмент и наблюдаемое поведение; в ситуационных — на публичный договор и последствия решения.
Вопрос 1 из 25
Код прошёл демонстрационный пример, но границы не разобраны. Что нужно проверить отдельно в теме «Неизменяемые виджеты StatelessWidget»?
DartDart · Неизменяемые виджеты StatelessWidget · границы
class UserName extends StatelessWidget {
  const UserName({super.key, required this.user});
  final User user;

  @override
  Widget build(BuildContext context) {
    return Text(user.displayName, style: Theme.of(context).textTheme.titleMedium);
  }
}

// Контекст задания: анализ граничных входов.
Вопрос 2 из 25
Какой вариант правки убирает источник дефекта «Неизменяемые виджеты StatelessWidget» и не заставляет клиентов дублировать защиту?
DartDart · Неизменяемые виджеты StatelessWidget · исправление
class UserName extends StatelessWidget {
  const UserName({super.key, required this.user});
  final User user;

  @override
  Widget build(BuildContext context) {
    return Text(user.displayName, style: Theme.of(context).textTheme.titleMedium);
  }
}

// Контекст задания: выбор места исправления.
Вопрос 3 из 25
Какое утверждение о показанном фрагменте и теме «Неизменяемые виджеты StatelessWidget» опирается на реальную гарантию Dart или используемого интерфейса?
DartDart · Неизменяемые виджеты StatelessWidget · семантика
class UserName extends StatelessWidget {
  const UserName({super.key, required this.user});
  final User user;

  @override
  Widget build(BuildContext context) {
    return Text(user.displayName, style: Theme.of(context).textTheme.titleMedium);
  }
}

// Контекст задания: проверка семантики фрагмента.
Вопрос 4 из 25
Внутреннее устройство решения «Неизменяемые виджеты StatelessWidget» меняется. Какой внешний договор обязан сохраниться?
Вопрос 5 из 25
Какой тест действительно поймает возврат дефекта в теме «Неизменяемые виджеты StatelessWidget»?
Вопрос 6 из 25
Для показанного решения написали один тест на успех. Какой набор граничных сценариев по теме «Состояние StatefulWidget» должен появиться рядом?
DartDart · Состояние StatefulWidget · границы
class _ProfilePaneState extends State<ProfilePane> {
  late Future<Profile> _profile;

  @override
  void initState() {
    super.initState();
    _profile = api.load(widget.userId);
  }

  @override
  void didUpdateWidget(covariant ProfilePane oldWidget) {
    super.didUpdateWidget(oldWidget);
    if (oldWidget.userId != widget.userId) _profile = api.load(widget.userId);
  }
}

// Контекст задания: анализ граничных входов.
Вопрос 7 из 25
Какой тезис о коде «Состояние StatefulWidget» можно защитить без ссылки на удачный тестовый запуск?
DartDart · Состояние StatefulWidget · семантика
class _ProfilePaneState extends State<ProfilePane> {
  late Future<Profile> _profile;

  @override
  void initState() {
    super.initState();
    _profile = api.load(widget.userId);
  }

  @override
  void didUpdateWidget(covariant ProfilePane oldWidget) {
    super.didUpdateWidget(oldWidget);
    if (oldWidget.userId != widget.userId) _profile = api.load(widget.userId);
  }
}

// Контекст задания: проверка семантики фрагмента.
Вопрос 8 из 25
Какой вариант правки убирает источник дефекта «Состояние StatefulWidget» и не заставляет клиентов дублировать защиту?
DartDart · Состояние StatefulWidget · исправление
class _ProfilePaneState extends State<ProfilePane> {
  late Future<Profile> _profile;

  @override
  void initState() {
    super.initState();
    _profile = api.load(widget.userId);
  }

  @override
  void didUpdateWidget(covariant ProfilePane oldWidget) {
    super.didUpdateWidget(oldWidget);
    if (oldWidget.userId != widget.userId) _profile = api.load(widget.userId);
  }
}

// Контекст задания: выбор места исправления.
Вопрос 9 из 25
После исправления темы «Состояние StatefulWidget» нужен тест, который переживёт рефакторинг. Что следует закрепить?
Вопрос 10 из 25
Внутреннее устройство решения «Состояние StatefulWidget» меняется. Какой внешний договор обязан сохраниться?
Вопрос 11 из 25
Какое описание семантики показанного решения по теме «Контекст виджета BuildContext» является точным?
DartDart · Контекст виджета BuildContext · семантика
Future<void> save(BuildContext context) async {
  final result = await repository.save();
  if (!context.mounted) return;
  ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text(result.message)));
}

// Контекст задания: проверка семантики фрагмента.
Вопрос 12 из 25
Несколько мест использования повторяют одну и ту же защиту. Какая правка должна стать единой для темы «Контекст виджета BuildContext»?
DartDart · Контекст виджета BuildContext · исправление
Future<void> save(BuildContext context) async {
  final result = await repository.save();
  if (!context.mounted) return;
  ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text(result.message)));
}

// Контекст задания: выбор места исправления.
Вопрос 13 из 25
Код прошёл демонстрационный пример, но границы не разобраны. Что нужно проверить отдельно в теме «Контекст виджета BuildContext»?
DartDart · Контекст виджета BuildContext · границы
Future<void> save(BuildContext context) async {
  final result = await repository.save();
  if (!context.mounted) return;
  ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text(result.message)));
}

// Контекст задания: анализ граничных входов.
Вопрос 14 из 25
Какой договор позволяет тестировать «Контекст виджета BuildContext» через результат, а не через приватные детали?
Вопрос 15 из 25
После исправления темы «Контекст виджета BuildContext» нужен тест, который переживёт рефакторинг. Что следует закрепить?
Вопрос 16 из 25
На какую гарантию языка или интерфейса можно опереться при разборе этого кода по теме «Перестроение интерфейса»?
DartDart · Перестроение интерфейса · семантика
class CartTotal extends StatelessWidget {
  const CartTotal({super.key, required this.total});
  final ValueListenable<Money> total;

  @override
  Widget build(BuildContext context) => ValueListenableBuilder(
    valueListenable: total,
    builder: (_, value, __) => Text(value.format()),
  );
}

// Контекст задания: проверка семантики фрагмента.
Вопрос 17 из 25
Обычный путь в коде зелёный. Как построить проверку «Перестроение интерфейса», чтобы не пропустить различия между отказами?
DartDart · Перестроение интерфейса · границы
class CartTotal extends StatelessWidget {
  const CartTotal({super.key, required this.total});
  final ValueListenable<Money> total;

  @override
  Widget build(BuildContext context) => ValueListenableBuilder(
    valueListenable: total,
    builder: (_, value, __) => Text(value.format()),
  );
}

// Контекст задания: анализ граничных входов.
Вопрос 18 из 25
Несколько мест использования повторяют одну и ту же защиту. Какая правка должна стать единой для темы «Перестроение интерфейса»?
DartDart · Перестроение интерфейса · исправление
class CartTotal extends StatelessWidget {
  const CartTotal({super.key, required this.total});
  final ValueListenable<Money> total;

  @override
  Widget build(BuildContext context) => ValueListenableBuilder(
    valueListenable: total,
    builder: (_, value, __) => Text(value.format()),
  );
}

// Контекст задания: выбор места исправления.
Вопрос 19 из 25
Что добавить в набор тестов, чтобы ошибка по теме «Перестроение интерфейса» не вернулась незаметно?
Вопрос 20 из 25
Какой договор позволяет тестировать «Перестроение интерфейса» через результат, а не через приватные детали?
Вопрос 21 из 25
На ревью просят не размножать проверки по вызывающему коду. Какое исправление для «Совместимость версий» отвечает этому требованию?
DartDart · Совместимость версий · исправление
Widget buildAdaptiveButton(BuildContext context) {
  final platform = Theme.of(context).platform;
  return switch (platform) {
    TargetPlatform.iOS || TargetPlatform.macOS => CupertinoButton(onPressed: save, child: const Text('Save')),
    _ => FilledButton(onPressed: save, child: const Text('Save')),
  };
}

// Контекст задания: выбор места исправления.
Вопрос 22 из 25
Фрагмент выглядит убедительно на типичных данных. Какие входы по теме «Совместимость версий» нельзя проверять одним общим ожиданием?
DartDart · Совместимость версий · границы
Widget buildAdaptiveButton(BuildContext context) {
  final platform = Theme.of(context).platform;
  return switch (platform) {
    TargetPlatform.iOS || TargetPlatform.macOS => CupertinoButton(onPressed: save, child: const Text('Save')),
    _ => FilledButton(onPressed: save, child: const Text('Save')),
  };
}

// Контекст задания: анализ граничных входов.
Вопрос 23 из 25
Какое описание семантики показанного решения по теме «Совместимость версий» является точным?
DartDart · Совместимость версий · семантика
Widget buildAdaptiveButton(BuildContext context) {
  final platform = Theme.of(context).platform;
  return switch (platform) {
    TargetPlatform.iOS || TargetPlatform.macOS => CupertinoButton(onPressed: save, child: const Text('Save')),
    _ => FilledButton(onPressed: save, child: const Text('Save')),
  };
}

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

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

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

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

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