Flutter Riverpod v2.1.3からv2.3.5にアップデートしたら、’state’ is deprecated and shouldn’t be used. Will be removed in 3.0.0. という警告が出たため修正した。

Flutter

Flutterをアップデートして、

[✓] Flutter (Channel stable, 3.3.10, on macOS 13.3.1 22E261 darwin-arm, locale en-JP)

から

[✓] Flutter (Channel stable, 3.7.12, on macOS 13.3.1 22E261 darwin-arm64, locale en-JP)

にして、flutter pub upgradeしたところ、大量の警告が出たため、その修正の備忘録。

大量の警告は、

‘state’ is deprecated and shouldn’t be used. Will be removed in 3.0.0. Use either ref.watch(provider) or ref.read(provider.notifier) instead.
Try replacing the use of the deprecated member with the replacement.

であった。これは、riverpodがv2.1.3からv2.3.5になったことが要因。

対象のコードは、

ref.watch(xxxProviderData.yyyIndex.state).state = index;

としており、xxxProviderData.yyyIndex.stateのstateがdeprecatedとのことだった。

これは、

ref.watch(xxxProviderData.yyyIndex.notifier).state = index;

とすればOKだった。

Google Bardの解説は以下の通り。

Here is a more detailed explanation of the difference between the state and notifier properties:

The state property is a read-only property that returns the current state of the provider.
The notifier property is a read-write property that returns a StateNotifier object that can be used to update the state of the provider.
In your case, you need to be able to update the state of the provider, so you should use the notifier property instead of the state property.

大量の警告だったため、正規表現を使った一括置換で修正することにした。
VSCodeにて、
検索ワード:(ref.watch.*)(\.state)(\).state)
置換ワード:$1.notifier$3
とした。

コメント

タイトルとURLをコピーしました