How to spread a list in dart

2020-06-30 05:17发布

问题:

In Javascript I would use a spread operator:

Now I have the same problem with Flutter:

 Widget build(BuildContext context) {
    return Column(
      children: <Widget>[
        MyHeader(),
        _buildListOfWidgetForBody(), // <- how to spread this <Widget>[] ????
        MyCustomFooter(),
      ],
    );
  }

回答1:

You can now do spreading from Dart 2.3

var a = [0,1,2,3,4];
var b = [6,7,8,9];
var c = [...a,5,...b];

print(c);  // prints: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]


回答2:

There is an issue to add this to future version of dart https://github.com/dart-lang/language/issues/47

but for now you can use sync* and yield*

Iterable<Widget> _buildChildren sync* {
  yield MyHeader();
  yield* _buildListOfWidgetForBody();
  yield MyCustomFooter();
}

EDIT: As of Dart 2.3 you can now do:

Widget build(BuildContext context) {
    return Column(
      children: <Widget>[
        MyHeader(),
        ..._buildListOfWidgetForBody(),
        MyCustomFooter(),
      ],
    );
  }


回答3:

You don't, at the moment. But you can build a List from it and insert/add the other elements on the go.

 Widget build(BuildContext context) {
   final List<Widget> columnWidgets = List.from(_buildListOfWidgetForBody())
                       ..insert(0, MyHeader())
                       ..add(MyCustomFooter());

    return Column(
          children: columnWidgets
        );   
    }

Update - 20th April 2019

You can now use the spread operator since Dart 2.3 was released.

List<int> a = [0,1,2,3,4];
List<int> b = [6,7,8,9];
List<int> c = [...a,5,...c];


标签: dart flutter