^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 に第2の型引数が必要になりました。 StateNotifier の型に続き、その 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 のステート(状態)を監視するには、
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
使用方法
それでは、実際にコマンドラインツールを使用してプロジェクトの移行を行ってみましょう。
- まず、新バージョンへ移行したいプロジェクトをターミナルで開きます。
- 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 を押します。