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

出现键盘时重建整个小部件树

如何解决出现键盘时重建整个小部件树

键盘出现颤动时如何解决重新渲染整个小部件树?在我的应用程序中,每当键盘出现和消失时,都会重新构建整个小部件树?避免这种情况的解决方案是什么?

解决方法

有多种方法可以解决这个问题,以下是我过去使用过的一些解决方案。

Scaffold 的 resizeToAvoidBottomInset 参数

将此设置为 false 并且您的屏幕不会调整大小,这样做的缺点是键盘会出现在您的 UI 顶部

示例:

class SampleScreen extends StatelessWidget {
  const SampleScreen({Key key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      resizeToAvoidBottomInset: false,body: Align(
        alignment: Alignment.bottomCenter,child: SafeArea(
          minimum: const EdgeInsets.all(20),child: TextField(
            decoration: new InputDecoration(
              enabledBorder: OutlineInputBorder(
                borderSide: BorderSide(color: Colors.black,width: 1.0),),hintText: 'Mobile Number',);
  }
}

enter image description here

将 Scaffold 的主体包裹在 ScrollView 中

通过将您的整个身体放在 ScrollView 中,您现在可能拥有一个冗长的表单,这里唯一需要注意的是您将无法使用 SpacerExpanded 小部件

示例

class SampleScreen extends StatelessWidget {
  const SampleScreen({Key key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: SafeArea(
        minimum: const EdgeInsets.all(20),child: SingleChildScrollView(
          child: Column(children: [
            Container(
              padding: EdgeInsets.all(20),margin: EdgeInsets.all(10),color: Colors.red,height: MediaQuery.of(context).size.height - 165,TextField(
              decoration: new InputDecoration(
                enabledBorder: OutlineInputBorder(
                  borderSide: BorderSide(color: Colors.black,]),);
  }
}

enter image description here

保存您当前的状态

使用有状态小部件并将您应用的当前数据保存在某处。

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