我想参加一些单例课程并实施。我提到了这篇文章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的正确行为吗?还是这种行为是错误的?
我感到困惑,因为我认为导入表达式(包和非包)的含义完全相同。
答案 0 :(得分:3)
import 'user1.dart';
import 'user2.dart';
可能是罪魁祸首。
已知lib/main.dart
中的相对导入会导致此类问题。
将它们更改为
import 'package:my_flutter_project/user1.dart';
import 'package:my_flutter_project/user2.dart';
它应该可以正常工作。
相对导入在其他文件中很好。
与Dart相关的问题是https://github.com/dart-lang/sdk/issues/33076 修复程序正在进行中。