#flutter #dart #state
#флаттер #dart #состояние
Вопрос:
У меня есть Scaffold
виджет с отслеживанием состояния, где body
содержится список объектов с различными свойствами (например, обувь или автомобили) и Drawer
виджет, который сначала пуст, за исключением двух кнопок внизу («Отмена» и «Фильтр») и FAB. Пользователь может добавлять различные фильтры с помощью FAB (например, пользователь может добавить фильтр размера обуви или цветовой фильтр).
Проблема, с которой я сталкиваюсь, заключается в следующем: допустим, пользователь выбирает различные фильтры и работает с ними (т. Е. Устанавливает флажки, вводит размер обуви, меняет ползунки и т.д.). Когда пользователь готов применить фильтры, он может нажать кнопку «Фильтр», которая закрывает Drawer
( onTap -> callback -> Navigator.of(context).pop()
). Но когда пользователь хочет вернуться, снова открыть Drawer
и настроить один из фильтров, это, очевидно, не работает, поскольку виджет перестраивается с нуля.
В настоящее время фильтрация работает так, что после нажатия кнопки «Фильтр» все различные значения из добавленных фильтров собираются в объект FilterPackage
, который затем передается через callback
в Scaffold
виджет, который затем применяет значения из FilterPackage
к списку объектов. Одним из решений, которое я придумал, было бы передать этот FilterPackage
объект Drawer
виджету в его конструкторе, который предоставил бы всю информацию, необходимую для восстановления виджета таким, каким он должен быть.
Это разумное решение? Я уже провел некоторое исследование, но с трудом нашел решение о том, что, несомненно, было бы лучшим и рекомендуемым способом сохранения состояния ящика. Использование PageStorage
/ PageStorageBucket
кажется чрезмерно сложным для этого случая. Или я ошибаюсь?
Заранее спасибо за любые рекомендации.
Комментарии:
1. Вы говорите о постоянном управлении состоянием приложения. Для этого не существует «четкого наилучшего и рекомендуемого способа». Существует множество различных пакетов и шаблонов, которые вы могли бы использовать для выполнения этого, и все они одинаково действительны (более или менее). Вопрос о том, хорошо это или плохо, заключается не в том, какой шаблон использовать, а в том, как вы реализуете конкретный шаблон. (И чтобы критиковать это, нам нужно было бы увидеть код.)