How do I use collection for-loops in Flutter?

2020-05-09 19:04发布

问题:

I am trying to add widgets in a SliverList using a for-loop.
But I get the following error:

error: The element type 'Set' can't be assigned to the list type 'Widget'

The problem arises here:

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

回答1:

The problem here is that the collection for operator does not take curly braces ({}). i.e. they do not work with them as you can tell.
Curly braces are used for Set and Map literals. If you add a colon behind an entry, it becomes a Map literal, e.g. { 'flavor': 'sweet' }. However, if you just use curly braces, it creates a Set. Usually this does not affect for-loops because curly braces are used as regular flow control.

Anyways, to fix the issue you simply need to remove your curly braces:

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


回答2:

Change your build method as follows:

@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(

And also change your CustomScrollView:

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


标签: flutter dart