当我将TextFormField放入PageView时,颤振避免调整屏幕大小

时间:2020-03-17 14:45:26

标签: flutter flutter-layout

在这个简化的代码中,我将两个TextFormField放入了一个颤抖的PageView页面中,将它们放入了另一个从Container扩展而没有Scaffold的类中,现在,当我单击此TextFormFields之一时,resizeToAvoidBottom *在我的代码中不起作用

  Widget build(BuildContext context) {
    return Consumer<ThemeManager>(builder: (context, theme, child) {
      return Directionality(
        textDirection: TextDirection.rtl,
        child: Scaffold(
          key: _scaffoldKey,
          backgroundColor: theme.accentColor,
          resizeToAvoidBottomPadding: false,
          resizeToAvoidBottomInset: false,
          body: NotificationListener<OverscrollIndicatorNotification>(
            onNotification: (overScroll) {
              overScroll.disallowGlow();
              return false;
            },
            child: Container(
              width: double.infinity,
              height: double.infinity,
              child: IntrinsicHeight(
                child: Stack(
                  children: <Widget>[
                    Container(
                      width: MediaQuery.of(context).size.width,
                      height: MediaQuery.of(context).size.height - 50,
                      child: Column(
                        mainAxisSize: MainAxisSize.max,
                        children: <Widget>[
                          BuildLoginHeaderScreen(theme: theme),
                          Expanded(
                            child: PageView(
                              controller: _pageController,
                              children: <Widget>[
                                ... // contains two TextFormFields
                              ],
                            ),
                          ),
                        ],
                      ),
                    ),
                  ],
                ),
              ),
            ),
          ),
        ),
      );
    });
  }

1 个答案:

答案 0 :(得分:0)

您可以使用resizeToAvoidBottomPadding通过用SingleChildScrollView包装代码的适当部分来解决问题。例如

child: SingleChildScrollView( 
      child: Column(
               mainAxisSize: MainAxisSize.max,
               children: <Widget>[
                    BuildLoginHeaderScreen(theme: theme),
                    Expanded(
                        child: PageView(
                             controller: _pageController,
                             children: <Widget>[
                                ... // contains two TextFormFields
                              ],
                            ),
                     ),
              ],
      ),

),

这将防止键盘缩小视图区域时像素溢出。