Введение
Flutter продолжает оставаться одной из самых востребованных технологий для кроссплатформенной разработки: по данным опроса JetBrains за 2025 год, его используют более 40% мобильных разработчиков. Однако переход от изучения основ Dart и виджетов к созданию сложных, поддерживаемых приложений с грамотным state management — это вызов, с которым сталкиваются многие. Как ускорить этот процесс? Ответ — промты для AI-ассистентов (таких как ChatGPT, Claude или Gemini). В этой статье я собрал 15 проверенных промтов, которые помогут вам писать код быстрее, избегать типичных ошибок и глубже понимать архитектуру Flutter. Мы разобьём их на три уровня: базовый (виджеты и layout), продвинутый (анимации и кастомные виджеты) и экспертный (Bloc, Riverpod, архитектура).
Почему это важно? Согласно исследованию GitHub Copilot (2024), разработчики, использующие AI-промты для генерации кода, в среднем экономят до 35% времени на рутинных задачах. Но промт должен быть точным — иначе вы получите шаблонный код, который не впишется в вашу архитектуру. Ниже — конкретные примеры с пояснениями.
Базовые промты: виджеты и layout
Эти промты подойдут для быстрой генерации UI-компонентов. Ключевой принцип: всегда указывайте тип виджета, его поведение и состояние.
1. Генерация кастомного списка с разделителями
Задача: Создать ListView с кастомными разделителями и обработкой нажатий.
Промт:
Сгенерируй Flutter-виджет: ListView.builder с 20 элементами, каждый элемент — Card с заголовком и подзаголовком. Между элементами — разделитель Divider с отступом 8px. При нажатии на элемент выводи snackbar с текстом элемента. Используй StatefulWidget.
Пример результата:
class CustomListView extends StatefulWidget {
@override
_CustomListViewState createState() => _CustomListViewState();
}
class _CustomListViewState extends State<CustomListView> {
final List<Map<String, String>> items = List.generate(
20,
(index) => {'title': 'Элемент $index', 'subtitle': 'Описание $index'},
);
@override
Widget build(BuildContext context) {
return ListView.separated(
itemCount: items.length,
separatorBuilder: (context, index) => Padding(
padding: const EdgeInsets.symmetric(horizontal: 8.0),
child: Divider(height: 1, color: Colors.grey[300]),
),
itemBuilder: (context, index) {
return Card(
child: ListTile(
title: Text(items[index]['title']!),
subtitle: Text(items[index]['subtitle']!),
onTap: () {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('Нажат ${items[index]["title"]}')),
);
},
),
);
},
);
}
}
2. Адаптивный GridView
Задача: Сетка из карточек, которая подстраивается под ширину экрана.
Промт:
Напиши StatelessWidget: GridView.builder с crossAxisCount = 2 на планшетах и 1 на телефонах. Каждая ячейка — Container с изображением из AssetImage и текстом снизу. Используй LayoutBuilder для определения ширины.
3. Форма с валидацией
Промт:
Создай форму с полями: email (валидация на @), пароль (минимум 6 символов) и кнопкой отправки. При успешной валидации выводи сообщение. Используй GlobalKey<FormState>.
Продвинутые промты: анимации и кастомные виджеты
Здесь промты требуют указания типа анимации (Implicit, Explicit, Hero) и параметров.
4. Анимированное появление контейнера
Промт:
Напиши StatefulWidget с AnimatedContainer: при нажатии на кнопку контейнер меняет цвет с синего на красный, ширину с 100 на 200, и скругляет углы до 20px. Длительность анимации — 500ms. Используй Curves.easeInOut.
5. Hero-анимация между экранами
Промт:
Создай два экрана: на первом — CircleAvatar с Hero-тегом 'avatar', на втором — увеличенное изображение. При нажатии на аватар — переход с анимацией. Используй Navigator.push и MaterialPageRoute.
6. Кастомный AnimatedBuilder
Промт:
Реализуй бесконечную анимацию вращения иконки с помощью AnimationController и AnimatedBuilder. Иконка — Icons.refresh. Скорость вращения — 2 секунды на оборот.
Экспертные промты: state management (Bloc, Riverpod)
Эти промты критически важны для масштабируемых приложений. Они требуют указания архитектуры (Clean Architecture, Repository pattern).
7. Bloc для счётчика
Промт:
Напиши Flutter-приложение на Bloc: CounterCubit с методами increment и decrement. Используй BlocProvider в main.dart и BlocBuilder в UI. Покажи полный код: cubit, event (если используешь Bloc), и UI.
Пример результата (сокращённо):
// counter_cubit.dart
class CounterCubit extends Cubit<int> {
CounterCubit() : super(0);
void increment() => emit(state + 1);
void decrement() => emit(state - 1);
}
// main.dart
void main() {
runApp(BlocProvider(
create: (context) => CounterCubit(),
child: MyApp(),
));
}
// my_home_page.dart
BlocBuilder<CounterCubit, int>(
builder: (context, count) {
return Text('$count', style: TextStyle(fontSize: 48));
},
)
8. Riverpod с FutureProvider
Промт:
Создай приложение на Riverpod (flutter_riverpod): FutureProvider для загрузки списка пользователей из JSONPlaceholder (https://jsonplaceholder.typicode.com/users). Отобрази список в ListView с индикатором загрузки и обработкой ошибок. Используй http-пакет.
9. Bloc с Clean Architecture
Промт:
Спроектируй архитектуру для приложения погоды на Bloc: три слоя — data (репозиторий с API), domain (модели и use cases), presentation (Bloc и UI). Покажи структуру папок и пример Bloc для получения погоды по городу.
Пример структуры:
lib/
├── data/
│ ├── models/weather_model.dart
│ └── repositories/weather_repository.dart
├── domain/
│ ├── entities/weather.dart
│ └── usecases/get_weather.dart
└── presentation/
├── bloc/weather_bloc.dart
└── pages/weather_page.dart
10. Riverpod с семейством провайдеров
Промт:
Используй family-провайдер в Riverpod для кэширования данных по id: напиши провайдер, который принимает userId и возвращает данные пользователя. Покажи, как использовать ref.invalidate для обновления.
11. Bloc с debounce
Промт:
Реализуй поисковую строку с Bloc: ввод текста с debounce (300ms). Используй StreamTransformer или RxDart для задержки. Покажи полный код блока и UI.
12. Riverpod с StateNotifierProvider
Промт:
Создай корзину покупок на Riverpod: StateNotifierProvider для управления списком товаров (добавление, удаление, очистка). UI отображает общее количество и сумму.
13. Интеграция Bloc и GoRouter
Промт:
Настрой GoRouter с Bloc: при успешной аутентификации перенаправляй на главный экран, при ошибке — на логин. Используй redirect-функцию GoRouter.
14. Riverpod с авто-диспозицией
Промт:
Покажи пример использования autodispose в Riverpod: провайдер, который загружает данные и уничтожается, когда экран покидается. Используй ref.onDispose.
15. Тестирование Bloc
Промт:
Напиши unit-тесты для CounterCubit: проверь increment, decrement и начальное состояние. Используй bloc_test и mocktail.
Заключение
Эти 15 промтов покрывают 90% повседневных задач Flutter-разработчика — от простых виджетов до сложной архитектуры. Ключевой совет: всегда уточняйте версию пакета (например, flutter_bloc: ^10.0.0) и тип виджета (StatefulWidget/StatelessWidget). Помните, что AI — это инструмент, а не замена пониманию: всегда проверяйте сгенерированный код на соответствие вашим требованиям.
Если вы хотите углубиться в архитектуру Flutter и научиться писать промты для AI, которые экономят часы работы, обратите внимание на курсы по Flutter на asibiont.com — там разбираются реальные кейсы от индустрии. Удачи в разработке!
Комментарии