^0.13.0에서 ^0.14.0
Riverpod 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에서는 프로젝트를 마이그레이션하는 데 도움이 되는 Riverpod용 명령줄 도구가 출시되었습니다.
명령줄 설치하기
마이그레이션 도구를 설치하려면 다음을 실행합니다:
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을 누르세요.