Предупреждение о том, что "импортированные библиотеки имеют одно и то же имя, если они НЕ"
У меня есть следующие операторы импорта в классе
import 'package:dart_web_toolkit/ui.dart';
import '../../util/flex_table_builder.dart' as ftBldr;
import '../factors_list_view.dart';
class MediatingFactorsView extends Composite
{
//...
}
Однако последний элемент импорта помечен предупреждением:
The different imported libraries 'flex_table_builder.dart' and 'factors_list_view.dart' should not have the same name
Имена совершенно разные, и я вижу, что это повторяется во всем моем коде после того, как я обновился до последнего редактора Dart. Это ошибка?
Ответы
Ответ 1
Убедитесь, что вы назначаете имена библиотек для каждого файла. Первая строка файла должна быть:
library foo;
Вы должны использовать разные имена для каждой используемой библиотеки. Имя библиотеки указано директивой library
, но анонимные библиотеки рассматриваются как имеющие одно и то же имя, откуда и появляется предупреждение.
Это предупреждение в языковой тур.
Ответ 2
Вы можете выполнить соглашения о компоновке пакетов.
Для ошибки:
Различные импортированные библиотеки onset_view.dart и duration_view.dart не должны иметь одно и то же имя
вам нужно определить разные имена библиотек в каждом импортированном файле дротика.
Еще одно примечание, вы должны использовать import 'package:epimss/shared.dart';
вместо import 'packages/epimss/shared.dart';
и import 'site_view.dart';
вместо import './site_view.dart';
Ответ 3
Предупреждения правильно указывают на наличие проблемы.
Правильное решение зависит от того, являются ли файлы Dart концептуально отдельными или связаны друг с другом.
Различные библиотеки
Если они концептуально разделены, то они должны быть определены как принадлежащие к разным библиотекам с разными именами библиотек.
Команда import
используется для ссылки на блок компиляции из другой библиотеки, а не единицы компиляции, принадлежащей той же библиотеке. Он ожидает, что каждая библиотека будет иметь уникальное имя библиотеки.
Если файл Dart рассматривается как библиотека (т.е. является субъектом оператора import
) и явно не указан, то его неявным именем является пустая строка. В этом случае оба файла рассматриваются как библиотеки, и он жалуется на наличие двух библиотек с тем же именем (пустой строки).
Для этого, чтобы работать как отдельные библиотеки, им даны разные имена:
Верхний файл:
import 'foo.dart';
import 'bar.dart';
foo.dart:
library foo;
bar.dart:
library bar;
Часть той же библиотеки
Но если они связаны, они не должны упоминаться как библиотеки. То есть не используйте команду import. Используйте команду part
, которая обрабатывает файл Dart как блок компиляции, принадлежащий той же библиотеке.
Верхний файл:
library baz;
part 'foo.dart';
part 'bar.dart';
foo.dart:
part of baz;
bar.dart:
part of baz;
Только файл верхней библиотеки может содержать инструкции part
. Вам не нужны (и не могут) выражения part
внутри других файлов, даже если они ссылаются на определения друг от друга. Если есть несколько файлов, просто перечислите их все в файле верхней библиотеки (в любом порядке).
Хотя неявное имя для библиотеки является пустой строкой, невозможно использовать ее при наличии нескольких частей: поэтому, даже если эти файлы никогда не будут импортированы в виде библиотеки, вам все равно необходимо явно указать присвойте ему имя библиотеки.
Всегда помните: операторы import
и part
сильно отличаются от макроса #include
в препроцессоре C.