簡體   English   中英

如何將數據數組轉換為在顫振/飛鏢中展開或折疊的小部件列表?

[英]How to convert an array of data to a list of widgets with expand or fold in flutter/dart?

真的很沮喪自己沒有解決它,但最終放棄了。 我有一個字段數組,每個字段都是帶有標題和值的 map。 我想遍歷它並創建一個文本小部件列表以及它們之間的一些填充。 我嘗試了以下方法:

fields.expand((field)=>
                  [ Text(field['title']), 
                    Padding(padding: const EdgeInsets.only(bottom: 4.0))
                  ]
             ).toList()

但這會產生以下錯誤:

type 'List<dynamic>' is not a subtype of type 'List<Widget>'

我嘗試在expand后添加<Widget>但后來我得到:

type 'MappedListIterable<Map<String, String>, dynamic>' is not a subtype of type 'List<Widget>'

我也嘗試在expand(之后添加<Widget> ,但后來我得到:

type '<Widget>(dynamic) => List<Widget>' is not a subtype of type '(Map<String, String>) => Iterable<dynamic>' of 'f'

不知道還能做什么。 我怎么能強迫它意識到這是一個小部件列表? 我也嘗試過使用 fold,但遇到了類似的打字問題。

我認為您正在尋找的是.map() ,但有一種更清潔的方法:

items: [
    for(var field in fields)
        ...[
            Text(field['title']), 
            Padding(padding: const EdgeInsets.only(bottom: 4.0)),
        ]
]

確保您的最低 SDK 版本是 pubspec.yaml 中的 2.6.0 或更高版本

正如我在評論中所說,您的一個解決方案似乎應該有效,但由於它沒有我提供替代解決方案。

您可以使用for-each循環“手動”創建一個 output List ,您可以將其傳遞給您的Column小部件。 前任。

List<Widget> columnList = List();
for(Map field in fields) {
  columnList.add(Text(field['title']);
  columnList.add(Padding(padding: const EdgeInsets.only(bottom: 4.0)));
}

正如@christopher-moore 所指出的,在expand之后添加<Widget>確實有效。 我認為它不起作用的原因是我不斷收到錯誤,但在另一個地方我仍然有相同的聲明但沒有添加。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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