Перестроение дерева виджетов с использованием FocusScope.of(context).unfocus()

#flutter #keyboard #rebuild

#flutter #клавиатура #перестроить

Вопрос:

У меня есть этот пример:

 @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: SafeArea(
        child: Padding(
          padding: const EdgeInsets.all(30),
          child: GestureDetector(
            onTap: () {
              print('Hide keyboard!!!');
              FocusScope.of(context).unfocus();
            },
            child: Column(
              children: [
                Text(DateTime.now().toIso8601String()),
                TextFormField()
              ],
            ),
          ),
        ),
      ),
    );
  }
  

Когда клавиатура появляется или скрыта, это приводит к перестройке виджета. Почему это происходит?

Ответ №1:

На самом деле, я не смог найти причину перестройки после использования

 FocusScope.of(context).unfocus();
  

Но это поможет вам остановить перестроение виджета.

 FocusManager.instance.primaryFocus.unfocus();
  

Это работает в моем приложении.

Комментарии:

1. У меня это тоже работает с TextFormField … используя FocusScope.of(context).unfocus(); , я бы видел случайные перерисовки дерева виджетов и даже мог иногда попадать в состояние, когда было невозможно перефокусировать виджет.