[英]How to add items to a Row object at runtime in Flutter?
Flutter 最神奇的部分是每個小部件都是一個對象。 但是,當我嘗試從Row
創建一個對象並向其子項添加一個小部件List
時,我在運行時收到此錯誤:
Cannot add to an unmodifiable list
我目前正在像這樣創建我的Row
:
Row rowStar = Row();
rowStar.children.addAll(rowChildren);
這是錯誤的嗎? 如果是這樣,正確的方法是什么?
如果您只想向Row
添加一個列表,您應該創建該列表,然后用它初始化Row
。 之后您無法添加列表,因為 Flutter 的小部件通常具有final
字段/屬性,在運行時不可修改。
但是,您可以做的動態修改列表是傳遞一個函數,該函數在運行時在內部構建您的列表。 而這正是ListView.builder()
的構造函數ListView
一樣。
例如,這是基於List
s entries
和colorCodes
動態創建Container
List
的文檔示例。
final List<String> entries = <String>['A', 'B', 'C'];
final List<int> colorCodes = <int>[600, 500, 100];
ListView.builder(
padding: const EdgeInsets.all(8),
itemCount: entries.length,
itemBuilder: (BuildContext context, int index) {
return Container(
height: 50,
color: Colors.amber[colorCodes[index]],
child: Center(child: Text('Entry ${entries[index]}')),
);
}
);
您可以將一個按鈕添加到.add
,例如,字母D
和colorCode
400
,到相應的List
,並且 Flutter 會在屏幕上動態呈現相應的Container
。
我不確定我是否做對了,但是您嘗試做的事情沒有意義。 如果您想重用帶有小部件和信息的Row
,您只需構建一次並將整個內容保存為小部件。
像這樣嘗試:
Row
。Row(
children: <Widget>[
customWidget1(),
customWidget2(),
customWidget3(),
],
)
您的自定義小部件是Row
的內容。
希望能幫助到你。
就我而言,我可以從以前創建的List<Widget>
創建一個Row
:
Row calculateListOfStars(ranking) {
final List<Widget> rowList = [];
rowList.addAll([
// make my custom widget
]);
final Row rowStars = Row(
children: rowList,
);
return rowStars;
}
使用列表Listview
:
ListView(
children: rowStar((data) {
return ListTile();
}).toList();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.