Flutter Getx:obs 变量的初始值设置为 null

Big*_*gPP 1 dart flutter flutter-getx

现在我总是像这样使用 getx 可观察声明:

var someString = ''.obs;
var someNumber = 0.obs;
Run Code Online (Sandbox Code Playgroud)

等等...

但是,如果某些变量一开始没有初始值,而我实际上希望它们为空然后更改它们呢?

小智 9

如果您的 [Rx] 值没有初始值(第一次),则需要使用

final Rx<YourObject?> yourObject = (null as YourObject?).obs;
Run Code Online (Sandbox Code Playgroud)

或者为了更好地组织代码,您可以创建一个单独的类,如下所示

class RxNullable<T> {
  Rx<T> setNull() => (null as T).obs;
}
Run Code Online (Sandbox Code Playgroud)

并使用:

final Rx<YourObject?> yourObject = RxNullable<YourObject?>().setNull()
Run Code Online (Sandbox Code Playgroud)


S. *_*GIR 6

对于非空安全(在 Dart 2.12 之前),您可以像这样声明您的可观察变量:

final someVariable = Rx<Type>();
Run Code Online (Sandbox Code Playgroud)

例如:

final someString = Rx<String>();
final someNumber = Rx<int>();
Run Code Online (Sandbox Code Playgroud)

对于空安全(Dart 2.12 或更高版本),只需使用Rxn<Type>代替Rx<Type>

例如:

final someString = Rxn<String>();
final someNumber = Rxn<int>();
Run Code Online (Sandbox Code Playgroud)

  • 轻微地。因为它需要与非可空值不同的检查(`Rx&lt;Type&gt;()`)。但这对于您的用例来说应该没有那么重要。 (2认同)