学习 Flutter/getx 包我遇到的示例代码如下:
import 'package:get/get.dart';
class MyHomePageController extends GetxController {
final count = 0.obs;
}
代码 0.obs
吓到我了。我的意思是整数如何具有 .obs
属性? getx pacakge 对我的代码做了什么?
答案 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);
}