在 Flutter 应用程序中的 ListView 滚动上隐藏/关闭键盘

月行者

我在 Flutter 应用中有聊天窗口。消息显示为小部件内的ListView小部件,我还有附加到窗口底部的消息输入小部件。

我想要

  1. 当我滚动时隐藏键盘 ListView
  2. 添加新消息时滚动到最后一条消息 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在Flutter中滚动时隐藏键盘

如何在启动应用程序时在 Flutter 中的 ListView 中制作卡片的随机顺序?

在 Flutter 中从 SingleChildScrollView 在 PageView 中滚动 ListView

使用Dart的Flutter中的可滚动Listview

Flutter:滚动到ListView中的小部件

ListView.builder在flutter中逐项滚动

flutter-在listview生成器中滚动listview

控制 Flutter ListView 的滚动

颤振:扩展小部件内的 ListView 在我的颤动应用程序中没有滚动

在Flutter中刷新ListView

在Flutter中清除ListView

Flutter:SimpleDialog中的ListView

Flutter 中 ListView 中的滚动或“嵌套滚动”问题

android listview更新/刷新数据而不关闭应用程序

如何在我的 Flutter 应用程序中显示可关闭的教程叠加层?

Flutter:CupertinoTabScaffold - 从 TabView 的导航中返回 Android 上的后退按钮关闭应用程序

在 Flutter 应用程序中关闭 Store 实例的最佳实践是什么?

即使关闭应用程序,在后台在Dart和Flutter中运行定期任务

在Flutter中关闭应用程序后,如何使本地存储持久化?

如何根据 Flutter 应用程序中锁定或关闭屏幕的检测采取行动

Android应用程序中的动态ListView

FLutter中可滚动列中的4个水平Listview

Flutter:容器+ ListView可滚动

Flutter:无法将 ListView 添加到示例应用程序

Flutter-容器BoxShadow在ListView的滚动中消失

如何在flutter中获取滚动的ListView索引号?

Flutter:如何在ListView中添加滚动指示器

Flutter:在ListView中添加时,Stepper不滚动

如何在Flutter中检测ListView的滚动位置