final messageProvider = Provider.family<Message, String>((ref, messageId) {
final message = ref
.read(messageRepositoryProvider)
.fetchByMessageId(messageId: messageId);
return message;
});
.familyとするとProviderで引数を使用することができ、memoIdごとのProviderが作成されます。
一度初期化メソッドが呼び出されると取得した値がキャッシュされ、それ以降の呼び出しではキャッシュされた値が提供されますが、再度値を取得し直したいタイミングがあるかと思います。
ref.invalidate(messageProvider);
.invalidateするとproviderを初期化することができますが、すべてのmessageProviderが初期化されてしまいます。
特定のmessageIdを持つProviderのみ初期化したいときは
ref.invalidate(memoId);
としてあげると、他のProviderを初期化することなく特定のProviderのみ初期化することができます。