generic하게 StateNotifier를 사용하고 싶었다.
provider에서 서로 다른 데이터 타입으로 init을 해주고, 해당 데이터 타입을 super class로 묶어서 만들어줬다.
class SelectorNotifier extends StateNotifier<List<Selector>> {
final ref;
List<Selector> _originalData = [];
SelectorNotifier(this.ref) : super([]);
void initDatas(List<Selector> datas) {
_originalData = datas;
state = datas;
}
Selector getSelector(int idx) {
return _originalData[idx + 1];
}
void updateDatas(String query) {
List<Selector> newData = [];
for (final data in _originalData) {
if (data.name.contains(query)) {
newData.add(data);
}
}
state = newData;
}
}
final locationSelectorProvider =
StateNotifierProvider.autoDispose<SelectorNotifier, List<Selector>>((ref) {
SelectorNotifier notifier = SelectorNotifier(ref);
notifier.initDatas(locationData);
return notifier;
});
final difficultySelectorProvider =
StateNotifierProvider.autoDispose<SelectorNotifier, List<Selector>>((ref) {
SelectorNotifier notifier = SelectorNotifier(ref);
notifier.initDatas(difficultyData);
return notifier;
});