moo*_*der 3 keyboard dart flutter flutter-layout
我在 Flutter 应用中有聊天窗口。消息显示为小部件内的ListView小部件,我还有附加到窗口底部的消息输入小部件。
我想要
ListViewInputWidget代码:
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: (){})
]
)}
Run Code Online (Sandbox Code Playgroud)
至于你的问题第一点:
您可以创建一个侦听器函数来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)]
);
}
Run Code Online (Sandbox Code Playgroud)
第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);
})
]
)}
Run Code Online (Sandbox Code Playgroud)
要在列表视图滚动时隐藏键盘,您只需向其添加keyboardDismissBehavior。例子
ListView(
keyboardDismissBehavior: ScrollViewKeyboardDismissBehavior.onDrag,
children: [],
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4919 次 |
| 最近记录: |