【问题标题】:TextFormField hidden by keyboard - Flutter键盘隐藏的TextFormField - Flutter
【发布时间】:2020-04-28 20:01:44
【问题描述】:

当关注 TextFormField 时,键盘会隐藏在 TextFormField 上。我将 SingleScrollview 与 Column 小部件一起使用。下面我附上了带有编码的屏幕截图。请指导我解决此问题。

Scaffold(
  resizeToAvoidBottomInset: false,
  resizeToAvoidBottomPadding: false,
  key: _scaffoldKey,
  body: SingleChildScrollView(
  child: Padding(
    padding: EdgeInsets.only(bottom: MediaQuery.of(context).viewInsets.bottom),
    child: new Column(
      children: <Widget>[
        _tabText(),
        isSignin ? _loginContainer() : _signUpContainer(),
      ],
    ),),),);

【问题讨论】:

  • 当输入电子邮件字段时你想要什么同时在键盘上方也可见密码字段?
  • 密码字段不可见

标签: flutter dart flutter-layout


【解决方案1】:

//将这一行“resizeToAvoidBottomInset: true”添加到你的 Scaffold 并把你的 main ScrollView 中的容器。

    @override
    Widget build(BuildContext context) {
   return Scaffold(
   resizeToAvoidBottomInset: true,
   key: _scaffoldKey,
   backgroundColor: Colors.white,
   body: SingleChildScrollView(    
      child: Container()
    ),
   );
  }

【讨论】:

    【解决方案2】:

    您必须删除Scaffold 的这些属性:

      resizeToAvoidBottomInset: false,
      resizeToAvoidBottomPadding: false,
    

    如果您删除它们,resizeToAvoidBottomInset 将默认为true

    resizeToAvoidBottomInset property:

    ...如果脚手架上方显示了屏幕键盘,则 body 可以调整大小以避免与键盘重叠,从而防止 身体内的小部件不会被键盘遮挡。

    【讨论】:

    • 感谢您的回复。我尝试了上述解决方案,但我得到了相同的结果。
    • 如果您点击密码字段,键盘是否在密码字段上方?
    【解决方案3】:

    在scaffold() 小部件之后尝试SingleChildScrollView() 小部件。在 Scaffold() 小部件之后使用 SingleChildScrollView() 小部件包装所有小部件。

    Widget build(BuildContext context) {
    return Scaffold( 
      body: SingleChildScrollView(
        child: Form(
          key: formKey,
          child: Column(
            children: <Widget>[
              Container(
                child: Stack(
                  children: <Widget>[
                    Container(
    

    【讨论】:

    • 感谢您的回复。我已经在 SingleChildScrollView 中声明了所有小部件。
    【解决方案4】:

    我尝试了动画来避免这种情况:

    ScrollController _scrollController;                                 //<==  
    
    class SignUpPage extends StatefulWidget {
      static String tag = 'SignUpPage';
      @override
      _SignUpPageState createState() => _SignUpPageState();
    }
    
    class _SignUpPageState extends State<SignUpPage> {
    
    //Implementing scrollController by detecting keyboard               //<==
      bool scrolled = false;
      _scrollListener() {
        if (!scrolled && MediaQuery.of(context).viewInsets.bottom != 0) {
          _scrollController.animateTo(
            _scrollController.position.maxScrollExtent,
            duration: Duration(milliseconds: 100),
            curve: Curves.easeOut,
          );
          scrolled = true;
        }
        if (MediaQuery.of(context).viewInsets.bottom == 0) {
          scrolled = false;
        }
      }
    
      @override
      void initState() {
        _scrollController = ScrollController();
        _scrollController.addListener(_scrollListener);
        super.initState();
      }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-04
      • 2019-08-12
      • 1970-01-01
      • 1970-01-01
      • 2021-08-25
      • 2020-10-15
      • 2021-10-06
      • 1970-01-01
      相关资源
      最近更新 更多