Карта дня, май, перетяжка
Карта дня, май, перетяжка
Карта дня, май, перетяжка

Разбираем condition_builder для условных выражений

В чем польза condition_builder? Разбираемся в утилите и применяем на практике.

53 открытий2К показов
Разбираем condition_builder для условных выражений

Если вы разработчик Flutter, то знаете, как часто свойства виджетов — цвета, отступы, метки и стили — зависят от множества условий во время выполнения. Это часто приводит к вложенным тернарным операторам или запутанным цепочкам if / else, которые быстро превращаются в кошмар для поддержки.

Но существуeт более простой и понятный способ выражения многосторонней условной логики непосредственно в ваших виджетах. Это condition_builder, небольшая утилита для написания условных выражений в коде.

Проблемы с вложенными условиями

Представим, что необходимо изменить цвет фона виджета в зависимости от того, отключен он, выбран или находится в обычном состоянии. Ваш типичный подход может выглядеть следующим образом:

			color: isDisabled
 ? Colors.grey.shade300
    : isSelected
 ? Colors.blue.shade300
        : Colors.black12,
		

Это хорошо работает с двумя-тремя условиями, но по мере усложнения логики пользовательского интерфейса тернарные цепочки становится трудно читать, сложнее отлаживать и легче ломать.

Более того, по мере масштабирования вашего приложения условия могут начать появляться в разных местах, что затрудняет поддержание единообразия.

Решение с использованием condition_builder

condition_builder позволяет декларативно описывать условную логику и объединять несколько условий в цепочки в понятном и читаемом стиле:

			color: ConditionBuilder
 .on(() => isDisabled, () => Colors.grey.shade300)
 .on(() => isSelected, () => Colors.blue.shade300)
 .build(orElse: () => Colors.black12),
		

Разбираем :

  1. вызовы .on(condition, value) вызывает каждый .on() и добавляет условие и соответствующее ему значение.
  2. Вызов .build() оценивает условия по порядку и возвращает значение для первого истинного условия.
  3. Дополнительное условие: укажите значение по умолчанию с помощью build(orElse: () => defaultValue), если ни одно из условий не соответствует действительности.
  4. Защита от ошибок: если вы не предусмотрели запасной вариант, ни одно из условий не выполняется, возникает ошибка — никаких скрытых ошибок!

Почему важен порядок

Порядок, в котором вы добавляете условия, имеет решающее значение: побеждает первое подходящее условие. Это дает вам четкий контроль и гарантирует предсказуемость и ясность вашей логики.

Преимущества с первого взгляда

  • Более чистый код: больше никаких вложенных тернарных операторов.
  • Улучшенная читаемость: ваши условия хорошо видны.
  • Упрощенное обслуживание: легко изменять условия, не разбираясь в сложных выражениях.
  • Декларативный стиль: ваш код пользовательского интерфейса читается как логичный поток.
  • Безопасные значения по умолчанию: предотвращают бессимптомные сбои, выявляя пропущенные резервные варианты.

Заключение

condition_builder — это простой, но мощный инструмент, который воплощает в себе дух декларативного UI-кодирования. Он избавляет вас от путаницы вложенных условных операторов и позволяет сосредоточиться на создании элегантных, удобных в обслуживании виджетов Flutter. При использовании его ваш код интерфейса станет чище, понятнее и проще для восприятия.

Следите за новыми постами
Следите за новыми постами по любимым темам
53 открытий2К показов