Flutter продолжает доминировать в кроссплатформенной разработке: по данным Statista за 2025 год, его используют 46% мобильных разработчиков. Однако даже опытные инженеры тратят до 30% времени на рутинные задачи — написание boilerplate-кода для виджетов, настройку state management и подбор параметров анимаций. В этой статье я собрал 15 промтов, которые помогут вам быстрее создавать качественный код на Flutter. Все промты проверены на практике в июле 2026 года.
1. Базовые промты для виджетов
Промт 1: Генерация кастомного виджета
Задача: Создать переиспользуемый виджет для отображения карточки товара.
Промт: «Напиши на Dart виджет Flutter, который принимает название товара (String), цену (double), изображение (ImageProvider) и рейтинг (double от 0 до 5). Виджет должен отображать карточку с закруглёнными углами, тенью, иконкой звезды для рейтинга и кнопкой "Добавить в корзину". Используй Material 3.»
Результат:
class ProductCard extends StatelessWidget {
final String name;
final double price;
final ImageProvider image;
final double rating;
const ProductCard({
required this.name,
required this.price,
required this.image,
required this.rating,
});
@override
Widget build(BuildContext context) {
return Card(
elevation: 4,
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(16)),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Image(image: image, height: 120, width: double.infinity, fit: BoxFit.cover),
Padding(
padding: const EdgeInsets.all(8.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(name, style: Theme.of(context).textTheme.titleMedium),
SizedBox(height: 4),
Text('\$${price.toStringAsFixed(2)}', style: Theme.of(context).textTheme.bodyLarge),
Row(
children: [
Icon(Icons.star, color: Colors.amber, size: 16),
Text('$rating'),
],
),
SizedBox(height: 8),
ElevatedButton(onPressed: () {}, child: Text('Добавить в корзину')),
],
),
),
],
),
);
}
}
Этот промт экономит 15–20 минут ручного написания шаблонного кода.
Промт 2: Оптимизация списка с ListView.builder
Задача: Сгенерировать эффективный список с разделителями.
Промт: «Создай виджет на Flutter, который отображает список из 100 элементов с использованием ListView.builder, каждый элемент — ListTile с аватаром, заголовком и подзаголовком, разделённые Divider. Добавь обработку нажатия на элемент, которая выводит в консоль индекс.»
Результат: Получаем готовый виджет с lazy loading, что критично для больших списков.
2. Продвинутые промты: State Management
Промт 3: Настройка Bloc для счётчика
Задача: Реализовать простой счётчик с Bloc.
Промт: «Напиши на Dart код для Flutter с использованием пакета flutter_bloc. Создай CounterCubit с методами increment и decrement, а также виджет CounterPage, который отображает текущее значение и две кнопки. Используй BlocProvider для инъекции зависимости.»
Результат:
class CounterCubit extends Cubit<int> {
CounterCubit() : super(0);
void increment() => emit(state + 1);
void decrement() => emit(state - 1);
}
class CounterPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return BlocProvider(
create: (_) => CounterCubit(),
child: BlocBuilder<CounterCubit, int>(
builder: (context, count) => Scaffold(
appBar: AppBar(title: Text('Счётчик')),
body: Center(child: Text('$count', style: TextStyle(fontSize: 48))),
floatingActionButton: Column(
mainAxisAlignment: MainAxisAlignment.end,
children: [
FloatingActionButton(onPressed: () => context.read<CounterCubit>().increment(), child: Icon(Icons.add)),
SizedBox(height: 8),
FloatingActionButton(onPressed: () => context.read<CounterCubit>().decrement(), child: Icon(Icons.remove)),
],
),
),
),
);
}
}
Этот шаблон легко адаптируется под любой бизнес-логику.
Промт 4: Миграция с Provider на Riverpod
Задача: Переписать код с Provider на Riverpod 2.x.
Промт: «У меня есть Flutter-приложение, которое использует Provider для управления состоянием корзины. Вот код: [вставьте код]. Перепиши его на Riverpod 2.x с использованием AsyncNotifierProvider и ref.watch. Учти, что корзина должна сохраняться при перезагрузке экрана.»
Результат: Получаем чистый код с явным управлением зависимостями, что уменьшает количество багов на 20–30% (по данным опроса Flutter-сообщества 2025).
3. Экспертные промты: Анимации и производительность
Промт 5: Создание анимированного перехода между экранами
Задача: Реализовать hero-анимацию с помощью Hero виджета.
Промт: «Создай два экрана Flutter с переходом hero-анимации для изображения. Первый экран — список товаров с миниатюрами, второй — детальный экран с увеличенным изображением. Используй Hero с одинаковым тегом, основанным на id товара. Добавь задержку в 300 мс для плавности.»
Результат: Плавный переход за 10 строк кода.
Промт 6: Оптимизация анимации с TweenAnimationBuilder
Задача: Создать анимированный индикатор загрузки.
Промт: «Напиши виджет на Flutter, который показывает анимированный круговой индикатор прогресса с использованием TweenAnimationBuilder. Индикатор должен менять цвет от красного до зелёного по мере увеличения значения от 0 до 100. Длительность анимации — 2 секунды, кривая — Curves.easeInOut.»
Результат: Анимация без лишних setState.
4. Промты для тестирования и отладки
Промт 7: Генерация unit-тестов для Bloc
Задача: Написать тесты для CounterCubit.
Промт: «Напиши unit-тесты на Dart для CounterCubit из предыдущего примера. Протестируй: начальное значение равно 0, increment увеличивает на 1, decrement уменьшает на 1, и что эмитятся правильные состояния. Используй пакет bloc_test.»
Результат: Тесты за 30 секунд.
Промт 8: Выявление утечек памяти
Задача: Найти утечки в StreamSubscription.
Промт: «Проанализируй этот код на Flutter: [вставьте код]. Найди потенциальные утечки памяти, связанные с незакрытыми StreamSubscription. Предложи исправления с использованием StatefulWidget и dispose.»
Результат: Экономия времени на профилировании.
5. Промты для интеграции с API
Промт 9: Генерация HTTP-запроса с Dio
Задача: Создать сервис для работы с REST API.
Промт: «Напиши на Dart сервис для Flutter с использованием пакета dio. Сервис должен иметь методы getUsers() и createUser(name, email). Используй перехватчик (interceptor) для логирования запросов и обработки ошибок с DioException.»
Результат: Готовый репозиторий.
Промт 10: Обработка пагинации
Задача: Реализовать бесконечную прокрутку.
Промт: «Создай виджет Flutter, который загружает список постов из API с пагинацией (page и limit). Используй ScrollController для отслеживания конца списка и showDialog при ошибке загрузки.»
6. Промты для архитектуры
Промт 11: Рефакторинг с Clean Architecture
Задача: Разделить монолит на слои.
Промт: «У меня есть один файл с бизнес-логикой и UI. Раздели его на три слоя: data (репозиторий и модель), domain (сущность и use case) и presentation (виджет и view model). Используй либо Bloc, либо Riverpod.»
Промт 12: Генерация моделей с json_serializable
Задача: Создать модель с автоматической сериализацией.
Промт: «Напиши Dart-модель User с полями id, name, email и createdAt. Добавь аннотации @JsonSerializable и сгенерируй методы fromJson и toJson через json_serializable.»
7. Промты для локализации и темы
Промт 13: Настройка локализации с flutter_localizations
Задача: Добавить поддержку русского и английского языков.
Промт: «Настрой локализацию в Flutter-приложении с использованием flutter_localizations и intl. Создай ARB-файлы для русского и английского, добавь переключатель языка в настройках.»
Промт 14: Адаптация темы под Material 3
Задача: Сгенерировать тёмную и светлую тему.
Промт: «Создай две темы Flutter: светлую с основным цветом #6750A4 и тёмную с #D0BCFF. Используй ThemeData и ColorScheme.fromSeed для Material 3. Добавь виджет для переключения тем.»
8. Бонусный промт
Промт 15: Автоматическая документация
Задача: Сгенерировать комментарии для существующего кода.
Промт: «Добавь doc-комментарии в стиле dartdoc к этому коду: [вставьте код]. Опиши каждый класс, метод и параметр. Используй @param и @return.»
Заключение
Промты для Flutter — это не замена знаниям, а инструмент для ускорения рутины. Я рекомендую начать с первых пяти промтов, а затем переходить к архитектурным. Помните: любой сгенерированный код нужно проверять на соответствие вашим стандартам. Если вы хотите углубиться в тему, ASI Biont поддерживает подключение к Flutter SDK через API — подробнее на asibiont.com/courses. Удачной разработки!
Комментарии