このチャプターの目次
2022年6月1日、最終確認
2.0.0-dev.9
-
cacheTime
/disposeDelay
を使用してProviderContainer
を破棄する際のタイマーリークが修正されました。
2.0.0-dev.8
- ネストした
ProviderScope
をアンマウントすると例外が発生するバグが修正されました。
2.0.0-dev.7
- 最小要求Dartバージョンが
2.17.0
になりました。 - 最小要求Flutterバージョンが
3.0.0
になりました。
2.0.0-dev.6
-
ConsumerStatefulWidget/ConsumerState
のinitState
等の使用を想定するWidgetRef.listenOnce
が追加されました。 - エラーを無視して値を取得するために
AsyncValue.valueOrNull
を追加されました。 -
AsyncValue.value
がエラーがあるにも関わらすThrowしない問題が修正しました。 -
FamilyProvider
でcacheTime/disposeDelay
が適用されない問題が修正されました。 -
KeepAliveLink
がキャンセルされた後、非同期で例外がThrowされる場合がある不具合が修正されました。
2.0.0-dev.5
-
AsyncError
の後にAsyncData
が発行されてもAsyncValue.hasError
がtrue
になってしまう不具合が修正されました。
2.0.0-dev.4
- Scopeの親を手動でオーバーライドできる
ProviderScope.parent
が追加されました。
モーダルやダイアログがScopedなプロバイダにアクセスできるようにするために使用できます。 - プロバイダの変更をそのプロバイダ内で購読するための
ref.listenSelf
が追加されました。
「ログ出力」や「データベースにプロバイダの状態を保存する」といったユースケースに使用できます。 - すべての
autoDispose
プロバイダとProviderScope/ProviderContainer
にdisposeDelay
が追加されました。
プロバイダへの監視(購読)が無くなってからプロバイダが破棄されるまでの遅延時間を設定できます。 -
providerContainer.invalidate(provider)
,ref.invalidate(provider)
,ref.invalidateSelf()
が追加されました。
ref.refresh
より安全で、プロバイダをすぐに再構築しないのでプロバイダが2回連続で再構築されるのを避けることができます。 -
cacheTime
に渡されたDurationの挙動が以下のように変更になりました。
変更前:プロバイダが最初に構築されたときの最小時間 変更後:プロバイダの最新の変更後の最小時間 - プロバイダが誤って自分自身に依存し、
autoDispose
が壊れる問題が修正されました。 -
StateNotifier.autoDispose
のstate
を使用した際のメモリリークが修正されました。 -
ProviderObserver.didDisposeProvider
がプロバイダのリフレッシュ時に実行されない問題が修正されました。
2.0.0-dev.3
- プロバイダ内で
ref.listen
を実行しており、依存関係の1つが変更された場合に、そのプロバイダが適切に再構築されるようになりました。
2.0.0-dev.2
-
ref.maintainState = true/false
が非推奨となり、新たにref.keepAlive()
が追加されました。
ref.keepAlive()
関数は、各Providerの状態を一定期間維持したい複数のロジックがある場合にうまく処理されます。 - 非推奨の
ProviderReference
が削除されました。 -
ProviderContainer.cacheTime
とMyProvider.autoDispose(_, cacheTime: duration)
が追加されました。
参照されなくなったautoDispose
Providerを指定した時間生存させられます。(デフォルト値:Duration.zero
) -
ref.onAddListener
が追加されました。
新しいリスナーがプロバイダに追加されるたびに実行するコールバックを追加できます。 -
ref.onRemoveListener
が追加されました。
リスナーがプロバイダから削除されたときに実行するコールバックを追加できます。 -
ref.onCancel
が追加されました。
プロバイダの最後のリスナーが削除されたときに実行するコールバックを追加できます。 -
ref.onResume
が追加されました。
プロバイダの最後のリスナーが削除された(ref.onCancel
の実行)後、再びリスニングされるときに実行するコールバックを追加できます。
2.0.0-dev.1
-
Dart 2.16
が必須になりました。 - プロバイダの値構築中に例外が発生しても
ProviderException
がスローされないようになり、代わりに発生した例外とスタックトレースを再スローするようになりました。 -
AsyncValue
のisError
,isData
が削除されました。 -
AsyncValue
にhasError
,hasData
が追加されました。 -
AsyncValue
に、AsyncValue
を複製して1つ前の値とマージするcopyWithPrevious
が追加されました。
これにより、AsyncData
がエラーを含んだり、AsyncError
が値を含むことができるようになります。AsyncLoading
の前がAsyncData
,AsyncError
だった場合は、isLoading
がtrue
のAsyncData/AsyncError
になります。 - 非同期の値を待ちながら、再構築のフィルタリングもできる
provider.selectAsync
が追加されました。 - プロバイダが
AsyncError
に続いてAsyncData
を発行するとき、そのAsyncData
に最新のerror/stackTrace
が含まれるようになりました。 - より具体的なプロバイダタイプでプロバイダをオーバーライドする際のキャストエラーが修正されました。
-
autoDispose
使用時、特定の条件下でonDipose
が2回実行されることがある不具合が修正されました。
2.0.0-dev.0
- プロバイダが
AsyncData
またはAsyncError
を発行した後、そのプロバイダはもうAsyncLoading
を発行しないようになりました。
その代わりに最新の値を再発行しますが、AsyncValue.isRefreshing
はtrue
に設定されます。
この変更により、プロバイダがリフレッシュされても、UIは以前のデータやエラーを表示し続けることができます。 -
AsyncValue
にisLoading
,,isError
,isData
asError
が追加されました。
これらを使えうとパターンマッチングすることなく AsyncValue の状態を確認できます。 -
provider.future
,provider.stream
のリフレッシュが正しく動作していなかった問題が修正されました。 -
ref.watch
で発生する可能性のあったassert
の誤検出が修正されました。