💻 آخرین فرصت یادگیری برنامه‌نویسی با آفر ویژه قبل از افزایش قیمت در ۵ آذر ماه (🎁 به همراه یک هدیه ارزشمند )
۰ ثانیه
۰ دقیقه
۰ ساعت
۳ رضا شاکری
تبدیل کردن اطلاعات بدست اومده از سرور
یلدا محصلی حل شده توسط یلدا محصلی

سلام وقت به خیر 

امیدوارم خوب باشید

مرسی از آموزش خوبتون

من چند تا سوال برم پیش اومده 

اولی اینه :

مگه اطلاعات بدست اومده از سرور رو خود Dio به فرم خوانا برای زبان دارت که همون List و Map هست تبدیل نمی‌کنه دوباره چه لزومی داره اینکارو کنیم ؟

(response.data as List<dynamic>)

 

دومی درباره عملگر as هستش یکمی توضیح دربارش میدید ؟

 

سومی اینه که من کد زیر رو :

  final response = await HttpClient.instance.get('experts/student');
  final List<StudentData> students = [];
  if (response.data is List<dynamic>) {
    (response.data as List<dynamic>).forEach((element) {
      students.add(StudentData.fromJson(element));
    });
  }
  return students;

 

به شکل زیر هم نوشتم کار کرد :

  final response = await HttpClient.instance.get('experts/student');
  final List<StudentData> students = [];
    response.data.forEach((element) {
      students.add(StudentData.fromJson(element));
    });
  return students;

 

من لزوم استفاده از اون عملگر‌ها رو درک نکردم در حالی میشد ازشون هم استفاده نکرد چون اولا خود Dio اون‌ها رو به List که برای زبان دارت قابل ترجمه باشه رو انجام میده و یه حالتی داره تبدیل از Json به فرمت خوانا برای دارت رو انجام میده ما دیگه دوباره چرا باید اینکارو کنیم؟

و اینکه حتما باید قبل دریافت اطلاعات از سرور باید براش کلاس مورد نظر رو بسازیم و نوعش رو مشخص کنیم ؟

رضا شاکری ۰۴ مرداد ۱۴۰۳، ۱۴:۰۴

سلام. سلامت باشید.

 

۱. response.data از نوع dynamic هست. برای دسترسی به متدهای لیست باید این اتفاق بیفته.

 

2. کلمه کلیدی as در زبان دارت برای تبدیل یک شیء به نوع خاصی استفاده می‌شود. این تبدیل به شما امکان می‌ده از ویژگی‌ها و متدهای نوع جدید استفاده کنید. اگر تبدیل ممکن نباشد، خطای زمان اجرا رخ می‌دهد.

 

۳. بله جواب میده اما همونطور که در قسمت ۲ اشاره کردم به propertyهاش دسترسی ندارید. مثلا اگه در کدی که نوشتید ctrl رو نگه دارید و پوینتر موس رو روی forEach نگه دارید، سورس اون رو پیدا نمیکنه. یا مابقی ویژگی‌ها رو بهتون پیشنهاد نمیده. درچنین مواردی تفاوتش نشون داده میشه. کدتون هم تمیز‌تر و خواناتر هست.

بهترین پاسخ
یلدا محصلی ۰۴ مرداد ۱۴۰۳، ۲۳:۴۶

ممنونم خیلی لطف کردید 

رضا شاکری ۰۵ مرداد ۱۴۰۳، ۱۰:۴۵