我可以同时在波动列/行/堆栈上加入静态和动态小部件吗?

时间:2019-10-07 21:43:40

标签: flutter

让我说:

child: new Column(
          children: <Widget>[
            Center(child: Text("This is my title"),),
]

有没有办法在静态居中文本之后将List添加到此列?或者我必须添加使用此方法:

List<Widget> widgets();
widgets.add(Center(child: Text("This is my title"),));
for (var a=0;a<5;a++) {
widgets.add(Text("$a"));
}

,然后像这样添加所有列表:

child: new Column(
              children: widgets

3 个答案:

答案 0 :(得分:2)

这是一个小示例,您可以在其中找到一个居中的标题和一个数字列表。您可以通过点击按钮来修改列表:

List<int> numbers = [1, 2, 3];

如果您希望标题随列表一起滚动:

ListView(
  children: <Widget>[
    RaisedButton(
      child: Text("Add number"),
      onPressed: () {
        setState(() {
          numbers.add(numbers.length + 1);
        });
      },
    ),
    Center(
      child: Text("This is my title"),
    ),
    ListView.builder(
      shrinkWrap: true,
      physics: NeverScrollableScrollPhysics(),
      itemCount: numbers.length,
      itemBuilder: (context, count) {
        return Text('Number: ${numbers[count]}');
      },
    ),
  ],
)

如果要固定标题并仅滚动列表:

Column(
  children: <Widget>[
    RaisedButton(
      child: Text("Add number"),
      onPressed: () {
        setState(() {
          numbers.add(numbers.length + 1);
        });
      },
    ),
    Center(
      child: Text("This is my title"),
    ),
    Expanded(
      child: ListView.builder(
        shrinkWrap: true,
        itemCount: numbers.length,
        itemBuilder: (context, count) {
          return Text('Number: ${numbers[count]}');
        },
      ),
    ),
  ],
)

这是不使用ListView.builder的另一个简单选择:

ListView(
    children: <Widget>[
      RaisedButton(
        child: Text("Add number"),
        onPressed: () {
          setState(() {
            numbers.add(numbers.length + 1);
          });
        },
      ),
      Center(
        child: Text("This is my title"),
      ),
      Column(
        children: getWidgets(),
      ),
    ],
  )

List<Widget> getWidgets() {
  return numbers.map((number) => Text('Number: $number')).toList();
}

答案 1 :(得分:1)

如果我了解您的需求,我认为这会为您提供帮助

child: new Column(
          children: <Widget>[
            Center(child: Text("This is my title"),),

new Column(
children: ListMyWidgets(),
),
    ]
        ));

然后添加新的函数以返回动态内容

List<Widget> ListMyWidgets() {
 List<Widget> list = new List();
list.add(Text("text1"))
list.add(Text("text2"))
list.add(Text("text..."))
 return list;
}

按下按钮后添加setState以查看效果

setState(() {  });   

答案 2 :(得分:-2)

这就是我想要的:

child: new Column(
    children: <Widget>[
    Center(child: Text("This is my title"),),
    widgets()
]

...
...

Widget widgets() {
    List<Widget> list = new List<Widget>();
    for (var a=0;a<5;a++) {
        list.add(Text("$a"));
    }
    return list;
}