首页 > 解决方案 > 单击 TextField 后小部件重建

问题描述

我有一个问题,当我单击 TextField 时,整个小部件会重新加载。我不希望这种情况发生。尝试了很多方法,但无法找到解决方案。我正在 Android 设备上运行该应用程序。

class Testextends StatefulWidget {
  @override
  _TestState createState() => _TestState();
}

class _TestState extends State<Test> {
   final _search = TextEditingController();
   static final  GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState>();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      key: _scaffoldKey,
      appBar: AppBar(
        title: Container(
          height: 45,
          width: MediaQuery.of(context).size.width * 0.9,
          child: Row(
            children: <Widget>[
              Expanded(
                child: TextField(
                  decoration: InputDecoration(
                    focusedBorder: OutlineInputBorder(
                      borderRadius: BorderRadius.all(
                        Radius.circular(30.0),
                      ),
                      borderSide: BorderSide(color: Colors.grey[400]),
                    ),
                    border: OutlineInputBorder(
                      borderRadius: BorderRadius.all(
                        Radius.circular(30.0),
                      ),
                    ),
                    labelStyle: TextStyle(color: Colors.grey[400], fontSize: 15),
                    labelText: 'Search...',
                  ),
                  controller: _search,
                  onSubmitted: (_) => search(),
                ),
              ),
        ],
      ),
    ),
  ),
  body: Text('Test Body'),
);
  }
}

谁能告诉我为什么会这样?

标签: flutterflutter-layout

解决方案


我认为使用MediaQuery会导致这种行为,因为每次尺寸更改时 MediaQuery 都会重建小部件。键盘一打开,尺寸就会发生变化。


推荐阅读