不要になった通信処理をキャンセルするにはDioのCancelTokenを使用します。
例は下の通りです。
// CancelTokenをインスタンス化
final cancelToken = CancelToken();
// 通信処理にcancelTokenを使用
final response = await Dio().get('Request URL', cancelToken: cancelToken);
--------------------------------------------------------------------------
// 通信処理をキャンセル
cancelToken.cancel();
プロバイダが通信中に破棄されたとき、不要になった通信処理をキャンセルする例は下の通りです。
// .autoDispose修飾子を付け加えたプロバイダを作成
final fetchProvider = FutureProvider.autoDispose((ref) async {
final cancelToken = CancelToken();
final response = await Dio().get('Request URL', cancelToken: cancelToken);
// プロバイダが破棄される直前に通信処理をキャンセル
ref.onDispose(cancelToken.cancel);
return response.data;
});
Refの拡張機能を使用するとプロバイダ間でロジックを再利用でき、簡潔にコードを書くことができます。
extension RefExtension on Ref {
CancelToken cancelToken() {
final cancelToken = CancelToken();
onDispose(cancelToken.cancel);
return cancelToken;
}
}
final fetchProvider = FutureProvider.autoDispose((ref) async {
// 拡張機能を使用
final cancelToken = ref.cancelToken();
final response = await Dio().get('Request URL', cancelToken: cancelToken);
return response.data;
});
🥺 DioとRiverpodはとても相性がいいですね 🥺
可茂IT塾ではFlutterインターンを募集しています!可茂IT塾のエンジニアの判断で、一定以上のスキルをを習得した方には有給でのインターンも受け入れています。
Read More可茂IT塾ではFlutterインターンを募集しています!可茂IT塾のエンジニアの判断で、一定以上のスキルをを習得した方には有給でのインターンも受け入れています。
Read More