微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

当在真实设备上的BottomSheet 处聚焦时,TextField 留在键盘后面,但在模拟器上工作

如何解决当在真实设备上的BottomSheet 处聚焦时,TextField 留在键盘后面,但在模拟器上工作

我看到了一些解决方案并实施了它们。在模拟器上看起来不错,但在真实设备上不起作用(见屏幕)。因此,当我单击 textField 时,键盘会根据焦点 Textfield 向上移动,并且我可以滚动,但是在真实设备中不会发生。提前感谢您抽出宝贵时间。

BottomSheet 在 FloatinActionButton 上启动

showModalBottomSheet(
                isScrollControlled: true,backgroundColor: Colors.transparent,context: context,builder: (context) => SingleChildScrollView(
                  child: Container(
                      child: PostAd(),padding: EdgeInsets.only(
                        bottom: MediaQuery.of(context).viewInsets.bottom,)),),);

方法 PostAD 在 Container 中显示多个页面(取决于用户选择的 Index)

return Center(
      child: Container(
        height: MediaQuery.of(context).size.height / 1.5,child: Center(
          child: Container(
           child: Column(
              children: [
                Center(child: radioButtonCreate()),// Radio Buttons to select Page Index
                Expanded(child: kadFormlist[formIndex]),//Pages i.e forms that has text field
              ],

enter image description here

解决方法

import 'package:flutter/material.dart';
import 'package:keyboard_visibility/keyboard_visibility.dart';

main() => runApp(MaterialApp(
  home: Scaffold(
    body: MyForm(),),));

class MyForm extends StatefulWidget {
  MyForm() : super();

  @override
  State<StatefulWidget> createState() => MyFormState();
}

class MyFormState extends State<MyForm> {
  bool isKeyboardVisible = false;

  @override
  void initState() {
    super.initState();

    KeyboardVisibilityNotification().addNewListener(
      onChange: (bool visible) {
        if (!visible) {
          setState(() {
            FocusScope.of(context).unfocus();
          });
        }
      },);
  }

  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.fromLTRB(20.0,20,0),child: SingleChildScrollView(
        reverse: isKeyboardVisible ? true : false,child: Padding(
          padding: const EdgeInsets.fromLTRB(0,100),child: Column(
            children: <Widget>[
              for (int i=0; i<100; i++) TextField()
            ],);
  }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?