我在ListView
内添加了一些小部件。这样我就可以滚动所有小部件。现在,我需要向ListView
添加一个小部件以加载评论列表。我无法在ListView
内添加ListView
。而且,我不需要单独的滚动条来发表评论。它应该与ListView
中的小部件一起滚动。因此,我计划添加Column
而不是ListView
。有什么帮助在Columns
中动态添加我的评论吗?
new Expanded(
child:
new ListView(
shrinkWrap: true,
children: <Widget>[
// Title
new Padding(padding: const EdgeInsets.only(
top: 10.00, left: 10.00),
child: new Text(
_feed.title, textAlign: TextAlign.start,),
),
// content
new Container(
child: new Text(
_feed.content, textAlign: TextAlign.start,),
),
// Comments List will go here
],
),
),
答案 0 :(得分:9)
如果已经具有注释数据,只需创建一个列表,然后将其传递到children
的{{1}}属性即可。像这样:
Column
如果您还没有注释数据,需要获取它,请在将来完成后使用FutureBuilder来构建UI。
答案 1 :(得分:1)
除了@Derek Lakin的解答(对我也有用)之外,如果您需要更新评论并重新加载,还需要致电setState()
。
var commentWidgets = List<Widget>();
for (var comment in comments) {
commentWidgets.Add(Text(comment.text)); // TODO: Whatever layout you need foreach widget.
}
setState(() {
});
答案 2 :(得分:1)
目前(2021-06),Flutter 2.x 实现了 null-safe。 来自@Gene Bo 的答案应该有效,但几乎不需要修改。
这应该有效。
var pwdWidgets = <Widget>[];
Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: this.pwdWidgets,
),
ElevatedButton(
onPressed: (){
this.pwdWidgets.add(Text("Hello World"),);
},
child: Text("click me"),
),
答案 3 :(得分:0)
通过维护对Column
对象的引用,可以在声明.children
对象之后引用Column
字段/属性-像这样:
Column someColumn = Column(
children: [],
);
someColumn.children.add(Text('Hello 123'));
答案 4 :(得分:-1)
import 'package:flutter/material.dart';
class LoginRegisterPage extends StatefulWidget {
@override
_LoginRegisterPageState createState() => _LoginRegisterPageState();
}
class _LoginRegisterPageState extends State<LoginRegisterPage> {
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: AppBar(
title: Text("App"),
),
body: new Container(
margin: EdgeInsets.all(15.0),
child: new Form(
child: new Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: createInputs() + createButtons(),
),
),
),
);
}
List<Widget> createInputs(){
return{
SizedBox(height: 10.0),
logo(),
SizedBox(height: 20.0),
new TextFormField(
decoration: new InputDecoration(labelText: 'Email'),
),
SizedBox(height: 10.0),
new TextFormField(
decoration: new InputDecoration(labelText: 'Passwors')
),
SizedBox(height: 20.0),
};
}
Widget logo(){
return new Hero(
tag:'hero',
child: new CircleAvatar(
backgroundColor:Colors.transparent,
radius: 110.0,
child: Image.asset("images\logo.PNG"),
),
);
}
List<Widget> createButtons(){
return{
new RaisedButton(
child: new Text("Login", style: new TextStyle(fontSize: 20.0),),
textColor: Colors.pink,
onPressed: () {
},
),
new FlatButton(
child: new Text("Already not have an account?", style: new TextStyle(fontSize: 14.0),),
textColor: Colors.white,
onPressed: () {
},
)
};
}
}