无法访问多层导入文件中定义的var

时间:2014-09-17 06:57:53

标签: dart

假设我在同一个文件夹中有3个dart脚本。

// a.dart
import 'b.dart';
void main(){
  print(foo);
}

// b.dart
import 'c.dart';

// c.dart
var foo = 1;

我在Cannot resolve 'foo'

中获得了a.dart

2 个答案:

答案 0 :(得分:3)

导入不会自动重新导出。 您可以使用以下变体之一:

// b.dart
import 'c.dart';
export 'c.dart';

// foo is available in b.dart and a.dart

// b.dart
export 'c.dart';

// foo is not available in b.dart but in a.dart 

这与我对How can I import all files in a folder?的回答相同; - )

答案 1 :(得分:1)

一些备选方案。

选项1

仅使用import语句并引用您需要的实际文件。例如:

// a.dart
import 'b.dart';
import 'c.dart';
void main(){
  print(foo);
  print(bar);
}

// b.dart
import 'c.dart';
var bar = foo + 1;

// c.dart
var foo = 1;

这不允许继承导入,但如果您在整个应用中遵循此模式,您的依赖项很容易看到(它们不会被隐藏在另一个文件中)。

选项2

不要使用导入,而只是让所有内容都成为同一个库的一部分。

// a.dart
library myLib;

part 'b.dart';
part 'c.dart';

void main(){
  print(foo);
  print(bar);
}

// b.dart
part of myLib;

var bar = foo + 1;

// c.dart
part of myLib;

var foo = 1;

如果您的应用程序不是太大而且所有类和全局变量都具有唯一名称(也就是说您没有命名空间),则此选项很有效。您还可以将此模式实现为应用程序的一小部分,而不是整个部分。