类型 'List<Widget?>' 不是类型转换中类型 'List<Widget>' 的子类型
type 'List<Widget?>' is not a subtype of type 'List<Widget>' in type cast
在 运行 dart migrate 并应用空安全之后,我的代码中出现了该错误,我认为这是导致代码块的错误。
LayoutBuilder(builder: (context, cons) {
return GestureDetector(
child: new Stack(
children: <Widget?>[
// list of different widgets
.
.
.
].where((child) => child != null).toList(growable: true) as List<Widget>,
),
);
),
错误消息说:
The following _CastError was thrown building LayoutBuilder:
type 'List<Widget?>' is not a subtype of type 'List<Widget>' in type cast
The relevant error-causing widget was
LayoutBuilder
package:projectName/…/components/fileName.dart:182
如果有人遇到这个问题,如何解决?
不是 Dart 专家。
但编译器似乎不尊重您的空安全检查。
我建议创建一个新的 List<Widget>
并用 List<Widget?>
中不为空的每个项目填充它。
你不能使用as
将List<T?>
转换为List<T>
,因为它们不是直接相关的类型;您需要使用 List<Widget>.from()
or Iterable.cast<Widget>()
.
来转换 elements
请参阅 了解如何从 List<T?>
中删除 null
元素, 得到 List<T>
结果(因此避免以后需要投射)。
尽管有不同的方法可以解决 by @jamesdlin but the recommended one is to use whereType
。例如:
List<Widget?> nullableWidgets = [];
List<Widget> nonNullable = nullableWidgets.whereType<Widget>().toList();
回答你的问题:
Stack(
children: <Widget?>[
// Widgets (some of them nullable)
].whereType<Widget>().toList(),
)
在 运行 dart migrate 并应用空安全之后,我的代码中出现了该错误,我认为这是导致代码块的错误。
LayoutBuilder(builder: (context, cons) {
return GestureDetector(
child: new Stack(
children: <Widget?>[
// list of different widgets
.
.
.
].where((child) => child != null).toList(growable: true) as List<Widget>,
),
);
),
错误消息说:
The following _CastError was thrown building LayoutBuilder:
type 'List<Widget?>' is not a subtype of type 'List<Widget>' in type cast
The relevant error-causing widget was
LayoutBuilder
package:projectName/…/components/fileName.dart:182
如果有人遇到这个问题,如何解决?
不是 Dart 专家。
但编译器似乎不尊重您的空安全检查。
我建议创建一个新的 List<Widget>
并用 List<Widget?>
中不为空的每个项目填充它。
你不能使用as
将List<T?>
转换为List<T>
,因为它们不是直接相关的类型;您需要使用 List<Widget>.from()
or Iterable.cast<Widget>()
.
请参阅 List<T?>
中删除 null
元素, 得到 List<T>
结果(因此避免以后需要投射)。
尽管有不同的方法可以解决whereType
。例如:
List<Widget?> nullableWidgets = [];
List<Widget> nonNullable = nullableWidgets.whereType<Widget>().toList();
回答你的问题:
Stack(
children: <Widget?>[
// Widgets (some of them nullable)
].whereType<Widget>().toList(),
)