我在 Flutter 应用中有聊天窗口。消息显示为小部件内的ListView
小部件,我还有附加到窗口底部的消息输入小部件。
我想要
ListView
InputWidget
代码:
class _MessagesPageState extends State<MessagesPage> {
final ScrollController listScrollController = ScrollController();
@override
Widget build(BuildContext context) {
return Scaffold(
....
body: Stack(
children: [
ListView.builder(
controller: listScrollController
....
),
InputWidget()]
);
}
class InputWidget extends StatelessWidget {
final TextEditingController _textEditingController = TextEditingController();
....
Row (
children: [
TextField(
controller: _textEditingController
),
IconButton(icon: ...., onPressed: (){})
]
)}
至于你的第 1 点问题:
您可以创建一个侦听器函数来listScrollController
包含对匿名的调用FocusNode
(从这个高度投票的答案中获取的想法),并且当发生任何滚动事件时,焦点将从您的手中夺走TextField
,键盘将被解除:
class _MessagesPageState extends State<MessagesPage> {
final ScrollController listScrollController = ScrollController();
@override
void initState() {
listScrollController.addListener(_scrollListener);
super.initState();
}
_scrollListener() {
FocusScope.of(context).requestFocus(FocusNode());
}
@override
Widget build(BuildContext context) {
return Scaffold(
....
body: Stack(
children: [
ListView.builder(
controller: listScrollController
....
),
InputWidget(controller: listScrollController)]
);
}
第 2 点:
您会注意到我修改了您InputWidget
以将 aScrollController
作为参数,因此您可以将ListView
控制器传递给它。当IconButton
按下 时,listScrollController
将根据需要跳到最后。
class InputWidget extends StatelessWidget {
InputWidget({Key key,this.controller}) : super(key: key);
final ScrollController controller ;
final TextEditingController _textEditingController = TextEditingController();
....
Row (
children: [
TextField(
controller: _textEditingController
),
IconButton(icon: ...., onPressed: (){
controller.jumpTo(controller.position.maxScrollExtent);
})
]
)}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句