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