Ответ
Принцип DRY направлен на устранение дублирования кода. Во Flutter его можно применять на разных уровнях.
1. Вынос повторяющихся стилей в константы или методы-хелперы:
// ПЛОХО: Стиль дублируется
Widget buildButton1() {
return ElevatedButton(
style: ElevatedButton.styleFrom(
backgroundColor: Colors.blueAccent,
foregroundColor: Colors.white,
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(8)),
padding: EdgeInsets.symmetric(horizontal: 24, vertical: 12),
),
onPressed: () {},
child: Text('Submit'),
);
}
Widget buildButton2() {
return ElevatedButton(
style: ElevatedButton.styleFrom(
backgroundColor: Colors.blueAccent, // Дублирование
foregroundColor: Colors.white, // Дублирование
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(8)), // Дублирование
padding: EdgeInsets.symmetric(horizontal: 24, vertical: 12), // Дублирование
),
onPressed: () {},
child: Text('Cancel'),
);
}
// ХОРОШО: Стиль вынесен в константу
const ButtonStyle myPrimaryButtonStyle = ElevatedButton.styleFrom(
backgroundColor: Colors.blueAccent,
foregroundColor: Colors.white,
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(8)),
padding: EdgeInsets.symmetric(horizontal: 24, vertical: 12),
);
Widget buildButton1() {
return ElevatedButton(
style: myPrimaryButtonStyle, // Переиспользование
onPressed: () {},
child: Text('Submit'),
);
}
Widget buildButton2() {
return ElevatedButton(
style: myPrimaryButtonStyle, // Переиспользование
onPressed: () {},
child: Text('Cancel'),
);
}
2. Создание кастомных переиспользуемых виджетов:
Если у вас часто повторяется сложная композиция виджетов (например, карточка товара с изображением, названием и ценой), правильнее создать для нее отдельный виджет ProductCard. Это избавит от копирования одного и того же кода в нескольких местах и упростит будущие изменения дизайна.
3. Вынос бизнес-логики в отдельные классы (сервисы, репозитории):
Вместо того чтобы писать один и тот же код для работы с API в разных ViewModel или Bloc, следует создать единый ApiClient или Repository и инжектировать его туда, где он нужен. Это классическое применение DRY на уровне архитектуры.