주요 콘텐츠로 건너뛰기

^0.13.0에서 ^0.14.0

리버팟 0.14.0 버전이 출시되면서, StateNotifierProvider 사용 구문이 변경되었습니다. (자세한 설명은 https://github.com/rrousselGit/riverpod/issues/341 참조)

전체 문서에 대해서는 다음 StateNotifier를 참조하세요:

class MyModel {}

class MyStateNotifier extends StateNotifier<MyModel> {
MyStateNotifier(): super(MyModel());
}

변경사항

  • StateNotifierProvider는 추가 제네릭 매개변수(extra generic parameter)를 받는데, 이 매개변수는 StateNotifier의 상태 타입이어야 합니다.

    이전:

    final provider = StateNotifierProvider<MyStateNotifier>((ref) {
    return MyStateNotifier();
    });

    변경후:

    final provider = StateNotifierProvider<MyStateNotifier, MyModel>((ref) {
    return MyStateNotifier();
    });
  • StateNotifier를 얻으려면, 이제 myProvider가 아닌 myProvider.notifier를 읽어야 합니다:

    이전:

    Widget build(BuildContext context, ScopedReader watch) {
    MyStateNotifier notifier = watch(provider);
    }

    변경후:

    Widget build(BuildContext context, ScopedReader watch) {
    MyStateNotifier notifier = watch(provider.notifier);
    }
  • StateNotifier의 상태를 수신(listen)하려면, 이제 myProvider.state 대신 myProvider를 읽어야 합니다:

    이전:

    Widget build(BuildContext context, ScopedReader watch) {
    MyModel state = watch(provider.state);
    }

    변경후:

    Widget build(BuildContext context, ScopedReader watch) {
    MyModel state = watch(provider);
    }

마이그레이션 도구를 사용하여 프로젝트를 새 구문으로 자동 업그레이드하기

버전 0.14.0에서는 프로젝트를 마이그레이션하는 데 도움이 되는 리버포드용 명령줄 도구가 출시되었습니다.

명령줄 설치하기

마이그레이션 도구를 설치하려면 다음을 실행합니다:

dart pub global activate riverpod_cli

이제 실행할 수 있을 것입니다:

riverpod --help

사용법

이제 명령줄이 설치되었으므로 사용을 시작할 수 있습니다.

  • 먼저 터미널에서 마이그레이션하려는 프로젝트를 엽니다.
  • Do not Riverpod을 업그레이드하지 마세요.
    마이그레이션 도구가 Riverpod의 버전을 업그레이드해 줍니다.
  • 프로젝트에 오류가 없는지 확인합니다.
  • 실행:
    riverpod migrate

그러면 도구가 프로젝트를 분석하고 변경 사항을 제안합니다. 예를 들면 다음과 같습니다:

Widget build(BuildContext context, ScopedReader watch) {
- MyModel state = watch(provider.state);
+ MyModel state = watch(provider);
}

Accept change (y = yes, n = no [default], A = yes to all, q = quit)?

변경을 수락하려면 Y를 누르면 됩니다. 변경을 거부하려면 n을 누르세요.