如何在Flutter中使用collection for循环添加小部件?

时间:2019-07-08 22:23:03

标签: flutter dart

我正在尝试使用for循环在SliverList小部件中添加小部件。 但是我得到了这个错误代码 error: The element type 'Set<EachBusInfoBodyWidget>' can't be assigned to the list type 'Widget'

这里出现问题。

slivers: [
  for(var i=0;i<5;i++){
      EachBusInfoBodyWidget(Colors.green)
  }
]

如果我使用这样的代码

EachBusInfoBodyWidget(Colors.green)
EachBusInfoBodyWidget(Colors.green)
EachBusInfoBodyWidget(Colors.green)
EachBusInfoBodyWidget(Colors.green)
EachBusInfoBodyWidget(Colors.green)

单独运行,

2 个答案:

答案 0 :(得分:1)

如下更改您的build方法:

@override
Widget build(BuildContext context) {
//insert
List<Widget> widgets = List<Widget>();          

for(var i=0;i<5;i++){
  widgets.add(EachBusInfoBodyWidget(Colors.green));                  
}
//end insert
return Scaffold(

还要更改您的CustomScrollView

     child: CustomScrollView(
      slivers:
      <Widget>[
        SliverList(
          delegate: SliverChildListDelegate(
           //insert
            widgets
           //end insert
          ),
        ),
      ],
    ),

答案 1 :(得分:0)

这里的问题是collection for operator不带花括号({})。也就是说,正如您所知,它们不与它们配合使用。
花括号用于SetMap文字。如果您在条目后面添加冒号,则它将变成Map文字,例如{ 'flavor': 'sweet' }。但是,如果仅使用花括号,它将创建一个Set。通常,这不影响for循环,因为大括号用作常规流控制。

无论如何,要解决该问题,您只需删除花括号即可:

for(var i = 0; i < 5; i++) EachBusInfoBodyWidget(Colors.green)