[Flutter] Riverpod provider generic하게 사용하기

bluejoy·2022년 8월 21일
0

Flutter

목록 보기
6/15

문제

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;
});
profile
개발자 지망생입니다.

0개의 댓글