استفاده از کیت‌های توسعه نرم‌افزار Flutter تولیدشده

Firebase SQL Connect کیت‌های توسعه نرم‌افزار کارخواه به شما امکان می‌دهند پرسمان‌ها و تغییرات سمت سرور را مستقیماً از برنامه Firebase فراخوانی کنید. شما یک کیت توسعه نرم‌افزار کارخواه سفارشی را به‌طور موازی با طراحی طرح‌واره‌ها، پرسمان‌ها، و تغییراتی که در سرویس SQL Connect خود مستقر می‌کنید، تولید می‌کنید. سپس، روش‌های این کیت توسعه نرم‌افزار را در منطق کارخواه خود ادغام می‌کنید.

همان‌طور که در جای دیگری اشاره کردیم، مهم است توجه داشته باشید که SQL Connect پرس‌وجوها و جهش‌ها توسط کد کارخواه ارسال نمی‌شوند و در سرور اجرا می‌شوند. درعوض، هنگام پیاده‌سازی، عملیات SQL Connect مانند Cloud Functions در سرور ذخیره می‌شود. این یعنی باید تغییرات مربوطه را در سمت کارخواه اعمال کنید تا از ایجاد مشکل برای کاربران فعلی (مثلاً در نسخه‌های قدیمی‌تر برنامه) جلوگیری شود.

به همین دلیل، SQL Connect محیط توسعه نرم‌افزار و ابزارهایی را در اختیارتان قرار می‌دهد که به شما امکان می‌دهد نمونه اولیه طرح‌واره‌ها، پُرسمان‌ها، و جهش‌های مستقرشده در سرور را بسازید. همچنین، درحالی‌که نمونه اولیه می‌سازید، کیت‌های توسعه نرم‌افزار سمت کارخواه را به‌طور خودکار تولید می‌کند.

وقتی به‌روزرسانی‌های سرویس و برنامه‌های مشتری را تکرار کردید، به‌روزرسانی‌های سمت سرور و مشتری آماده استقرار هستند.

گردش کار توسعه کارخواه چیست؟

اگر شروع به کار را دنبال کرده باشید، با جریان کلی توسعه برای SQL Connect آشنا شده‌اید. در این راهنما، اطلاعات دقیق‌تری درباره تولید کیت‌های توسعه نرم‌افزار Flutter از طرح‌واره‌تان و کار با پُرسمان‌ها و جهش‌های کارخواه پیدا خواهید کرد.

به‌طور خلاصه، برای استفاده از کیت‌های توسعه نرم‌افزار Flutter تولیدشده در برنامه‌های کارخواه، باید این مراحل پیش‌نیاز را دنبال کنید:

  1. Firebase را به برنامه Flutter خود اضافه کنید.
  2. ‫flutterfire CLI dart pub global activate flutterfire_cli را نصب کنید.
  3. ‫flutterfire configure را اجرا کنید.

سپس:

  1. طرح‌واره برنامه‌تان را توسعه دهید.
  2. راه‌اندازی تولید کیت توسعه نرم‌افزار:

  3. کد کارخواه را مقداردهی اولیه کنید و کتابخانه‌ها را وارد کنید.

  4. فراخوانی‌های پُرسمان‌ها و جهش‌ها را پیاده‌سازی کنید.

  5. شبیه‌ساز SQL Connect را راه‌اندازی و استفاده کنید و تکرار کنید.

تولید کیت توسعه نرم‌افزار Flutter

از Firebase CLI برای راه‌اندازی کیت‌های توسعه نرم‌افزار تولیدشده SQL Connect در برنامه‌هایتان استفاده کنید. فرمان init باید همه برنامه‌های موجود در پوشه فعلی را شناسایی کند و کیت‌های توسعه نرم‌افزار تولیدشده را به‌طور خودکار نصب کند.

firebase init dataconnect:sdk

به‌روزرسانی کیت‌های توسعه نرم‌افزار درحین نمونه‌سازی

