目標是使用父類的屬性來呼叫方法并擴展該類的內容。
以下代碼旨在根據其父類的屬性呼叫方法。它回傳一個型別錯誤。
它是這樣呼叫的:
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”設定正確的函式名稱。
uj5u.com熱心網友回復:
這里有幾個問題。首先,正如 temp_ 所提到的,您需要為 設定 List 型別data,在這種情況下將是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是另一個類,但如果不是,請告訴我。
uj5u.com熱心網友回復:
默認情況下,Dart 將任何 List 設定為List<dynamic>. 這就是錯誤所說的。你需要投射你的串列,試試這個final List<Map<String, List<String>> data;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/337194.html
