CRUD با Firebase Firestore | فلاتر | داستان AM

CRUD با Firebase Firestore | فلاتر | داستان AM

هنر AkarMoon BitMap: Yin Yan Firebase Web Android Youtube Flutter


منبع:


Firebase Firestore CRUD | فلاتر | توسعه دهندگان Firebase (medium.com)

انجام پروژه در فریلنس پروژه

Firebase یکی از محبوب ترین BaaS است که در توسعه برنامه های تلفن همراه استفاده می شود. خدمات مختلفی را برای توسعه اپلیکیشن موبایل ارائه می دهد که در این مقاله Firebase Firestore به یکی از آنها خواهیم پرداخت. Firestore به شما امکان آپلود و بازیابی اطلاعات را با دستورات بسیار کوتاه و ساده می دهد.


من قصد دارم این برنامه Schedular را بسازم (مانند برنامه زمانبندی درس) تا عملیات Firestore CRUD (ایجاد حذف به‌روزرسانی خواندنی) را نشان دهد.


بیایید با ایجاد یک پروژه Firebase شروع کنیم. اگر برای ساخت پروژه در Firebase به کمک نیاز دارید، می توانید آن را در اینجا بررسی کنید:


شروع به کار با Cloud Firestore | Firebase (google.com)

سفارش ساخت سایت

شما را از طریق آن راهنمایی می کند.


حال شما خوب است؟ خوب! بیایید مجموعه کتابخانه خود را اضافه کنیم.

بسته های بسته کتابخانه Kumpulan


بسته های کتابخانه را از طریق فایل pubspec.yaml اضافه کنید:


firebase_core: ^1.19.2

cloud_firestore: ^3.3.0


مقدار دهی اولیه کنید


در مرحله بعد، پروژه Firebase خود را مقداردهی اولیه می کنیم.


در تابع اصلی یک تابع async (ناهمزمان) ایجاد کنید و قبل از تابع runApp() یک خط اضافه کنید:

طراحان لوگو

WidgetsFlutterBinding.ensureInitialized();await Firebase.initializeApp(گزینه ها: DefaultFirebaseOptions.currentPlatform,);


تابع WidgetsFlutterBinding.ensureInitialized() برای تعامل با موتور Flutter استفاده می شود. فراخوانی می شود زیرا Firebase.initializeApp() باید کد بومی و اقدامات WidgetsFlutterBinding مانند کانال های پلتفرم نامیده شود.


اکنون که Firebase را مقداردهی اولیه کردیم، به سمت عملکرد عملیات CRUD در پایگاه داده Firestore خود می رویم.


ساختار DB برنامه زمان بندی شده (برنامه برنامه)

کلاس مدل ما

ایجاد/ایجاد/نوشتن


یک مجموعه فقط شامل مجموعه ای از محتویات سند است. یک سند می تواند شامل ستون ها و زیر مجموعه های دیگری باشد.


پایگاه داده ما از یک مجموعه ریشه واحد به نام "قرار ملاقات ها" ایجاد شده است و مجموعه اسناد مجزا از مجموعه قرارها را نشان می دهد.


برای نوشتن داده ها، با استفاده از این تابع از سمت کاربر قول می دهیم:

انجام پروژه متلب

اما ما باید قبل از آپلود آن در Firestore از شناسه سند برای کلاس Appointment فرار کنیم، پس چگونه این کار را انجام دهیم؟ بیایید تابع bookSession (نشانک جلسه) خود را دوباره تعریف کنیم.


در خط 5، Firestore مجموعه ای به نام "قرار ملاقات" (Janju) ایجاد می کند و آن قرار را به عنوان یک سند با شناسه سند تولید شده به طور خودکار اضافه می کند. اگر آن مجموعه از قبل وجود داشته باشد، بدون مجموعه تکراری به سند اضافه می شود.

خواندن / خواندن


برای خواندن داده ها از Fitestore، از متد get() یا fetch استفاده می کنید.


db.collection("قراردادها").doc("FpS9NDSdMD2GeE9GL3i2").get().then(

  (DocumentSnapshot doc) {

    داده نهایی = doc.data() به عنوان Map<String, dynamic>;

    //...

  }،

  onError: (e) => print("خطا در دریافت سند: $e")،

)


از آنجایی که می خواهیم رابط کاربری برنامه خود را به صورت بلادرنگ به روز کنیم، از StreamBuilder استفاده خواهیم کرد. بازیابی داده ها از Fitestore با استفاده از StreamBuilder کمی با خواندن با استفاده از متد get() متفاوت است.


ببینید در هنگام دریافت قرارهای بی‌درنگ، قرار ملاقات‌ها را مستقیماً از کاربران چگونه می‌گیریم.


جریان getAppointments ما.

به روز رسانی / به روز رسانی


برای به روز رسانی داده ها در Firestore، از set() duplicate یا update() استفاده کنید.


