警告“导入的库在它们不具有相同名称时”

时间:2013-05-22 15:20:22

标签: dart

我在类

中有以下import语句
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编辑器后,在整个代码中都看到了这一点。这是一个错误吗?

3 个答案:

答案 0 :(得分:12)

确保为每个文件分配库名称。该文件的第一行应为:

library foo;

您应该为您使用的每个库使用不同的名称。库名由library指令指定,但匿名库被视为具有相同的名称,这是警告的来源。

Dart specification中的警告是导入两个具有相同名称的库。

您可以在language tour.

中详细了解如何使用库

答案 1 :(得分:3)

您可以关注Package layout conventions

对于错误:

  

不同的导入库beginning_view.dart和duration_view.dart不应具有相同的名称

您应该在每个导入的dart文件中定义不同的名称。

另外一点,您应该使用import 'package:epimss/shared.dart';代替import 'packages/epimss/shared.dart';import 'site_view.dart';代替import './site_view.dart';

答案 2 :(得分:2)

警告正确表明存在问题。

正确的解决方案取决于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语句,即使它们引用了彼此的定义。如果有多个文件,只需将它们全部列在顶层库文件中(按任意顺序)。

虽然库的隐式名称是空字符串,但是当涉及多个部分时无法使用它:所以即使这些文件永远不会作为库导入,您仍然需要明确地为它指定一个库名。

永远记住:importpart语句与C预处理器中的#include宏非常不同。