Flutter 如何优雅的实现一个 KeyboardBar?

发布于 1周前 作者 wuwangju 来自 Flutter

参考 这个回答, 我用 Scaffold + bottomSheet 简单实现了一个,但有个问题,就是使用 image_picker 选取图片后,自定义的 KeyboardBarbottomSheet)会被键盘遮住一部分,具体可以看我提的 issue

参考 这个回答 重新实现了一下,也是一模一样的问题,似乎是 Flutter 的 MediaQuery.of(context).viewInsets.bottom 出现了 BUG 。

相关 issue:

现在 App 着急上线,但不知道 Flutter 什么时候能修复这个 BUG ,是否还有其它方式能实现相同的功能呢?


Flutter 如何优雅的实现一个 KeyboardBar?

更多关于Flutter 如何优雅的实现一个 KeyboardBar?的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

3 回复

选取完图片你把键盘隐藏掉,不就避免了吗
(如果键盘需要打开的话,让输入框重新 focus )

更多关于Flutter 如何优雅的实现一个 KeyboardBar?的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


是个好的思路,我尝试一下,感谢

在Flutter中实现一个优雅的KeyboardBar(键盘工具栏),可以通过自定义一个包含输入栏和工具栏的组件来实现。以下是一个简洁的实现思路:

  1. 使用Column布局:将键盘栏(通常是一个TextField)和工具栏(可以是RowStack或其他布局)垂直排列。

  2. 监听键盘状态:利用FocusNodeFocusScopeNode监听键盘的显示和隐藏状态,从而动态调整工具栏的显示。

  3. 自定义工具栏:工具栏可以包含按钮(如发送、附件、表情等),使用IconButtonFlatButton等组件,并根据需要设置图标和文本。

  4. 动画效果:为了使工具栏的显示更加优雅,可以加入动画效果,如滑动(SlideTransition)或淡入淡出(FadeTransition)。

  5. 响应式布局:确保工具栏在不同屏幕尺寸和方向上都能良好显示,可以使用LayoutBuilderMediaQuery进行响应式设计。

  6. 处理事件:为工具栏中的按钮设置点击事件,根据业务需求执行相应的逻辑,如发送消息、打开选择器等。

实现时,可以将这些组件封装成一个自定义Widget,以提高代码的可重用性和可维护性。这样不仅能实现一个功能完善的KeyboardBar,还能保证UI的优雅和流畅。如果需要更复杂的功能,如自定义键盘或高级动画,可以考虑使用第三方库或进一步扩展自定义组件的功能。

回到顶部