اگر افزونه SQL Connect VS Code را نصب کرده باشید، همیشه کیت‌های توسعه نرم‌افزار تولیدشده را به‌روز نگه می‌دارد.

اگر از افزونه SQL Connect VS Code استفاده نمی‌کنید، می‌توانید از واسط خط فرمان Firebase برای به‌روز نگه داشتن کیت‌های توسعه نرم‌افزار تولیدشده استفاده کنید.

firebase dataconnect:sdk:generate --watch

تولید کیت‌های توسعه نرم‌افزار در خطوط لوله ساخت

می‌توانید از واسط خط فرمان Firebase برای تولید کیت‌های توسعه نرم‌افزار SQL Connect در فرایندهای ساخت CI/CD استفاده کنید.

firebase dataconnect:sdk:generate

راه‌اندازی کد مشتری

راه‌اندازی برنامه SQL Connect

ابتدا، برنامه‌تان را بااستفاده از دستورالعمل‌های راه‌اندازی استاندارد Firebase مقداردهی اولیه کنید.

سپس، افزایه SQL Connect را نصب کنید:

flutter pub add firebase_data_connect

مقداردهی اولیه کیت توسعه نرم‌افزار Flutter SQL Connect

نمونه SQL Connect خود را بااستفاده از اطلاعاتی که برای راه‌اندازی SQL Connect استفاده کردید مقداردهی اولیه کنید. این اطلاعات را در صفحه پایگاه‌های داده و فضای ذخیره‌سازی > اتصال SQL در کنسول Firebase پیدا کنید.

وارد کردن کتابخانه‌ها

دو مجموعه واردات برای مقداردهی اولیه کد مشتری شما لازم است، واردات عمومی SQL Connect و واردات خاص و تولیدشده کیت توسعه نرم‌افزار.

// general imports
import 'package:firebase_data_connect/firebase_data_connect.dart';

// generated queries and mutations from SDK
import 'generated/movies.dart';

استفاده از پُرسمان‌ها در سمت کارخواه

کد تولیدشده ازقبل با «ارجاع‌های پُرسمان» ازپیش تعریف‌شده ارائه می‌شود. تنها کاری که باید انجام دهید این است که execute را وارد کنید و روی آن‌ها فراخوانی کنید.

import 'generated/movies.dart';

await MoviesConnector.instance.listMovies().execute();

فراخوانی روش‌های پرسمان کیت توسعه نرم‌افزار

در اینجا مثالی از نحوه استفاده از این توابع میان‌بر کنش آورده شده است:

import 'generated/movies.dart';

function onBtnClick() {
  // This will call the generated Dart from the CLI and then make an HTTP request to the server.
  MoviesConnector.instance.listMovies().execute().then(data => showInUI(data)); // == MoviesConnector.instance.listMovies().ref().execute();
}

فیلدهای اختیاری

برخی‌از پُرسمان‌ها ممکن است فیلدهای اختیاری داشته باشند. در این موارد، Flutter SDK یک روش سازنده را نشان می‌دهد و باید به‌طور جداگانه تنظیم شود.

برای مثال، فیلد rating هنگام فراخوانی createMovie اختیاری است، بنابراین باید آن را در تابع سازنده ارائه دهید.

await MoviesConnector.instance.createMovie( title: 'Empire Strikes Back', releaseYear: 1980, genre: 'Sci-Fi').rating(5).execute();

مشترک شدن در تغییرات

دریافت به‌روزرسانی‌های هم‌زمان از SQL Connect را ببینید.

مدیریت تغییرات در فیلدهای شمارشی

طرح‌واره برنامه می‌تواند حاوی شمارش‌ها باشد، که پرس‌وجوهای GraphQL شما می‌توانند به آن دسترسی داشته باشند.

با تغییر طراحی برنامه، می‌توانید مقادیر پشتیبانی‌شده شمارشی جدیدی اضافه کنید. برای مثال، تصور کنید که بعداً در چرخه حیات برنامه‌تان تصمیم می‌گیرید مقدار FULLSCREEN را به شمارش AspectRatio اضافه کنید.

