Flutter:基于属性从类调用方法



目标是使用父类的属性来调用方法并扩展该类的内容。

下面的代码被设计为基于父类的属性调用方法。它返回一个类型错误。

它是这样被调用的:

MyToolbar(data: [
{
'MySecondClass': ['red','green','purple']
}
])

这个是类:

class MyToolbar extends StatelessWidget {
MyToolbar({required this.data})
final List data;
ToolbarContent(type, data) {
if (type == 'MySecondClass') {
return MySecondClass(toggles: data);
}
@override
Widget build(BuildContext context) {
return Stack(children:[
for (List childData in data)
ToolbarContent('mySecondClass', childData),

])}

首先,它返回以下类型错误:

_TypeError (type '_InternalLinkedHashMap<String, List<String>>' is not a subtype of type 'List<dynamic>')

其次,列表需要找到属性数据的键,以便为函数'ToolbarContent'设置正确的函数名。

这里有几个问题。首先,正如temp_所提到的,您需要为data设置List类型,在本例中为List<Map<String,List<String>>

第二种情况是for (List childData in data)实际上需要是for (Map<String,List<String>> childData in data)

第三个是一个假设,但我认为在你的for循环中,mySecondClass应该是MySecondClass(或其他方式)

正确的代码如下:

class MyToolbar extends StatelessWidget {
final List<Map<String, List<String>>> data;
MyToolbar({required this.data});
@override
Widget build(BuildContext context) {
var children = <Widget>[];
data.forEach((childData) {
childData.forEach((key, stringList) {
//I'm assuming Toolbar content takes the key of the map i.e. MySecondClass
//as the first param and the List for the key as the second param
children.add(ToolbarContent(key, stringList));
});
});
return Stack(
children: children,
);
}
}

注意:我也假设ToolbarContent是另一个类,但请让我知道,如果不是这样。

默认情况下Dart将任何List设置为List<dynamic>。这就是误差的含义。你需要转换你的列表,试试这个代替final List<Map<String, List<String>> data;

相关内容

  • 没有找到相关文章

最新更新