首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何创建小部件引用的地图?

如何创建小部件引用的地图?
EN

Stack Overflow用户
提问于 2021-12-31 15:57:11
回答 1查看 120关注 0票数 0

我正在尝试创建一个Map,以便我可以使用它来根据键动态地确定要动态使用的小部件。

设想情况:

代码语言:javascript
复制
class WidgetA extends StatelessWidget {...}
class WidgetB extends StatelessWidget {...}
class WidgetC extends StatelessWidget {...}
class WidgetD extends StatelessWidget {...}

我想要创建一张地图,如:

代码语言:javascript
复制
const Map<String, Widget> map_to_widget = {
   'widgetA': WidgetA,
   'widgetB': WidgetB,
   ...
}

这将允许我基于需要呈现的小部件列表动态创建小部件。上面所有的小部件都会接受相同的参数,所以我打算像这样使用它(仍然需要弄清楚如何传递参数):

代码语言:javascript
复制
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错误。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-31 16:06:48

因此,具体的错误来自于:

代码语言:javascript
复制
'widgetA': WidgetA,

上面,WidgetA不是一个小部件,它是一个类型,类似于1是一个int,但是int是一个类型。

要解决这个问题,您可能需要这样做:

代码语言:javascript
复制
'widgetA': WidgetA(),

才能真正创建一个小部件。

正如您所说,当您希望将参数传递给这些小部件时,问题就出现了。如果无论什么情况,参数总是相同的,那么可以直接传递它们:

代码语言:javascript
复制
'widgetA': WidgetA(title: 'this is widget A'),

但是,如果参数在使用小部件时可能发生变化,那么您就不能为此使用一个小部件映射,我建议使用一个函数映射:

代码语言:javascript
复制
Map<String, Widget Function(String)> widgets {
  'widgetA': (title) => WidgetA(title: title),
  ...
}

这样,当获得小部件时:

代码语言:javascript
复制
widgets['widgetA']('this is my title');
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70543865

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档