Предупреждение о том, что "импортированные библиотеки имеют одно и то же имя, если они НЕ"

У меня есть следующие операторы импорта в классе

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.