假设定义了两个列表:
List<MediaItem?> playlist = [];
List<Item> items = [Item(data:'vasya')];
两个模型:
class MediaItem {
final String id;
MediaItem({
required this.id
});
}
class Item {
final String data;
Item({
required this.data,
});
MediaItem toMediaItem() => MediaItem(
id: data,
);
}
然后按如下方式填充第一个列表:
playlist = items.map(
(el) => el.toMediaItem()
).toList();
然后,如果我try 改变列表中的元素:
playlist[0] = null;
IDE/DartPad认为没有问题,但在运行后,Dart抛出错误:Uncaught Error: TypeError: null: type 'JSNull' is not a subtype of type 'MediaItem'
仅当添加空安全问号toMediaItem()
方法时才起作用:
MediaItem? toMediaItem() => MediaItem(
id: data,
);
怎么说呢?我认为定义一个List<MediaItem?>
应该足以在任何时候将value更改为null.
DartPad示例:https://dartpad.dev/?id=592167a9f6e1a08344a51800c67887d3