如何在Dart中展开列表

68

在JavaScript中,我会使用扩展运算符:

enter image description here

现在我在Flutter中遇到了同样的问题:

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

4
好的,以下是您需要翻译的内容:您可能希望阅读https://medium.com/flutter-community/quick-tip-sync-a-taste-of-the-future-9be4cd6993f4 - Rémi Rousselet
有 Ruby 背景的人们常用的关键字:展开运算符 [*[1, 2], 3] - Alexander
1
@RémiRousselet,首先感谢您的Riverpod,我正在学习它,但它似乎非常有能力。然而,通过扩展运算符,我看到了这个其他用例:https://github.com/rrousselGit/river_pod/blob/d9a8b4a7ef358cacbe3938411835086b7aa3b468/examples/todos/lib/main.dart#L113 那是在做什么? - mLstudent33
4个回答

105

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]

14
在未来的 Dart 版本中,添加此功能存在问题:https://github.com/dart-lang/language/issues/47,但是现在您可以使用 sync*yield*
Iterable<Widget> _buildChildren sync* {
  yield MyHeader();
  yield* _buildListOfWidgetForBody();
  yield MyCustomFooter();
}

编辑: 在Dart 2.3中,您现在可以执行以下操作:

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

11

更新 - 2019年4月20日

自从Dart 2.3发布以来,现在可以使用扩展运算符。

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

我在这里看到另一个用例,其中 ...[ 在列表括号之前:https://github.com/rrousselGit/river_pod/blob/d9a8b4a7ef358cacbe3938411835086b7aa3b468/examples/todos/lib/main.dart#L113 - mLstudent33

0

FireStore 在模型中使用另一个字段

authInstance
    .collection('fav_product')
    .add(
{
...product.toMap(),
'field':'value',
}
);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接