ویرگول
ورودثبت نام
Adnan Kamali | عدنان کمالی
Adnan Kamali | عدنان کمالیمن عدنان کمالی چاهوئی هستم و برنامه نویس و درحال تبدیل شدن به مهندس کامپیوتر
Adnan Kamali | عدنان کمالی
Adnan Kamali | عدنان کمالی
خواندن ۳ دقیقه·۶ ماه پیش

استفاده از Dio Interceptor در فلاتر

کار با dio interceptors در فلاتر
کار با dio interceptors در فلاتر

توی پست قبلی درمورد Retrofit (رتروفت) در فلاتر صحبت کردیم که میاد کارمون رو توی درخواست های HTTP راحتتر میکنه حالا یکم با رهگیری درخواست ها توی دیو فلاتر آشنا بشیم تا بتونیم بهتر درخواست هامون رو رهگیری کنیم

کار Dio Interceptor چیه اصلا؟

این Interceptor یه نوع میدلور هم محسوب میشه که می تونیم روی درخواست ها، پاسخ ها و ارور ها قبل از اینکه هندل بشن دخالت کنیم برای مثال یه وقتایی هست که اپلیکیشن ما احراز هویت بیس هست یعنی تا کاربر ثبت نام نکنه و توکن به ما نده نمیتونه از برنامه استفاده کنه و حالا اگر بخوایم توکن هر دفعه که درخواست میدیم به هدر پاس بدیم توی پروژه های بزرگ خیلی جالب نیست (یا بهتره بگم به نوعی اصول DRY یا همون خودت رو تکرار نکن رو به نوعی رعایت نکردیم)

خب راه حل این استفاده از رهگیر توی دیو هست که با دو مثال برات روشن میکنم

چطوری یه Dio Interceptor بسازیم

برای ساخت رهگیر (Interceptor) کافیه از کلاس Interceptor ارث بری کنیم یا همون اکستند کنیم و متود های مورد نیاز مون که شامل موارد زیر هست اوراید (override) کنیم

  • void onRequest(RequestOptions options, RequestInterceptorHandler handler)
  • void onResponse(Response response, ResponseInterceptorHandler handler)
  • Future (DioException err, ErrorInterceptorHandler handler)
import 'package:dio/dio.dart'; class CustomInterceptors extends Interceptor { @override void onRequest(RequestOptions options, RequestInterceptorHandler handler) { print('REQUEST[${options.method}] => PATH: ${options.path}'); super.onRequest(options, handler); } @override void onResponse(Response response, ResponseInterceptorHandler handler) { print('RESPONSE[${response.statusCode}] => PATH: ${response.requestOptions.path}'); super.onResponse(response, handler); } @override Future (DioException err, ErrorInterceptorHandler handler) async { print('ERROR[${err.response?.statusCode}] => PATH: ${err.requestOptions.path}'); super.onError(err, handler); } }

برای مثال من توکن دارم به این توکن هست مثلا "Adnan Kamali" و میخوام هربار که دیو درخواستی ارسال میکنه این توکن توی هدر (Header) بره که برای این کار متود onRequest رو باز نویسی میکنم که میشه

@override void onRequest(RequestOptions options, RequestInterceptorHandler handler) { options.headers['Authorization'] = 'Adnan Kamali'; // <- به هدر اضافه شد super.onRequest(options, handler); }

یا مثلا یه وقتی هست که کاربر احراز هویت کرده ولی اکسس توکنش منقضی شده و ارور 401 میده که باید بریم از ریفرش توکن استفاده کنیم برای گرفتن اکسس توکن، که این هم توی متود قابل هندل هست

@override Future (DioException err, ErrorInterceptorHandler handler) async { if(err.response?.statusCode == 401){ // درخواست بزن به سرور و اکسس رو بگیر // اکسس رو گرفتیم // دوباره اکسس رو توی هدر قرار میدیم و درخواست رو دوباره میفرستیم قبل از اینکه هندل کنیم ارور رو // یادت نره که اکسس رو ذخیره کنی که توی ریکوئست از اکسست دوباره استفاده کنی err.requestOptions.headers['Authorization'] = 'Adnan Kamali'; return handler.next(err); } super.onError(err, handler); }

خب اینجا چون معمولا از دیپندنسی اینجکشن برای ریپازیتوری هامون استفاده میکنیم میتونیم از همون Get_it برای گرفتن توکن ها در اینجا استفاده کنیم و به همین سادگی نیازی نیست دیگه هر دفعه توکن رو به عنوان پارامتر به ریپازیتوری ها بدی

حالا چطوری از این رهگیر دیو استفاده کنم

برای اینکه بتونیم از این رهگیر استفاده کنیم کافیه بعد ساخت متود سازنده دیو (کانستراکتور) اون رو اضافه کنی به دیو

  • یه نکته اینکه میتونی لیستی از رهگیر هارو بهش اضافه کنی
final dio = Dio(); dio.interceptors.add(CustomInterceptors ());

و کار تمومه حالا اگر از متغییر dio برای ارسال درخواست هات استفاده کنی اون رهگیره برات کار میکنه

هدف من از این نوشته آشنایی با Dio Interceptor هست که میتونید برای جزئیات بیشتر به وبسایتش که منبع استفاده من هست مراجعه کنید یعنی pub.dev

امیدوارم که لب مطلب رو رسونده باشم

منبع من برای این نوشته

pub.dev

Adnan Kamali | عدنان کمالی

dry
۱
۰
Adnan Kamali | عدنان کمالی
Adnan Kamali | عدنان کمالی
من عدنان کمالی چاهوئی هستم و برنامه نویس و درحال تبدیل شدن به مهندس کامپیوتر
شاید از این پست‌ها خوشتان بیاید