Dart не видит класс, импортированный из локальной зависимости
? Вопрос новичка в Dart: может понадобиться объяснение на пальцах
Проект состоит из пакетов:
- BusinessRules - бизнес-правила
- Client - клиентская часть приложения
- Server - серверная часть приложения
Server использует BusinessRules:
name: server
version: 0.0.0
publish_to: none
environment:
sdk: ">=2.12.0 <3.0.0"
dependencies:
business_rules:
path: ../BusinessRules
args: ^2.0.0
shelf: ^1.1.0
На данный момент BusinessRules состоит из двух классов:
name: business_rules
version: 0.0.0
publish_to: none
environment:
sdk: ">=2.12.0 <3.0.0"
Пакет Server не видит импорт класса Task:
import "package:business_rules/Enterprise/Task.dart";
Ошибка:
Target of URI doesn't exist: 'package:business_rules/Enterprise/Task.dart'.
Как правильно импортировать этот класс?
Важные моменты
- Подразумевается, что ни один из пакетов не будет публиковаться как библиотека. Это значит, что многие поля в
pubspec.yaml(такие как description и homepage) можно пропустить. - При внесении изменения в
BusinessRules,ClientиServerдолжны тут же быть пересобраны. - Мне известно, что валидное имя пакета в Dart больших символов содержать не должно, поэтому в
pubspec.yamlBusinessRulesназываютсяbusiness_rules. Тем не менее, я оставляю за собой право называть директории как считаю нужным.
Ответы (1 шт):
Автор решения: MiT
→ Ссылка
- Название папок/файлов должно быть по стайл гайдам. Иначе можно получить сайд эффекты от анализатора кода.
- Ваш код в
BusinessRulesрасположен не правильно. Он должен лежать в папкеlibи никак иначе. Это правило касается для любогоdartпроекта.
Расположите ваши папки с dart кодом так:
BusinessRules/lib/Enterprise/...
BusinessRules/lib/Application/...
BusinessRules/lib/...
- После этого ваш импорт (
import "package:business_rules/Enterprise/Task.dart";) будет работать.
Если вы хотите ограничить видимость некоторых файлов и сделать экспорт более удобным (например: import "package:business_rules/business_rules.dart";), то можно поступить следующий образом:
- Создать файл
business_rules.dartв папкеlib(BusinessRules/lib/business_rules.dart). - Перенести все другие папки/файлы с кодом dart в папку src (
BusinessRules/lib/src/...). - В файл
business_rules.dartдобавить экспорты интересующего вас кода:
export 'src/Enterprise/Task.dart';
export 'src/Application/...';
export 'src/...';
P.S. три точки (...) показываются как пример, вместо них нужно указывать полный путь до файла.

