Дополнение про оптимизацию работы build_runner
Видео с примерами оптимизации build_runner
YouTube падает при ответе на ваши комментарии, поэтому соберу их тут.
1️⃣ Зачем вообще нужна оптимизация build_runner? Вы сами себе все усложняете
Если на проект большой, и над ним работает большая команда - неизбежны конфликты при слиянии веток. Это относится как к небольшим классам (типа пользователя или товара, например), так и к DI, где сгенерированный файл может насчитывать тысячи строк кода, которые руками не поправишь при наличии конфликтов. Как итог - нужно запускать билд заново, а это лишнее время. Добавить к этому ситуацию, когда в репозитории слетаю аппрувы при новых коммитах - на небольшое исправление уйдет куча времени, и в лучшем случае за прошедшие десятки минут не придут чьи-то правки, которые сломают ваши текущие.
Мне лично не нравится удаление ген. файлов, но решение порой принимаются либо лидами, либо всей командой, и приходится работать с тем, что есть. А тут уже проще покопаться в настройках и что-то поправить, нежели менять работу и доказывать всем не согласным, что они не правы.
Есть еще раздел в документации build_runner. Там советуют не хранить ничего сгенерированного в репозитории, но это лишь совет, а не правило работы с билдером.
2️⃣ Какие еще есть способы запуска build_runner? Для отдельного файла, пакета, есть возможность билда?
Можно запустить build_runner с параметром –build-filter, который будет работать только с тем скоупом, что вы туда ему передадите.
❗️ Все примеры ниже применимы к проекту, которые разбирается в видео. Запуск происходит так же, как в видео (через fvm). Для использования на ваших примерех нужно заменить значение –build-filter на то, что у вас локально.
Для файла пример будет такой:
$ fvm flutter pub run build_runner build --build-filter="lib/cp_one/one/model_gen.g.dart"
Директорию можно обработать следующим образом:
$ fvm flutter pub run build_runner build --build-filter="lib/cp_one/**/*.g.dart"
Есть вариант попробовать написать скрипт, который соберет список измененный файлах, и только для них сгенерирует нужные файлы. Собственно, что-то подобное мы как-то хотели сделать у себя на проекте, но это показалось уже чем-то не очень нужным.