در گردش کار SQL Connect، می‌توانید از ابزار توسعه محلی برای به‌روزرسانی پُرسمان‌ها و کیت‌های توسعه نرم‌افزار استفاده کنید.

اما قبل‌از اینکه نسخه به‌روزشده‌ای از کلاینت‌هایتان را منتشر کنید، کلاینت‌های مستقرشده قدیمی‌تر ممکن است خراب شوند.

نمونه پیاده‌سازی انعطاف‌پذیر

کیت توسعه نرم‌افزار تولیدشده، رسیدگی به مقادیر ناشناخته را اجباری می‌کند. یعنی کد کارخواه باید شیء EnumValue را به Known یا Unknown باز کند.

final result = await MoviesConnector.instance.listMovies().execute();

if (result.data != null && result.data!.isNotEmpty) {
  handleEnumValue(result.data![0].aspectratio);
}

void handleEnumValue(EnumValue<AspectRatio> aspectValue) {
  if (aspectValue.value != null) {
    switch(aspectValue.value!) {
      case AspectRatio.ACADEMY:
        print('This movie is in Academy aspect');
        break;
      case AspectRatio.WIDESCREEN:
        print('This movie is in Widescreen aspect');
        break;
      case AspectRatio.ANAMORPHIC:
        print('This movie is in Anamorphic aspect');
        break;
      case AspectRatio.IMAX:
        print('This movie is in IMAX aspect');
    }
  } else {
    print('Unknown aspect ratio detected: ${aspectValue.stringValue}');
  }
}

فعال کردن ذخیره مؤقت سمت کارخواه

SQL Connect دارای ویژگی اختیاری ذخیره موقت سمت کارخواه است که می‌توانید آن را با ویرایش فایل connector.yaml فعال کنید. وقتی این ویژگی فعال باشد، کیت‌های توسعه نرم‌افزار مشتری تولیدشده پاسخ‌های پُرسمان را به‌طور محلی ذخیره می‌کنند، که می‌تواند تعداد درخواست‌های پایگاه داده‌ای را که برنامه‌تان ایجاد می‌کند کاهش دهد و بخش‌های وابسته به پایگاه داده برنامه‌تان را قادر می‌سازد تا درصورت قطع شدن شبکه کار کنند.

برای فعال کردن ذخیره‌سازی موقت سمت کارخواه، پیکربندی ذخیره‌سازی موقت کارخواه را به پیکربندی متصل‌کننده‌تان اضافه کنید:

generate:
  javascriptSdk:
    outputDir: ../dart/
    package: "dataconnect_generated"
    clientCache:
      maxAge: 5s
      storage: memory

این پیکربندی دو پارامتر دارد که هر دو اختیاری هستند:

  • maxAge: حداکثر سن پاسخ ذخیره‌شده در حافظه نهان قبل‌از اینکه کیت توسعه نرم‌افزار مشتری مقادیر جدید را واکشی کند. مثال: «0»، «30s»، «1h30m».

    مقدار پیش‌فرض برای maxAge، 0 است، یعنی پاسخ‌ها ذخیره موقت می‌شوند، اما کیت توسعه نرم‌افزار کارخواه همیشه مقادیر جدید را واکشی می‌کند. مقادیر ذخیره‌شده در حافظه نهان فقط زمانی استفاده می‌شود که CACHE_ONLY برای execute() مشخص شده باشد و نتیجه اولیه از subscribe() برگردانده شده باشد.

  • storage: کیت توسعه نرم‌افزار کارخواه را می‌توان به‌گونه‌ای پیکربندی کرد که پاسخ‌ها را در persistent یا در memory ذخیره کند. نتایج ذخیره‌شده در حافظه نهان persistent درصورت بازراه‌اندازی برنامه باقی می‌ماند. هنگام هدف‌یابی Android یا iOS، پیش‌فرض persistent است. هنگام هدف‌یابی مرورگرهای وب، فقط فضای ذخیره‌سازی memory پشتیبانی می‌شود.

