如何在另一个小部件的children属性中传递小部件列表?

时间:2019-03-21 17:56:03

标签: dart flutter

以以下功能为例:

List<Widget> getListFiles() {
    List<Widget> list = [
        Container(),
        Container(),
        Container(),
    ];

    return list;
}

如何插入儿童参数?

Column(
    children: <Widget>
    [
        Text(),
        Text(),
        getListFiles(), <---
        Text(),
    ]
)

2 个答案:

答案 0 :(得分:1)

我认为您需要散布列表,因为您无法将元素类型“列表”分配给列表类型“小部件”。 Spread operator是需要的功能。您可以在here上关注有关此问题的信息。

与此同时,您可以使用generatorsyield运算符。

Column(
  children: List.unmodifiable(() sync* {
    yield Text();
    yield Text();
    yield* getListFiles();
    yield Text();
  }()),
);

小部件中用法的完整代码。

import 'package:flutter/material.dart';

class App extends StatelessWidget {
  List<Widget> getListFiles() {
    List<Widget> list = [Text('hello'), Text('hello1'), Text('hello2')];

    return list;
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Stackoverflow'),
      ),
      body: Column(
        children: List.unmodifiable(() sync* {
          yield Text('a');
          yield Text('b');
          yield* getListFiles();
          yield Text('c');
        }()),
      ),
    );
  }
}

答案 1 :(得分:1)

现在您可以使用点差运算符-自dart 2.3.0起

Column(
    children: <Widget>
    [
        Text(),
        Text(),
        ...getListFiles(), <---
        Text(),
    ]
)

另外,您可能必须将pubspec.yaml中的最低SDK级别更改为2.3.0