首页 文章

Dart singleton中的奇怪行为

提问于
浏览
2

我想要一些单例类并实现 . 我推荐了这篇文章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 回答

  • 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修复应该正在进行中 .

相关问题