پس‌از به‌روزرسانی پیکربندی ذخیره‌سازی موقت اتصال‌دهنده، کیت‌های توسعه نرم‌افزار کارخواه را بازتولید کنید و برنامه‌تان را بازسازی کنید. پس‌از انجام این کار، execute() و subscribe() پاسخ‌ها را در حافظه نهان ذخیره می‌کنند و از مقادیر ذخیره‌شده در حافظه نهان طبق خط‌مشی‌ای که پیکربندی کرده‌اید استفاده می‌کنند. این معمولاً به‌طور خودکار و بدون هیچ مرحله اضافی ازجانب شما اتفاق می‌افتد؛ بااین‌حال، به موارد زیر توجه کنید:

  • رفتار پیش‌فرض execute() همان‌طور است که در بالا شرح داده شد: اگر نتیجه‌ای برای پُرسمان ذخیره شده باشد و مقدار ذخیره‌شده قدیمی‌تر از maxAge نباشد، از مقدار ذخیره‌شده استفاده می‌شود. این رفتار پیش‌فرض خط‌مشی PREFER_CACHE نامیده می‌شود.

    همچنین می‌توانید برای فراخوانی‌های تکی execute() مشخص کنید که یا فقط مقادیر ذخیره‌شده در حافظه نهان (CACHE_ONLY) را ارائه دهد یا بدون قیدوشرط مقادیر جدید را از سرور (SERVER_ONLY) واکشی کند.

    await queryRef.execute(fetchPolicy: QueryFetchPolicy.cacheOnly);
    
    await queryRef.execute(fetchPolicy: QueryFetchPolicy.serverOnly);
    
  • وقتی subscribe() را فراخوانی می‌کنید، همیشه بلافاصله محتوای ذخیره‌شده در حافظه نهان را (درصورت وجود) برمی‌گرداند، صرف‌نظر از تنظیم maxAge. فراخوانی‌های بعدی به execute() به شنوندگان طبق maxAge پیکربندی‌شده اطلاع می‌دهد.

استفاده از جهش‌ها در سمت کارخواه

جهش‌ها به همان روش پُرسمان‌ها قابل‌دسترسی هستند.

await MoviesConnector.instance.createMovie({ title: 'Empire Strikes Back', releaseYear: 1980, genre: "Sci-Fi" }).rating(5).execute();

نمونه‌سازی و آزمایش برنامه‌های Flutter

مشتریان را برای استفاده از شبیه‌ساز محلی آماده کنید

می‌توانید از شبیه‌ساز SQL Connect، چه ازطریق افزونه SQL Connect VS Code و چه ازطریق CLI، استفاده کنید.

ابزارسازی برنامه برای اتصال به شبیه‌ساز برای هر دو سناریو یکسان است.

import 'package:firebase_data_connect/firebase_data_connect.dart';
import 'generated/movies.dart';

MoviesConnector.instance.dataConnect
          .useDataConnectEmulator('127.0.0.1', 9399);

// Make calls from your app
QueryRef<ListMoviesData, void> ref = MoviesConnector.instance.listMovies.ref();

برای رفتن به منابع تولید، خطوط مربوط به اتصال به شبیه‌ساز را به‌صورت نظر درآورید.

انواع داده در Dart SDK

سرور SQL Connect انواع داده‌های رایج GraphQL را نشان می‌دهد. این موارد در کیت توسعه نرم‌افزار به‌صورت زیر نشان داده می‌شوند.

SQL Connect نوع Dart
مُهر زمان firebase_data_connect.Timestamp
عدد صحیح (۳۲ بیتی) توپ‌ربایی
تاریخ DateTime
شناسه منحصربه‌فرد جهانی رشته
Int64 توپ‌ربایی
شناور دو نفره
بولی بولی
همه firebase_data_connect.AnyValue