getx是怎么实现`.obs`这个东西的

How does getx realize the `.obs` thing

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

import 'package:get/get.dart';

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

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

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

您可能会在不知不觉中使用扩展方法。

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

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

int.parse('42')

功能改为在字符串上:

可能会更好——更短且更易于与工具一起使用
'42'.parseInt()

要启用该代码,您可以导入包含 字符串扩展名 class:

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

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

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);
}