#flutter #dart #visual-studio-code
Вопрос:
У меня есть структура проекта
-core_data
-core_domain
-core_ui
-core_launcher
Зависимость этих 4 проектов заключается в
core_launcher -> core_ui -> core_domain -> core_data
4 проекта находятся в одном каталоге, и я включаю один в другой через файл pubspec.yaml (например, core_launcher/pubspec.yaml):
dependencies:
flutter:
sdk: flutter
core_ui:
path: ../core_ui
То же самое я делаю со всеми проектами, чтобы создать иерархию зависимостей.
Проблема в том, что я могу импортировать все файлы из core_ui
подпроекта, когда я в данный момент редактирую какой-либо файл, core_launcher
но VSCode не видит никаких классов от его родителей (core_domain и core_data).
Тем не менее, я могу вводить import 'blah-blah-blah
вручную, и VSCode видит этот класс, и импорт работает хорошо, но я не могу сделать это с помощью нажатия Alt Enter, которое я делаю для быстрого импорта. Итак, мне интересно, почему автозаполнение не работает для унаследованных библиотек.
У кого — то была такая же проблема?
Ответ №1:
При завершении кода будут показаны только классы из ваших прямых зависимостей. Для этого есть две возможные причины:
- Полагаться на переходные зависимости-не очень хорошая идея, потому что вполне возможно, что ваши зависимости удалят или изменят свои зависимости и не сочтут это критическим изменением.
- Если бы в завершении кода были перечислены все классы из всех переходных зависимостей, список завершения кода был бы огромным и включал бы классы из пакетов, которые вы не узнаете (потому что это просто зависимости от других пакетов). Это было бы плохим пользовательским опытом и облегчило бы случайную зависимость от пакетов, которые не перечислены в вашем
pubspec.yaml
.
Исправление заключается в том, чтобы явно перечислить core_domain
и core_data
в вашем pubspec.yaml
тоже, потому что если ваш проект использует классы из них, то они являются зависимостями.