我试图获取用户输入到TextFormField中的值,然后将其显示为新消息。现在,我可以使用控制器来获取值并显示它,问题是,我需要显示用户键入的所有消息并将它们堆叠在一起(就像信使一样)。
这是FormField本身,我知道我需要保存用户键入的值,然后通过将其发送到其他地方来从中发出消息,但我不知道该怎么做。 (可能是一个可以以某种方式做到这一点的空白?)
final chatfield = TextFormField(
controller: myController,
style: TextStyle(
decorationColor: Colors.white,
color: Colors.white,
),
autofocus: false,
onSaved: (String value) {
},
decoration: InputDecoration(
contentPadding: EdgeInsets.fromLTRB(20.0, 10.0, 20.0, 10.0),
border: OutlineInputBorder(borderRadius: BorderRadius.circular(32.0)),
hintStyle: TextStyle(color: Colors.white),
),
);
到目前为止,控制器唯一要做的就是获取值并显示它,我想保存并显示用户在TextFormField中键入的所有值。
答案 0 :(得分:1)
这里有一个基本示例,您可以使用StatefulWidget
,StreamBuilder
,FutureBuilder
等
class ChatListSample extends StatefulWidget {
@override
ChatListSampleState createState() {
return new ChatListSampleState();
}
}
class ChatListSampleState extends State<ChatListSample> {
TextEditingController myController = TextEditingController();
List<String> messages = List();
@override
Widget build(BuildContext context) {
final chatfield = TextFormField(
controller: myController,
style: TextStyle(
decorationColor: Colors.white,
color: Colors.white,
),
autofocus: false,
onSaved: (String value) {},
decoration: InputDecoration(
contentPadding: EdgeInsets.fromLTRB(20.0, 10.0, 20.0, 10.0),
border: OutlineInputBorder(borderRadius: BorderRadius.circular(32.0)),
hintStyle: TextStyle(color: Colors.white),
),
);
return Scaffold(
backgroundColor: Colors.purple,
body: Stack(
children: <Widget>[
Padding(
padding:
const EdgeInsets.only(left: 20.0, right: 20, bottom: 100),
child: ListView.builder(
itemCount: messages.length,
itemBuilder: (context, index) {
return ListTile(
title: Text(messages[index]),
);
},
),
),
Align(
alignment: Alignment.bottomCenter,
child: Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
chatfield,
MaterialButton(
child: Text("send message"),
onPressed: () {
setState(() {
messages.add(myController.text);
myController.clear();
});
},
)
],
),
)
],
));
}
}