打开键盘时如何防止小部件重建

How can I prevent the widget rebuilding when opening the keyboard

我有主要 StatefulWidget,其中包含几个 StatefulWidgetTabBarView 喜欢关注

    class MyNainClass extends StatefulWidget {
  const MyNainClass({Key? key}) : super(key: key);

  @override
  State<MyNainClass> createState() => _MyNainClassState();
}

class _MyNainClassState extends State<MyNainClass> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        actions: [
          TextField() // here is the problem 
        ],
      ),
      body: TabBarView(
        children: [
          // Here i have several `StatefulWidget` as tabs like 4 ones
          // Note: that per claas is contains heavy work code  !
          MyStatefulWidget1(),
          MyStatefulWidget2(),
          MyStatefulWidget3(),
          MyStatefulWidget4(),
      ),
    );
  }
}

好吧,现在每次用户在 TextField 上按 tab 键然后键盘弹出,这会导致小部件重建,这意味着我所有 类 进入 TabBarView 也会重建。

事实上,即使用户选择了任何其他 TextField,它也会重建整个 类。

在我研究了很多提供程序并且我完全没有使用 setState 让我的应用程序性能良好之后,这让我感到非常失望。

我已经阅读了很多与我类似的问题,但看起来这个问题没有解决方案

发生这种情况是因为 Scaffold 取决于 MediaQuesry 导致键盘屏幕的大小调整更多。 我尝试将 resizeToAvoidBottomInset 设置为 false,但它仍然不能阻止弹出键盘时不需要的重建。

我的 AppBar 搜索栏在我的应用程序中非常活跃,我无法想象如果用户每次都在我有大 类 也将重建。

任何解决键盘弹出时如何防止小部件重建的解决方案都是最受欢迎的 谢谢

您尝试过使用“const TabBarView(...”吗?