Dart单例中的奇怪行为

时间:2018-09-25 15:04:12

标签: dart

我想参加一些单例课程并实施。我提到了这篇文章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,但实际结果是99999

当我将user2.dart的import语句更改为import 'singleton.dartuser1.dart的import语句更改为'package:singleton/singleton.dart';时,结果为999(如我所料)

这是Dart的正确行为吗?还是这种行为是错误的?

我感到困惑,因为我认为导入表达式(包和非包)的含义完全相同。

1 个答案:

答案 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 修复程序正在进行中。