Сохранение состояния ящика в режиме Flutter

#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. Вы говорите о постоянном управлении состоянием приложения. Для этого не существует «четкого наилучшего и рекомендуемого способа». Существует множество различных пакетов и шаблонов, которые вы могли бы использовать для выполнения этого, и все они одинаково действительны (более или менее). Вопрос о том, хорошо это или плохо, заключается не в том, какой шаблон использовать, а в том, как вы реализуете конкретный шаблон. (И чтобы критиковать это, нам нужно было бы увидеть код.)