【问题标题】:Strange behavior in Dart singletonDart 单例中的奇怪行为
【发布时间】:2019-03-01 06:19:36
【问题描述】:

我想要一些单例类并实现。我参考了这篇文章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 'singleton.dartuser1.dart 的导入语句更改为'package:singleton/singleton.dart'; 时,结果为999(如我所料)。

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

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

【问题讨论】:

    标签: dart


    【解决方案1】:
    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 修复工作应该正在进行中。

    【讨论】:

    • 感谢您的回答!现在我明白这种行为不是我的错。我会继续关注这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多