gpt4 book ai didi

dart - Dart 单例中的奇怪行为

转载 作者:行者123 更新时间:2023-12-03 02:49:54 25 4
gpt4 key购买 nike

我想要一些单例类并实现。我引用了这篇文章https://stackoverflow.com/a/12649574/6323093 .

我的实现是这样的。所有源文件都是相同的lib目录。

单例.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 行为吗?或者这种行为是错误?

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

最佳答案

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修复工作应该正在进行中。

关于dart - Dart 单例中的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52501327/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com