Родительский LayoutBuilder вызывается слишком часто, каждый раз, когда происходит изменение в TextField - PullRequest
0 голосов
/ 31 марта 2020

Я вижу отпечатки "звонил" каждый раз, когда фокусируюсь на текстовом поле, вводю или удаляю новый символ. Мое настоящее дерево виджетов содержит список с его плитками, имеющими анимацию, которые не работают должным образом из-за того, что весь вид списка воссоздается после изменения положения прокрутки. Так как же мне по-прежнему использовать то, что может предложить LayoutBuilder, то есть constraints данные, без перестройки всего дочернего дерева после того, как что-то изменится?

class _AppState extends State<App> with AfterLayoutMixin<App>
{
  AppCoordinator appCoordinator;
  @override
  Widget build(BuildContext context)
  {
    return Scaffold(
        key: Key("sadf"),
      body: new LayoutBuilder(
          key: Key("sadd"),
          builder: (context, constraint)
      {
        print("called");
        return TextField(
          key: Key("sad")
        );
      }),
    );
  }
}

1 Ответ

0 голосов
/ 31 марта 2020

Можно предположить, что методы сборки будут вызываться излишне. Если это проблема, используйте виджет с сохранением состояния и кэшируйте виджет, который вы возвращаете из сборки.

class _FooState extends State<Foo> {
  Widget _child;
  Widget build(BuildContext context) {
    _child ??= Container();
    return _child;
  }
}

Может использоваться вместе с Layout Builder.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...