کار با شبکه در فلاتر | به زبان ساده
در زمان توسعه اپلیکیشنهای موبایل، کار با API-ها امری ناگزیر محسوب میشود. حال سؤال این است که روش صحیح استفاده از API در اپلیکیشنهای فلاتر چیست؟ در این مقاله به بررسی روش کار با شبکه در فلاتر میپردازیم و چند پروژه عملی را معرفی خواهیم کرد.
قبل از هر چیز، کدام REST API؟
پیش از آن که شروع به کار روی پروژههای فلاتر بکنیم، باید API خود را راهاندازی بکنیم. در این مثال، از API مربوط به OpenWeatherMap استفاده میکنیم. با کلیک روی این لینک (+) و ثبت نام در وبسایت مربوطه یک API_KEY به دست میآورید که برای ارسال فراخوانیهای API مورد نیاز است. پس از ثبت نام در وبسایت OpenWeatherMap و دریافت کلید API میتوانید شروع به پیکربندی اپلیکیشن فلاتر بکنید.
شروع Retrofit
فرض میکنیم شما از قبل یک پروژه فلاتر دارید که آن را راهاندازی و اجرا کردهاید. در این بخش نخستین وابستگی را به فایل pubspec.yaml اضافه میکنیم تا کلاینت API خود را راهاندازی کنیم:
dependencies: dio: 3.0.9 retrofit: 1.3.4 dev_dependencies: retrofit_generator: 1.3.4+1 build_runner: 1.9.0
- Dio کلاینت Http ما است که اتصال را برای ما مدیریت میکند.
- Retrofit یک کلاینت Dio است که مصرف API-های REST را برای ما آسانتر میسازد.
- Build runner برای تولید کد در Dart استفاده میشود و جدا از pub است.
پس از اجرای دستور زیر میتوانید شروع به تنظیم کردن کلاینت بکنید:
flutter pub get
در ادامه یک کلاس جدید اضافه کرده و آن را به صورت RestApi با یک URL مبنا از طریق یک «حاشیهنویسی» (annotation) تعریف میکنیم.
- فایل ow_api.dart
به بخش part در زیر ایمپورتها توجه کنید. این بخش به منظور تولید کد استفاده میشود. در ادامه دستور زیر را اجرا میکنیم:
flutter packages pub run build_runner build
به این ترتیب از build runner استفاده میکنیم و کد را برای کلاینت خود در کلاسی که در part تعریف شده است، تولید خواهیم کرد. زمانی که بیلد رانر پایان یافت، آن را در همان پکیج به صورت کلاس API مشاهده میکنید. اینک تنظیم کلاینت API پایان یافته است.
تجزیه JSON: تعریف مدل
کار خود را با تعریف کردن مدل پاسخ پیش از پیادهسازی عملی فراخوانی API اول آغاز میکنیم.
ما روی پاسخ کامل این مثال تمرکز نمیکنیم، بلکه به جای آن به بخشی توجه خواهیم کرد که شامل دمای کنونی است:
بنابراین اکنون میدانیم که قرار است چیزی دریافت کنیم. در ادامه یک وابستگی برای شروع تجزیه پاسخ JSON اضافه میکنیم:
json_serializable: 3.3.0
اینک میتوانیم دست به کار ایجاد برخی کلاسها برای نمایش پاسخ بکنیم. کار خود را از کلاس پاسخ وضعیت آبوهوا آغاز میکنیم و کلاس دیگری برای بلوک اصلی میسازیم. کافی است هر فیلد را پیادهسازی کرده و کلاس را با ()JsonSerializable@ آغاز کنیم.
کافی است build runner را اجرا کنیم تا بتوانیم دمای کنونی را از پاسخ کنونی تجزیه کنیم.
افزودن فراخوانی API نخست
اینک به کلاینت خودمان بازمیگردیم. ما قصد داریم از یک درخواست GET برای واکشی دمای کنونی استفاده کنیم.
با مراجعه به مستندات API میبینیم که باید برخی هدرها را به درخواست خود اضافه کنیم و همچنین یک پارامتر کوئری برای موقعیت مکانی مورد تقاضا داشته باشیم. خوشبختانه Retrofit اجرای این کار را برای ما بسیار آسان ساخته است.
قطعه کد فوق کاملاً گویا است. ما میتوانیم از یک «حاشیهنویسی» (Annotation) برای تعریف کردن نوع درخواستی که میخواهیم ارسال کنیم (GET ،POST ،PUT و غیره)، بهره بگیریم. با استفاده از یک حاشیهنویسی میتوانیم هدرهای اضافی را افزوده و پارامترهای حاشیهنویسی شدهای را برای تعریف یک پارامتر کوئری اضافه کنیم. اغلب کاربردها باید پوشش داده شوند. با مراجعه به مستندات (+) میتوانید ببینید که چطور با نیازهای شما تطبیق مییابد.
تعریف کردن هدرها برای هر فراخوانی یک کار تکراری است و از این رو باید Dio را طوری پیکربندی کنید که همه کارهای عمومی را تا حد امکان شامل شود.
ارسال فراخوانی
در واقع ما قبلاً این کار را انجام دادهایم. اینک کافی است همه چیز را مقداردهی کنیم تا فراخوانی به صورت عملی انجام یابد.
بهتر است از یک service locator برای دریافت وابستگی مانند Dio یا کلاینت API در سراسر پروژه بهره بگیریم و مطولبتر است از Get it (+) برای آن استفاده کنیم. Retrofit پیادهسازی فراخوانها را بسیار آسان ساخته است، تبدیل نوع خودکار نیز مزیت خوبی نسبت به مدیریت همه چیز از طریق Dio دارد.
سخن پایانی
به این ترتیب به پایان این مقاله با موضوع کار با شبکه در فلاتر میرسیم و امیدواریم این مطلب مورد توجه شما قرار گرفته باشد. هر گونه دیدگاه و یا پیشنهادهای خود را در بخش نظرات این نوشته با ما و دیگر خوانندگان مجله فرادرس در میان بگذارید.
خیلی ممنون بسیار مفید بود
لطفا از این دسته مقالات فلاتری بیشتر بذارید