我想要一些单例类并实现 . 我推荐了这篇文章https://stackoverflow.com/a/12649574/6323093 .
我的实现是这样的 . 所有源文件都是相同的 lib
目录 .
Singleton.dart
class Singleton {
static final instance = Singleton();
int value = 0;
}
user1.dart
import 'singleton.dart'; // non-package expression
int getValue1() {
return Singleton.instance.value;
}
setValue1(int val) {
Singleton.instance.value = val;
}
user2.dart
import 'package:singleton/singleton.dart'; // package expression
int getValue2() {
return Singleton.instance.value;
}
setValue2(int val) {
Singleton.instance.value = val;
}
main.dart
import 'user1.dart';
import 'user2.dart';
// below is test code
setValue1(99)
setValue2(999)
// My expected behavior is both '999'... why??
print(getValue1()) // -> 99
print(getValue2()) // -> 999
在上面的代码中,我预计 getValue1()
和 getValue2()
都是 999
但实际结果是 99
和 999
.
当我将 user2.dart
的import语句更改为 import 'singleton.dart
或 user1.dart
的import语句为 'package:singleton/singleton.dart';
时,结果为 999
(正如我所料) .
这是Dart的正确行为吗?或者这种行为是错误的?
我很困惑因为我认为导入表达式,包和非包都是完全相同的含义 .
1 回答
可能是罪魁祸首 .
知道
lib/main.dart
中的相对导入会导致此类问题 .将它们更改为
它应该按预期工作 .
其他文件中的相对导入很好 .
相关的Dart问题是https://github.com/dart-lang/sdk/issues/33076修复应该正在进行中 .