TextFormField не сбрасывает свое начальное значение - PullRequest
1 голос
/ 05 ноября 2019

Я немного новичок в Flutter, поэтому я не знаю, является ли это "правильным" способом обновления данных, собранных с сервера. В моем случае то, что я делаю, - это (мой код приложения довольно длинный, я думаю, что приведенного ниже описания будет достаточно):

  1. Позвольте пользователю создать пользовательскую форму для данной даты.
  2. Пусть он загрузит данные на сервер (точнее, Firebase).
  3. Если он щелкнет по дате, форму следует обновить до самой последней, сохраненной на Firebase.
    • Для этого я удаляю все виджеты TextFormField (они содержатся в Map, который я сбрасываю с помощью widgetsMap = {}, что я также делаю для самих данных формы)и перестроить их с использованием данных, извлеченных из Firebase.
    • . TextFormField должен иметь начальное значение на основе того, что было извлечено из Firebase. Чтобы добиться этого, я пытался использовать controller и initialValue, но ни один из них не сработал.
      • Проблема заключается в том, что, если я захочу обновить начальное значение поля во второй раз, предыдущее останется. Например, если date 1 имеет начальное значение Hello, а date 2 имеет начальное значение World;когда я нажимаю date 2 из date 1, хотя виджеты TextFormField (их может быть и другое количество) будут построены правильно, показанное начальное значение все равно будет Hello.

Так что же происходит? Разве initialValue виджета не должен быть уничтожен после того, как виджет и данные были сброшены? Эти объекты все еще существуют где-то в фоновом режиме, даже после того, как я сбросил их с = {} (я думал, что, поскольку dart является языком для сбора мусора, эти объекты будут удалены, как только исчезнут ссылки на них ...)

1 Ответ

1 голос
/ 05 ноября 2019

Добавить Key к TextFormField. Вы можете использовать Key(initialValue). Например:

TextFormField(
  key: Key(widget.initialValue),
  initialValue: widget.initialValue),
  ...
)

Несмотря на то, что вы сбросили собственную карту TextFormField с, если вы поместите новые TextFormField с в ту же позицию в дереве виджетов, структура Flutter будет повторно использовать предыдущее состояние,Установка Key скажет Flutter, что это другой виджет.

...