12

我在一个类中有以下导入语句

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 编辑器后,我发现这在我的代码中重复出现。这是一个错误吗?

4

3 回答 3

12

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

library foo;

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

Dart 规范中导入两个同名的库是一个警告。

您可以在语言导览中阅读更多关于如何使用库的信息。

于 2013-05-22T15:53:59.730 回答
3

警告正确地表明存在问题。

正确的解决方案取决于 Dart 文件在概念上是相互独立还是相关的。

不同的图书馆

如果它们在概念上是分开的,那么它们应该被定义为属于具有不同库名称的不同库。

import命令用于引用来自不同库的编译单元,而不是属于同一库的编译单元。它希望每个库都有一个唯一的库名称。

如果 Dart 文件被视为库(即是import语句的主题)并且没有显式命名,则其隐式名称为空字符串。在这种情况下,两个文件都被视为库,并且它抱怨有两个同名的库(空字符串)。

为了使它作为单独的库工作,给它们不同的名称:

顶级文件:

import 'foo.dart';
import 'bar.dart';

foo.dart:

library foo;

酒吧飞镖:

library bar;

同一个库的一部分

但是,如果它们相关,则不应将它们称为库。也就是说,不要使用 import 命令。使用该part命令,它将 Dart 文件视为属于同一库的编译单元。

顶级文件:

library baz;
part 'foo.dart';
part 'bar.dart';

foo.dart:

part of baz;

酒吧飞镖:

part of baz;

只有顶层库文件可以包含part语句。您不需要(也不能有)part其他文件中的语句,即使它们相互引用定义。如果有多个文件,只需将它们全部列在顶级库文件中(以任何顺序)。

尽管库的隐式名称是空字符串,但在涉及多个部分时无法使用它:因此即使这些文件永远不会作为库导入,您仍然需要显式为其分配一个库名称。

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

于 2014-08-26T06:22:56.810 回答
3

您可以遵循包布局约定

对于错误:

不同的导入库 onset_view.dart 和 duration_view.dart 不能同名

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

一个附加说明,您应该使用import 'package:epimss/shared.dart';代替 import 'packages/epimss/shared.dart';import 'site_view.dart';代替 import './site_view.dart';

于 2013-05-24T16:56:36.980 回答