שימוש בערכות Flutter SDK שנוצרו

ערכות SDK ללקוח של Firebase Data Connect מאפשרות לבצע קריאות לשאילתות ולמוטציות בצד השרת ישירות מאפליקציית Firebase. אתם יוצרים ערכת SDK מותאמת אישית ללקוח במקביל לתכנון הסכימות, השאילתות והמוטציות שאתם פורסים בשירות Data Connect. לאחר מכן, משלבים שיטות מ-SDK הזה לתוך הלוגיקה של הלקוח.

כפי שציינו במקום אחר, חשוב לציין ששאילתות ומוטציות של Data Connect לא נשלחות על ידי קוד הלקוח ומבוצעות בשרת. במקום זאת, כשפורסים פעולות Data Connect, הן מאוחסנות בשרת כמו ב-Cloud Functions. המשמעות היא שצריך לפרוס את השינויים התואמים בצד הלקוח כדי למנוע פגיעה במשתמשים קיימים (למשל, בגרסאות ישנות יותר של האפליקציה).

לכן ב-Data Connect יש סביבת פיתוח וכלים שמאפשרים ליצור אב טיפוס של סכימות, שאילתות ומוטציות שנפרסו בשרת. בנוסף, המערכת יוצרת באופן אוטומטי ערכות SDK בצד הלקוח בזמן יצירת אב טיפוס.

אחרי שסיימתם לבצע עדכונים בשירות ובאפליקציות הלקוח, העדכונים בצד השרת ובצד הלקוח מוכנים לפריסה.

יצירת Flutter SDK

כמו ברוב הפרויקטים ב-Firebase, העבודה על קוד הלקוח של Firebase Data Connect מתבצעת בספריית פרויקט מקומית. גם התוסף של Data Connect ל-VS Code וגם ה-CLI של Firebase הם כלים מקומיים חשובים ליצירה ולניהול של קוד לקוח.

אפשרויות היצירה של ה-SDK מוגדרות במספר רשומות בקובץ dataconnect.yaml שנוצר כשאתם מפעילים את הפרויקט.

אתחול היצירה של ה-SDK

ב-connector.yaml, מוסיפים את outputDir, את package ואת packageJsonDir (ל-SDK לאינטרנט).
connectorId: movies
generate:
  dartSdk:
    outputDir: ../../lib/generated # Feel free to change this to a different path
    package: movies

outputDir מציין לאן צריך להוציא את ה-SDK שנוצר. הנתיב הזה הוא ביחס לספרייה שמכילה את הקובץ connector.yaml עצמו. אפשר גם לספק נתיב מוחלט אל outputDir.

package מציין את שם החבילה.

עדכון חבילות SDK במהלך פיתוח אב טיפוס

אם יוצרים אב טיפוס באופן אינטראקטיבי עם תוסף Data Connect VS Code ואמולטור Data Connect שלו, קובצי המקור של ה-SDK נוצרים ומעודכנים באופן אוטומטי בזמן שינוי קובצי .gql שמגדירים סכימות, שאילתות ומוטציות. זו יכולה להיות תכונה שימושית בתהליכי עבודה של טעינה (מחדש) חמה.

בתרחישים אחרים, אם אתם משתמשים במהדמ Data Connect מ-CLI של Firebase, תוכלו להגדיר מעקב אחרי עדכוני .gql וגם לעדכן באופן אוטומטי את מקורות ה-SDK.

לחלופין, אפשר להשתמש ב-CLI כדי ליצור מחדש את ערכות ה-SDK בכל פעם שקובצי ה-gql משתנים:

firebase dataconnect:sdk:generate --watch

יצירת ערכות SDK לשילוב ולגרסאות ייצור

במקרים מסוימים, כמו הכנת מקורות של פרויקטים לשליחה לבדיקות CI, אפשר להפעיל את ה-CLI של Firebase כדי לבצע עדכון באצווה.

במקרים כאלה, צריך להשתמש ב-firebase dataconnect:sdk:generate.

הגדרת קוד לקוח

איך מאתחלים את האפליקציה ל-Data Connect

קודם צריך לאתחל את האפליקציה לפי הוראות ההגדרה הרגילות של Firebase.

לאחר מכן, מתקינים את הפלאגין Data Connect:

flutter pub add firebase_data_connect

אתחול ה-Data Connect Flutter SDK

מאתחלים את המכונה של Data Connect באמצעות המידע ששימש להגדרת Data Connect (הכול זמין בכרטיסייה Data Connect במסוף Firebase).

ייבוא ספריות

יש שתי קבוצות של ייבוא שנדרשות כדי לאתחל את קוד הלקוח: ייבוא כללי של Data Connect וייבוא ספציפי של SDK שנוצר.

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

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

יצירת אב-טיפוס ובדיקה של אפליקציות Flutter

הוספת רכיבים ללקוחות כדי להשתמש באמולטור מקומי

אפשר להשתמש במהדמ של Data Connect דרך התוסף של Data 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();

כדי לעבור למשאבים בסביבת הייצור, צריך להוסיף הערות בשורות שמתחברות לאמולטור.

שימוש בשאילתות בצד הלקוח

הקוד שנוצר כבר מגיע עם הפניות מוגדרות מראש לשאילתות. כל מה שצריך לעשות הוא לייבא אותם ולקרוא ל-execute.

import 'generated/movies.dart';

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

קריאה לשיטות של שאילתות ב-SDK

לפניכם דוגמה לשימוש בפונקציות הבאות של מקשי הקיצור:

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();
}

שדות אופציונליים

יכול להיות שחלק מהשאילתות יכללו שדות אופציונליים. במקרים כאלה, ה-SDK של Flutter חושף שיטה של בונה, וצריך להגדיר אותו בנפרד.

לדוגמה, השדה rating הוא אופציונלי כשקוראים ל-createMovie, לכן צריך לספק אותו בפונקציית ה-builder.

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

הרשמה לקבלת עדכונים על שינויים

אפשר להירשם לשינויים (שמתעדכנים בכל פעם שמריצים שאילתה).

QueryRef<ListMoviesData, void> listRef = MoviesConnector.instance.listMovies().ref();

// subscribe will immediately invoke the query if no execute was called on it previously.
listRef.subscribe().listen((data) {
  updateUIWithMovies(data.movies);
});

await MoviesConnector.instance.createMovie({ title: 'Empire Strikes Back', releaseYear: 1980, genre: "Sci-Fi" }).rating(5).execute();
await listRef.execute(); // will update the subscription above`

שימוש במוטציות בצד הלקוח

אפשר לגשת למוטציות באותו אופן שבו ניגשים לשאילתות.

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

סוגי נתונים ב-Dart SDK

השרת Data Connect מייצג סוגי נתונים נפוצים של GraphQL. הם מיוצגים ב-SDK באופן הבא.

סוג חיבור הנתונים Dart
חותמת זמן firebase_data_connect.Timestamp
Int‏ (32-bit) int
תאריך DateTime
מזהה ייחודי אוניברסלי (UUID) מחרוזת
Int64 int
Float double
בוליאני בוליאני
הכול firebase_data_connect.AnyValue