我正在尝试创建一个Map,以便我可以使用它来根据键动态地确定要动态使用的小部件。
设想情况:
class WidgetA extends StatelessWidget {...}
class WidgetB extends StatelessWidget {...}
class WidgetC extends StatelessWidget {...}
class WidgetD extends StatelessWidget {...}我想要创建一张地图,如:
const Map<String, Widget> map_to_widget = {
'widgetA': WidgetA,
'widgetB': WidgetB,
...
}这将允许我基于需要呈现的小部件列表动态创建小部件。上面所有的小部件都会接受相同的参数,所以我打算像这样使用它(仍然需要弄清楚如何传递参数):
return Container(
child: map_to_widget('widgetA')
)当我试图创建映射时,我总是得到The element type 'Type' can't be assigned to the map value type 'Widget'.dartmap_value_type_not_assignable错误。
发布于 2021-12-31 16:06:48
因此,具体的错误来自于:
'widgetA': WidgetA,上面,WidgetA不是一个小部件,它是一个类型,类似于1是一个int,但是int是一个类型。
要解决这个问题,您可能需要这样做:
'widgetA': WidgetA(),才能真正创建一个小部件。
正如您所说,当您希望将参数传递给这些小部件时,问题就出现了。如果无论什么情况,参数总是相同的,那么可以直接传递它们:
'widgetA': WidgetA(title: 'this is widget A'),但是,如果参数在使用小部件时可能发生变化,那么您就不能为此使用一个小部件映射,我建议使用一个函数映射:
Map<String, Widget Function(String)> widgets {
'widgetA': (title) => WidgetA(title: title),
...
}这样,当获得小部件时:
widgets['widgetA']('this is my title');https://stackoverflow.com/questions/70543865
复制相似问题