簡體   English   中英

如何在 Flutter 中在運行時向 Row 對象添加項目?

[英]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);

這是錯誤的嗎? 如果是這樣,正確的方法是什么?

1. 為什么它不起作用

如果您只想向Row添加一個列表,您應該創建該列表,然后用它初始化Row 之后您無法添加列表,因為 Flutter 的小部件通常具有final字段/屬性,在運行時不可修改。

2. Flutter 方式

但是,您可以做的動態修改列表是傳遞一個函數,該函數在運行時在內部構建您的列表。 而這正是ListView.builder()的構造函數ListView一樣。

例如,這是基於List s entriescolorCodes動態創建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 ,例如,字母DcolorCode 400 ,到相應的List ,並且 Flutter 會在屏幕上動態呈現相應的Container

我不確定我是否做對了,但是您嘗試做的事情沒有意義。 如果您想重用帶有小部件和信息的Row ,您只需構建一次並將整個內容保存為小部件。

像這樣嘗試:

  1. 建立一個Row
  2. 為您的孩子創建小部件。
  3. 將它們顯示為行的小部件。
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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM