如何在单子滚动视图颤动中使用列

时间:2020-06-13 06:18:29

标签: android ios google-chrome flutter

我在单个子滚动视图中有一列。使用键盘输入时,我需要使登录屏幕滚动,因为键盘会隐藏密码文本字段。

class UserRegistration extends StatefulWidget {

  @override
  _UserRegistrationState createState() => _UserRegistrationState();
}

class _UserRegistrationState extends State<UserRegistration> {
  @override
  Widget build(BuildContext context) {

    SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle(
      statusBarColor: Color(0xFF6C62FF)
    ));

    return SafeArea(
      child: GestureDetector(
        onTap: () => FocusScope.of(context).requestFocus(FocusNode()),
        child: Scaffold(
          resizeToAvoidBottomInset: false,
          resizeToAvoidBottomPadding: false,
          backgroundColor: Color(0xFF6C62FF),
          body:   SingleChildScrollView(
            padding: EdgeInsets.symmetric(horizontal: 30),
            child: Column([![enter image description here][1]][1]
              mainAxisAlignment: MainAxisAlignment.spaceEvenly,
              crossAxisAlignment: CrossAxisAlignment.start,
              children: [
                Center(child: FittedBox(child: Text('Welcome', style: TextStyle(fontFamily: 'SourceSans', fontSize: 50, fontWeight: FontWeight.w600, color: Color(0xFFFFD700)),))),
                Container(
                  child: Column(
                    crossAxisAlignment: CrossAxisAlignment.start,
                    children: [
                      Text('Register', style: TextStyle(fontFamily: 'SourceSans', fontSize: 40, fontWeight: FontWeight.w600, color: Colors.white)),
                      SizedBox(height: 5,),
                      Text('Start from today', style: TextStyle(fontFamily: 'SourceSans', fontSize: 25, letterSpacing: 1.5,fontWeight: FontWeight.w600, color: Colors.white), overflow: TextOverflow.ellipsis,),
                    ],
                  ),
                ),
                Form(
                  child: Column(
                    children: [
                      EditTextNormal(hintText: 'Email', iconData: Icons.email, textInputType: TextInputType.emailAddress, validate: false, errorText: 'Enter your email',),
                      SizedBox(height: 20,),
                      EditTextObscure(hintText: 'Password', iconData: Icons.lock, textInputType: TextInputType.text, validate: false, errorText: 'Enter your password',),
                      SizedBox(height: 50,),
                      Container(
                        height: 50,
                        width: 180,
                        child: FlatButton(
                          splashColor: Colors.transparent,
                          highlightColor: Colors.transparent,
                          shape: RoundedRectangleBorder(
                            borderRadius: BorderRadius.circular(8)
                          ),
                          onPressed: () {},
                          color: Colors.white,
                          child: Text('Register', style: TextStyle(color: Color(0xFF6C62FF), fontSize: 20), overflow: TextOverflow.ellipsis,),
                        ),
                      )
                    ],
                  ),
                ),
                Center(
                  child: RichText(
                    text: TextSpan(
                      children: <TextSpan>[
                        TextSpan(text: 'Login', style: TextStyle(color: Color(0xFFFFD700), letterSpacing: 1, wordSpacing: 1.5))
                      ],
                      text: 'Have an account? ',
                      style: TextStyle(fontSize: 18, fontFamily: 'SourceSans', fontWeight: FontWeight.bold, letterSpacing: 1, wordSpacing: 1.5)
                    ),
                  ),
                ),
              ],
            ),
          ),
        ),
      ),
    );
  }
}

这是我的代码,但是在这里,当我在单个子滚动视图空间内均匀使用列时,此方法不起作用。请给我一个解决方案。

我的输出:

My output

预期输出:enter image description here

2 个答案:

答案 0 :(得分:0)

SingleChildScrollView内添加容器,并根据是否打开键盘来为其分配高度。

添加依赖性:

dependencies:
  keyboard_visibility: ^0.5.6

initState()中初始化键盘监听器以进行回调

bool _isKeyBoardShown = false;

  @protected
  void initState() {
    super.initState();
    KeyboardVisibilityNotification().addNewListener(
      onChange: (bool visible) {
        setState(() {
          _isKeyBoardShown = visible;
        });
      },
    );
  }

根据_isKeyBoardShown值决定是否在屏幕上添加其他高度。

Container(
          width: MediaQuery.of(context).size.width,
          height: _isKeyBoardShown
              ? MediaQuery.of(context).size.height +
                  MediaQuery.of(context).size.height / 2
              : MediaQuery.of(context).size.height,
          child: Column(....)
           )

注意:使用MediaQuery来确定其他高度,请不要使用硬编码的值 在这里,我使用了MediaQuery.of(context).size.height / 2

答案 1 :(得分:0)

尝试一下

Cell Size