برای کاربرانی که نیاز به به‌روزرسانی جزئیات قرار ملاقات دارند، یک ویژگی ویرایش اضافه کرده‌ام.


با استفاده از set()، ورودی داده در سند را با محتوای به روز شده به روز می کنیم.


با این حال، اگر بخواهیم محتویات را به صورت جداگانه به روز کنیم، به جای set() از update() استفاده می کنیم، بنابراین به نظر می رسد:

حذف/حذف


پایگاه داده Firestore به شما امکان می دهد اسناد، ستون ها و مجموعه ها را حذف کنید (اگرچه این کار توصیه نمی شود)


ما یک گزینه حذف برای موقعیت هایی ایجاد می کنیم که کاربر نظر خود را تغییر می دهد و تصمیم می گیرد قول خود را حذف کند. برای حذف یک وعده، سند را با این تابع از مجموعه حذف می کنیم:


ما سند را بر اساس شناسه سند به عنوان یک پارامتر در doc() قرار می دهیم. سپس delete() را فراخوانی کنید.


برای حذف یک ستون در یک سند، از نحو استفاده می کنیم:


یک فیلد را با استفاده از تابع FieldValue.delete حذف می کنیم و سپس سند را با استفاده از update() به روز می کنیم.


این مربوط به پوشش ویژگی برنامه ما و عملیات CRUD Firestore است. همیشه سعی می‌کنم تا حد امکان یک برنامه آزمایشی ساده بسازم تا بتوانیم روی موضوع تمرکز کنیم. با این حال، احساس آزادی ایجاد بر روی آن با ایجاد صفحات یا ویژگی‌های بیشتر، به شما این امکان را می‌دهد که بیشتر در مورد Firestore تمرین کنید.


اگر سوال یا پیشنهادی دارید کامنت بگذارید.

انجام پروژه پایتون

کد منبع کامل را از اینجا بگیرید:


GitHub — iamIkay/schedular_app: برنامه زمانبندی ایجاد شده با Flutter و Firebase


شما را در فصل بعدی سری Firebase می بینیم.



توضیح اینکه چرا pwa ها برنامه های بومی را از بین نبرده اند؟

چرا PWA ها هنوز برنامه های بومی را از بین نبرده اند؟

تصویر پایه توسط Dall-E با دستور زیر ایجاد شده است: "رندر سه بعدی از دو گوشی هوشمند شخصی سازی شده در حال جنگ با چاقو در منظره نئونی پسا آخرالزمانی"

انجام پروژه در فریلنس پروژه

    کوین باست بنیانگذار Progressier است، یک ابزار نرم افزاری که توسط بیش از 5000 برنامه برای رهایی از فروشگاه های برنامه استفاده می شود.


روی کاغذ، PWA ها جایگزین مناسبی برای برنامه های بومی هستند: تنها یک پایه کد برای مدیریت، به روز رسانی های فوری که نیازی به تایید ندارند، و بدون کمیسیون برای پرداخت در خریدهای درون برنامه ای. چه چیزی را دوست ندارد؟


اگرچه برنامه‌های وب پیشرو از زمان پیدایش خود بسیار پیشرفت کرده‌اند، اما کاملاً در نقطه‌ای نیستند که بتوانند جایگزین مناسبی برای برنامه‌های بومی باشند.


بنابراین ... چه چیزی هنوز در سال 2022 گم شده است؟ چرا آنها هنوز به فرمت پیش فرض برنامه ها تبدیل نشده اند؟

مشکل هویت PWA


من در مورد این موضوع خاص با جزئیات بیشتری نوشته ام، اما PWA ها هنوز از شهرت خود به عنوان برنامه های درجه دو رنج می برند - یا بدتر، در برخی موارد، اصلاً برنامه نیستند.


در سال 2022، رفتار پیش‌فرض همچنان این است که به دنبال برنامه‌ها در Google Play یا App Store بروید. به اندازه کافی خنده دار، نصب یک برنامه به طور مستقیم از یک وب سایت هم سریع تر و هم راحت تر است. اما کاربران هنوز بدون درخواست‌های اختصاصی و عناصر تبلیغاتی به این کار عادت ندارند.


هسته اصلی مشکل، مسئله اعتماد است. دانلود یک برنامه از شخص ثالث به این معنی است که شخص ثالث مورد نظر (گوگل یا اپل) تأیید می کند که برنامه برای دانلود بی خطر است.


اما نکته اینجاست: PWA ها نیازی به تایید گوگل و اپل ندارند... زیرا از قبل تضمین شده اند که ایمن هستند - از نظر طراحی. یک PWA نمی تواند مخاطبین تلفن شما را بخواند، از طرف شما پیامک ارسال کند یا به هیچ یک از ویژگی های تلفن شما که می تواند اطلاعات خصوصی شما را فاش کند، دسترسی پیدا کند.


