Текст очищается при использовании TextEditingController и StreamBuilder

#flutter

#flutter

Вопрос:

Я наблюдал некоторое странное поведение при использовании TextEditingController и FocusNode в сочетании с StreamBuilder , а именно:

  • Text внутри a TextField очищается при отмене выбора текстового поля
  • Одновременно в двух отдельных текстовых полях активны две каретки ввода

Это происходит, когда выполняются все следующие условия:

  • Виджет без состояния создает свой собственный TextEditingControllers и FocusNodes .
  • Они используются в некоторых TextField виджетах.
  • Метод сборки виджета без состояния возвращает a StreamBuilder , который перестраивает содержимое виджета (включая TextFields ), когда новые значения передаются в поток.
  • Виджет без состояния представлен как MaterialPageRoute .

ПРИМЕЧАНИЕ: если виджет без состояния не отображается, но отображается непосредственно при запуске приложения, проблема не появляется.

Ответ №1:

Проблема была с моей стороны. Проблема заключалась в том, что я сохранял объекты внутри a StatelessWidget .

Вы не должны.

Открытие клавиатуры приводит к перестройке всего экрана (и это нормально). Но в моем случае перестройка приведет TextEditingController к тому, что вы будете GCed, потому что вы сохранили их внутри StatelessWidget

Итак, причина, по которой это работает, StatefulWidget заключается в том, что состояние сохраняется даже при перестроении, поэтому я могу использовать его для удержания моего TextEditingControllers .