为什么我需要在初始化时强制转换 Rx 对象的值?
Why do I need to cast the value of the Rx object on initialization?
考虑这段代码:
Rx<Widget> rxwidget = const Text("test").obs;
rxwidget.value = Container();
这将在运行时抛出以下错误
Expected a value of type 'Text', but got one of type 'Container'
这对我来说似乎很不合逻辑,因为变量只要求它是 Widget
而两者都是。它以某种方式将类型限制为它获得的第一个值。
但是如果我这样写:
Rx<Widget> rxwidget = (const Text("test") as Widget).obs;
rxwidget.value = Container();
它工作正常,但 IDE(Android 工作室)实际上抱怨演员是不必要的。
请注意,删除 const
关键字没有帮助。
另一个例子
Rx<String?> test = null.obs;
test.value = "test";
给予
Expected a value of type 'Null', but got one of type 'String'
我很确定它曾经有效,所以我怀疑这是 flutter 最近的变化。
这可能是 flutter/dart 中的错误吗?或者这是为什么?
版本信息:
Flutter 2.10.3 • channel stable • https://github.com/flutter/flutter.git
Framework • revision 7e9793dee1 (2 weeks ago) • 2022-03-02 11:23:12 -0600
Engine • revision bd539267b4
Tools • Dart 2.16.1 • DevTools 2.9.2
因为
Rx<T> get obs => Rx<T>(this);
所以 (const Text("test")).obs
的类型是 Rx<Text>
-> 错误的
解决方案
final rxwidget = Rx<Widget>(const Text("test"));
考虑这段代码:
Rx<Widget> rxwidget = const Text("test").obs;
rxwidget.value = Container();
这将在运行时抛出以下错误
Expected a value of type 'Text', but got one of type 'Container'
这对我来说似乎很不合逻辑,因为变量只要求它是 Widget
而两者都是。它以某种方式将类型限制为它获得的第一个值。
但是如果我这样写:
Rx<Widget> rxwidget = (const Text("test") as Widget).obs;
rxwidget.value = Container();
它工作正常,但 IDE(Android 工作室)实际上抱怨演员是不必要的。
请注意,删除 const
关键字没有帮助。
另一个例子
Rx<String?> test = null.obs;
test.value = "test";
给予
Expected a value of type 'Null', but got one of type 'String'
我很确定它曾经有效,所以我怀疑这是 flutter 最近的变化。
这可能是 flutter/dart 中的错误吗?或者这是为什么?
版本信息:
Flutter 2.10.3 • channel stable • https://github.com/flutter/flutter.git
Framework • revision 7e9793dee1 (2 weeks ago) • 2022-03-02 11:23:12 -0600
Engine • revision bd539267b4
Tools • Dart 2.16.1 • DevTools 2.9.2
因为
Rx<T> get obs => Rx<T>(this);
所以 (const Text("test")).obs
的类型是 Rx<Text>
-> 错误的
解决方案
final rxwidget = Rx<Widget>(const Text("test"));