Я пробовал много способов сделать это, и все они работают нормально, но за исключением того, что я потратил много времени, пытаясь добиться результата с требуемой формой состояния, моя проблема с дротиком - многословие языка для записи состояния для настроек пользователя / панели инструментов, скажем:
Я хочу иметь настройки для страницы панели мониторинга, страница панели инструментов имеет несколько разделов:
- Сегодня / Последний
- Неделя
- Месяц
- Исторический c
И у каждого из них должно быть разное состояние, скажем:
- isPinned,
- sortType,
- filterType,
- orderType,
состояние должно быть доступно следующим образом:
state.preferences.dashboard.section.week.isPinned //, .sortType, .filterType, .orderType, .etc...
Это можно сделать, используя почти 4 класса, хорошо, я могу это сделать,
but now, the requirement changed and the preferences of the sort (ASC/DESC) should belong to each filter selected..., to do that, I had to change again the shape of the state to fulfill the requirement, for example:
state.preferences.dashboard.section.week.filter.created.sort
Теперь мне нужно работать с 6 классов для управления всем состоянием настроек, и это сложно! К счастью, redux - хороший шаблон для управления состоянием, и все, кажется, лог c, но я боюсь, сколько предпочтений будет у приложения, изменить что-то на этом этапе - это немного обескураживает.
Представьте себе теперь, когда я использую пакет redux_persist и состояние должно быть сериализовано в формате json, теперь вам нужно умножить количество файлов x2, потому что я генерирую сопоставители json с помощью пакета json_serializer, и это меня начинает пугать, У меня почти 14 классов только для этих настроек.
Было бы неплохо иметь что-то вроде карт, используемых в JavaScript, потому что я могу легко формировать состояние таким образом:
final preferences = <String, dynamic>{
'dashboard': {
'section': {
'today': {
'filter': {
'created': {
'sort': 'asc',
},
'canceled': {
'sort': 'desc',
},
'delivered': {
'sort': 'asc',
},
},
},
'week': {
'filter': {
'created': {
'sort': 'asc',
},
'canceled': {
'sort': 'desc',
},
'delivered': {
'sort': 'asc',
},
},
},
'month': {
'filter': {
'created': {
'sort': 'asc',
},
'canceled': {
'sort': 'desc',
},
'delivered': {
'sort': 'asc',
},
},
},
'historic': {
'filter': {
'created': {
'sort': 'asc',
},
'canceled': {
'sort': 'desc',
},
'delivered': {
'sort': 'asc',
},
},
},
}
}
}
Но если я использую карты для управления состоянием из redux, я теряю преимущества набора, и это дилемма для меня, потому что мне нравятся типы, в JavaScript с помощью TypeScript я могу получить тот же результат, но с меньшими затратами усилий к природе этого языка.
Может ли кто-нибудь здесь подсказать мне лучшую стратегию управления состоянием приложения при гриппе tter без всех этих файлов (и я показываю только некоторые файлы на этом изображении, потому что мне нужно поместить несколько классов в один файл, чтобы избежать множества файлов).