最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

flutter - How do I center the contents of a column when the keyboard is open? - Stack Overflow

programmeradmin1浏览0评论

When the keyboard is open, the content of the column on the real device looks like on the picture, i.e. it seems that the column does not take into account the fact that the keyboard is open in order to center the content in the free area. Instead, the column keeps centering at the height of the screen. How to make the distances y1==y2 when the keyboard is open?

@override
  Widget build(BuildContext context) {
    return Scaffold(
      body: SafeArea(
        child: Padding(
          padding: const EdgeInsets.all(8.0),
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            crossAxisAlignment: CrossAxisAlignment.center,
            children: [
              TextField(
                keyboardType: TextInputType.number,
                decoration: InputDecoration(
                  labelText: 'Input box for keyboard test',
                ),
                autofocus: true,
                focusNode: _textFieldFocus, //dont fet this parameter
                onSubmitted: (value) {
                  // print("$value");
                  FocusScope.of(context).requestFocus(_textFieldFocus);
                },
              ),
            ],
          ),
        ),
      ),
    );
  }

When the keyboard is open, the content of the column on the real device looks like on the picture, i.e. it seems that the column does not take into account the fact that the keyboard is open in order to center the content in the free area. Instead, the column keeps centering at the height of the screen. How to make the distances y1==y2 when the keyboard is open?

@override
  Widget build(BuildContext context) {
    return Scaffold(
      body: SafeArea(
        child: Padding(
          padding: const EdgeInsets.all(8.0),
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            crossAxisAlignment: CrossAxisAlignment.center,
            children: [
              TextField(
                keyboardType: TextInputType.number,
                decoration: InputDecoration(
                  labelText: 'Input box for keyboard test',
                ),
                autofocus: true,
                focusNode: _textFieldFocus, //dont fet this parameter
                onSubmitted: (value) {
                  // print("$value");
                  FocusScope.of(context).requestFocus(_textFieldFocus);
                },
              ),
            ],
          ),
        ),
      ),
    );
  }

Share Improve this question asked Feb 10 at 14:51 rozerrorozerro 7,21614 gold badges64 silver badges117 bronze badges 2
  • you can try MediaQuery.viewInsetsOf for padding, btw is nox better than android emulator(performance)? – Md. Yeasin Sheikh Commented Feb 10 at 16:21
  • @Md.YeasinSheikh I find the performance of Nox to be better. – rozerro Commented Feb 10 at 16:35
Add a comment  | 

1 Answer 1

Reset to default 0

You can put a TextField Widget between an Expanded widget to take the max height from the top and the max height from the bottom after giving the TextField widget the height it needs

By placing a TextField widget between two Expanded widgets inside a Column, you ensure that the TextField is centered vertically while taking up the necessary height. The Expanded widgets above and below the TextField will occupy the remaining available space, effectively pushing the TextField to the center of the screen.

Also make sure to put resizeToAvoidBottomInset, as true => resizeToAvoidBottomInset: true,

So that it will make sure to substract the keyboard height from the screen height

Like this :

   Scaffold(
      appBar: AppBar(
        title: const Text("Center Content"),
        backgroundColor: Colors.green,
      ),
      resizeToAvoidBottomInset: true,
      body: SafeArea(
        child: Padding(
          padding: const EdgeInsets.all(8.0),
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            crossAxisAlignment: CrossAxisAlignment.center,
            children: <Widget>[
              const Expanded(          <------ Take the max height from the top
                child: SizedBox(),
              ),
              TextField(
                keyboardType: TextInputType.number,
                decoration: const InputDecoration(
                  labelText: 'Input box for keyboard test',
                ),
                autofocus: true,
                focusNode: _textFieldFocus, //dont fet this parameter
                onSubmitted: (value) {
                  // print("$value");
                  FocusScope.of(context).requestFocus(_textFieldFocus);
                },
              ),
              const Expanded(         <------ Take the max height from the bottom
                child: SizedBox(),
              ),
            ],
          ),
        ),
      ),
    );
发布评论

评论列表(0)

  1. 暂无评论
ok 不同模板 switch ($forum['model']) { /*case '0': include _include(APP_PATH . 'view/htm/read.htm'); break;*/ default: include _include(theme_load('read', $fid)); break; } } break; case '10': // 主题外链 / thread external link http_location(htmlspecialchars_decode(trim($thread['description']))); break; case '11': // 单页 / single page $attachlist = array(); $imagelist = array(); $thread['filelist'] = array(); $threadlist = NULL; $thread['files'] > 0 and list($attachlist, $imagelist, $thread['filelist']) = well_attach_find_by_tid($tid); $data = data_read_cache($tid); empty($data) and message(-1, lang('data_malformation')); $tidlist = $forum['threads'] ? page_find_by_fid($fid, $page, $pagesize) : NULL; if ($tidlist) { $tidarr = arrlist_values($tidlist, 'tid'); $threadlist = well_thread_find($tidarr, $pagesize); // 按之前tidlist排序 $threadlist = array2_sort_key($threadlist, $tidlist, 'tid'); } $allowpost = forum_access_user($fid, $gid, 'allowpost'); $allowupdate = forum_access_mod($fid, $gid, 'allowupdate'); $allowdelete = forum_access_mod($fid, $gid, 'allowdelete'); $access = array('allowpost' => $allowpost, 'allowupdate' => $allowupdate, 'allowdelete' => $allowdelete); $header['title'] = $thread['subject']; $header['mobile_link'] = $thread['url']; $header['keywords'] = $thread['keyword'] ? $thread['keyword'] : $thread['subject']; $header['description'] = $thread['description'] ? $thread['description'] : $thread['brief']; $_SESSION['fid'] = $fid; if ($ajax) { empty($conf['api_on']) and message(0, lang('closed')); $apilist['header'] = $header; $apilist['extra'] = $extra; $apilist['access'] = $access; $apilist['thread'] = well_thread_safe_info($thread); $apilist['thread_data'] = $data; $apilist['forum'] = $forum; $apilist['imagelist'] = $imagelist; $apilist['filelist'] = $thread['filelist']; $apilist['threadlist'] = $threadlist; message(0, $apilist); } else { include _include(theme_load('single_page', $fid)); } break; default: message(-1, lang('data_malformation')); break; } ?>