Программирование с ИИ
ENRU
11.6

Ошибки ИИ во Flutter и чек-лист

и как проверить то, чего я проверить не смог

Что это

Завершение главы. Здесь же — то, чего нет в других главах: список того, что ты должен проверить сам, потому что я этого сделать не смог (статья 11.1).

Ошибки ИИ во Flutter

  1. Код для старой версии. Главная проблема этого стека. Устаревшие имена виджетов и параметров; flutter analyze обычно ругается.

  2. !, late, dynamic. Три способа отключить проверку пустоты — прямой аналог any, as и ts-ignore из статьи 9.6.

  3. Присваивание без setState. Значение меняется, экран нет.

  4. Нет dispose. Контроллеры и подписки переживают виджет.

  5. Запрос к сети в build. build вызывается часто.

  6. Stateful без состояния. Лишний класс.

  7. Нет const там, где виджет не зависит от данных. Лишние пересоздания.

  8. Ресурс не объявлен в pubspec.yaml. Ошибка не при сборке, а при открытии экрана.

  9. Сделан только удачный случай. Нет загрузки, ошибки, пустоты (статья 11.5).

  10. Отказ в разрешении не обработан. Особенно «отказали навсегда».

  11. Добавлена вторая библиотека состояния. Потому что в запросе не назвали первую.

  12. Фиксированные размеры. Переполнение на узком экране.

Чек-лист Flutter-кода

1. Анализатор

flutter analyze

Первый и главный шаг — здесь он заменяет mypy и tsc. Ловит устаревшие API, забытые const, неиспользуемое, часть ошибок с пустотой.

2. Запуск

flutter run

Горячая перезагрузка показывает правку сразу, но не все изменения подхватываются: правки в initState и в объявлениях часто требуют полной перезагрузки. Если изменение «не применилось» — перезапусти целиком, прежде чем искать ошибку в коде.

3. Узкий экран и длинный текст

Запустить на маленьком устройстве или сузить окно. Вписать длинное название. Жёлто-чёрная полоса переполнения — самая частая находка.

4. Четыре состояния

Загрузка, пусто, ошибка, данные. Для ошибки — выключить сеть на устройстве.

5. Разрешения

Отказать в разрешении. Потом отказать навсегда. Приложение должно продолжать работать и объяснять, что делать.

6. Обе платформы

Если собираете под Android и iOS — проверить на обеих. Кнопка «назад», безопасные зоны, диалоги ведут себя по-разному.

Как проверить эту главу

Примеры здесь не прогонялись, поэтому — как убедиться, что написанное верно:

Запрос
Вот фрагмент из справочника по Flutter: <фрагмент>.
У меня Flutter 3.38. Это актуально для моей версии?
Если что-то устарело или неточно — скажи, что именно,
со ссылкой на документацию.

И самый надёжный способ — просто запустить. Создай пустой проект и проверь то, что показалось сомнительным:

flutter create proba && cd proba && flutter run

Как сказать ИИ

Запрос
Проверь этот Flutter-код по списку:
- актуален ли API для Flutter 3.38
- есть ли !, late или dynamic и почему
- все ли изменения состояния через setState
- есть ли dispose у контроллеров и подписок
- нет ли запросов в build
- есть ли const там, где виджет статичен
- реализованы ли загрузка, ошибка и пустота

Что из этого есть? Если ничего — так и скажи.

Шпаргалка

  • Главная ошибка стека — код для старой версии. Называй свою.

  • !, late, dynamic — заглушки, а не решения.

  • Изменения только через setState; контроллеры закрывать в dispose.

  • flutter analyze — первый шаг проверки, заменяет mypy и tsc.

  • «Не применилось» — сначала полная перезагрузка, потом поиск ошибки.

  • Проверь: узкий экран, четыре состояния, отказ в разрешении, обе платформы.