ارزش پیشنهادی یک "فروشگاه برنامه" دو جنبه دارد: تدارکات (نصب برنامه خود در دستگاه کاربر) و تبلیغ (ترغیب افراد بیشتر به کشف برنامه شما). مسلماً، اپ استورها دیگر چنین کار بزرگی را در دومی انجام نمی دهند. و تدارکات نصب PWA در خود مرورگر تعبیه شده است.

سفارش ساخت سایت

در سال 2022، کل پارادایم فروشگاه برنامه اضافی است.

اعلان های فشار iOS


پس از سال‌ها انتظار به ظاهر ناامیدکننده، بالاخره اپل اعلام کرد که اعلان‌های فشاری در سال 2023 به iOS می‌آیند. این خبر بسیار خوبی است. تا به حال، می‌توانید اعلان‌ها را برای کاربران Android/Windows/macOS خود ارسال کنید، اما نه برای کاربران iOS.


برای بسیاری از توسعه دهندگان، این بدان معناست که نمی توان به طور کامل به اعلان های فشار برای ارائه اطلاعات مهم به کاربران خود اعتماد کرد. اعلان‌های فشار وب یک امتیاز اضافی خوب بود - نه بخش مهمی از گردش کار یک محصول.


مشروط بر اینکه اپل اعلان‌های فشار وب را به روش صحیح پیاده‌سازی کند (مانند مشخصات W3)، این در شرف تغییر است. شما می‌توانید با تلاش بسیار اندک و بدون نیاز به فهرست کردن برنامه‌های خود در Google Play و App Store، کاربران را در اندروید و iOS مطلع کنید.


همانطور که گفته شد، توسعه‌دهندگان وب آنقدر از Web Push API سوء استفاده کرده‌اند (مثلاً وب‌سایت‌های خبری که در اولین بازدید شما درخواست دسترسی دارند) که مردم از این درخواست‌ها متنفر شده‌اند. در نتیجه، در برخی موارد، کروم (و سایر مرورگرها) درخواست‌های اعلان فشاری را به‌طور خودکار مسدود می‌کند - درخواست دسترسی به این ویژگی را برای توسعه‌دهندگان با موارد استفاده قانونی دشوارتر می‌کند.


یکی از موارد برتر در لیست علاقه مندی های شخصی من این است که پس از نصب، به PWA ها اعتباری بالاتر از یک وب سایت معمولی اعطا شود (اما نه به اندازه یک برنامه بومی). وادار کردن افراد به نصب PWA شما دلیلی بر این است که آنها به نوعی به آن اعتماد دارند - آنها فقط به سایت شما برخورد نکرده اند.

انجام پروژه متلب

چند نمونه از آنچه مقام بالاتر می تواند به آن ترجمه شود:


    PWA های نصب شده می توانند به طور خودکار به Push API دسترسی داشته باشند.

    دسترسی به Push API را برای PWA های نصب شده محدود کنید. وب‌سایت‌های معمولی اصلاً مجاز به درخواست دسترسی نیستند. خداحافظ هرزنامه BS.

    بسته‌بندی درخواست‌ها به چندین API مرورگر در اعلان نصب. به عنوان مثال، هنگامی که یک PWA نصب می‌شود، می‌تواند درخواست دسترسی خودکار به Push API، API مکان جغرافیایی، یا Microphone API را داشته باشد – با جابجایی‌هایی برای کاربران تا به طور جداگانه به هرکدام اجازه یا غیرمجاز را بدهند.

    یا ساده تر، Chrome به سادگی نمی تواند اعلان های فشار را در صورت درخواست از داخل یک PWA مسدود کند.


درخواست نصب بومی در iOS

نصب PWA در iOS نیازمند نمایش دستورالعمل‌های سفارشی کاربران است


نصب یک برنامه در iOS در حال حاضر نیازمند باز کردن پنل اشتراک گذاری و کلیک بر روی دکمه افزودن به صفحه اصلی است. این بیشتر کار را انجام می دهد، اما به آسانی نصب یک برنامه اصلی iOS نیست.


اگر سافاری از رویداد BeforeInstallPrompt پشتیبانی کند، این تجربه ساده‌تر می‌شود. یا حداقل، اپل می تواند عبارت Add to Home Screen را برای نصب برنامه تغییر دهد – اندروید دقیقاً چند سال پیش این کار را انجام داده است.


اگرچه جریان فعلی یک راه‌حل خوب است، اما پیامدهای ناخواسته‌ای دارد که هم برای کاربران و هم برای توسعه‌دهندگان مضر است.


به عنوان مثال، imp است s، و وب، به عنوان یک کل.

طراحان لوگو

     کوین باست بنیانگذار Progressier است، یک ابزار نرم افزاری که توسط بیش از 5000 برنامه برای رهایی از فروشگاه های برنامه استفاده می شود.