我正在嘗試創建一個 Map<String, Widget> 以便我可以使用它根據鍵動態確定要使用的小部件。
設想:
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錯誤訊息。
uj5u.com熱心網友回復:
所以具體的錯誤來自于此:
'widgetA': WidgetA,
上面,WidgetA不是widget,是type,類似于how 1is an int但是int是type。
要解決此問題,您需要執行以下操作:
'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://www.uj5u.com/yidong/399693.html
上一篇:如何控制多元組的相等性?
