getx 是如何实现`.obs` 的

时间:2021-04-26 17:07:10

标签: flutter dart getx

学习 Flutter/getx 包我遇到的示例代码如下:

import 'package:get/get.dart';

class MyHomePageController extends GetxController {
  final count = 0.obs;
}

代码 0.obs 吓到我了。我的意思是整数如何具有 .obs 属性? getx pacakge 对我的代码做了什么?

1 个答案:

答案 0 :(得分:0)

这是 Dart 2.7 中引入的称为 extension 的 dart 语言特性,它是一种向现有库添加功能的方法。

您可能在不知情的情况下使用扩展方法。

例如,当您在 IDE 中使用代码完成时,它会建议扩展方法和常规方法。

例如,考虑以下将字符串解析为整数的代码:

int.parse('42')

功能放在字符串上可能会更好——更短且更易于与工具一起使用:

'42'.parseInt()

要启用该代码,您可以导入一个包含String 类扩展的库:

import 'string_apis.dart';
// ···
print('42'.parseInt()); // Use an extension method.

扩展不仅可以定义方法,还可以定义其他成员,例如 getter、setter 和运算符。此外,扩展有名称,如果出现 API 冲突,这会很有帮助。下面介绍了如何使用对字符串进行操作的扩展(名为 parseInt())来实现扩展方法 NumberParsing

extension NumberParsing on String {
  int parseInt() {
    return int.parse(this);
  }
  // ···
}

总结

get 包在后台使用扩展来调用 RxInt 的 getter。

对象所以属性实际上并没有被原始数据类型调用

这是来自get包的源代码……你可以按ctrl+“.obs”访问它

extension IntExtension on int {
  /// Returns a `RxInt` with [this] `int` as initial value.
  RxInt get obs => RxInt(this);
}