为什么我需要在初始化时强制转换 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"));