کاتلین با پیاده سازی فایل Standard.kt به تمامی کلاس ها این امکان را میدهد که از اسکوپ فانکشن ها استفاده کنند. اگر اسکوپ فانکشن ها رو دیکامپایل کنیم، توابع خاصی نیستند و به صورت ساده (با بررسی چند شرط) پیاده سازی شده اند.
کاتلین با پیاده سازی فایل Standard.kt به تمامی کلاس ها این امکان را میدهد که از اسکوپ فانکشن ها استفاده کنند. اگر اسکوپ فانکشن ها رو دیکامپایل کنیم، توابع خاصی نیستند و به صورت ساده (با بررسی چند شرط) پیاده سازی شده اند.
"گوگل پلی سرویس" یک لایه نرم افزاری است که اپلیکیشن های اندروید رو به سرویس های گوگل متصل میکنه. گوگل پلی سرویس همیشه در بک گراند در حال اجرا است و مسائلی مثل پوش نوتیفیکیشن، لوکیشن و اینا رو مدیریت می کنه. با توجه به نیازمون توی اپلیکیشن، از dependency مربوطه برای گوگل پلی سرویس استفاده می شه. مثلا:
dependency مپس:
"com.google.android.gms:play-services-maps:17.0.0"
dependency لوکیشن:
"com.google.android.gms:play-services-location:18.0.0"
لیست dependencyهای گوگل پلی سرویس
"گوگل موبایل سرویس (GMS)" یک سری از اپلیکیشن ها و APIهای گوگل هست که روی گوشی های اندرویدی نصب میشه (مثل کروم، جیمیل، یوتیوب، گوگل مپ و ...) و به عملکرد مناسب گوشی کمک میکنه.
در دیتابیس روم فقط primitive data type ها ذخیره میشن. بنابراین باید پراپرتی های entity رو به نحوی به primitive data type تبدیل کنیم تا بتونیم توی دیتابیس ذخیره کنیم. توسط TypeConverter میشه این کارو انجام داد.
مثلا در اپ ToDo فیلد priority از نوع enum تعریف شده و باید متدهایی نوشته بشه که اون رو به رشته تبدیل کنه و توی دیتابیس ذخیره کنه و همچنین متدی نوشته بشه که رشته خونده شده از دیتابیس رو به enum تبدیل کنه.
یک کلاس به صورت زیر تعریف میشه و انوتیشن TypeConverter بالای متدهای اون نشون میده که برای تبدیل استفاده میشه.
این دیتابیس در واقع ابسترکت شده دیتابیس SQLite هست و سه قسمت اصلی داره:
کلاس مدل: همون الگویی که قراره توی دیتابیس ذخیره شه.
اینترفیس DAO: کوئری هایی که قراره روی دیتابیس زده بشه در اینجا تعریف میشه.
کلاس ابسترکت دیتابیس: این کلاس یک متد ابسترکت داره که خروجیش اینترفیس DAO است و از طریق فراخونی این متد میشه به کوئری مورد نظر دست یافت. (این کلاس سینگل تون بوده و خودش متد ابسترکت ذکر شده رو پیاده سازی میکنه)
لینک های خوب برای Nvigation Component
برای انتقال اطلاعات بین فرگمنت ها در navigation component دو روش وجود دارد:
1. استفاده از bundle - در این صورت bundle رو به عنوان آرگومان دوم navigate پاس می دهیم اما این روش توصیه نمی شود.