#flutter
#flutter
Вопрос:
Я наблюдал некоторое странное поведение при использовании TextEditingController
и FocusNode
в сочетании с StreamBuilder
, а именно:
Text
внутри aTextField
очищается при отмене выбора текстового поля- Одновременно в двух отдельных текстовых полях активны две каретки ввода
Это происходит, когда выполняются все следующие условия:
- Виджет без состояния создает свой собственный
TextEditingControllers
иFocusNodes
. - Они используются в некоторых
TextField
виджетах. - Метод сборки виджета без состояния возвращает a
StreamBuilder
, который перестраивает содержимое виджета (включаяTextFields
), когда новые значения передаются в поток. - Виджет без состояния представлен как MaterialPageRoute .
ПРИМЕЧАНИЕ: если виджет без состояния не отображается, но отображается непосредственно при запуске приложения, проблема не появляется.
Ответ №1:
Проблема была с моей стороны. Проблема заключалась в том, что я сохранял объекты внутри a StatelessWidget
.
Вы не должны.
Открытие клавиатуры приводит к перестройке всего экрана (и это нормально). Но в моем случае перестройка приведет TextEditingController
к тому, что вы будете GCed, потому что вы сохранили их внутри StatelessWidget
Итак, причина, по которой это работает, StatefulWidget
заключается в том, что состояние сохраняется даже при перестроении, поэтому я могу использовать его для удержания моего TextEditingControllers
.