استخدام حِزم Flutter SDK التي تم إنشاؤها

تتيح لك حِزم تطوير البرامج (SDK) لعملاء Firebase Data Connect طلب طلبات البحث وعمليات التحويل من جهة الخادم مباشرةً من تطبيق Firebase. يمكنك إنشاء حزمة تطوير برامج (SDK) مخصّصة للعملاء في وقتٍ موازي أثناء تصميم المخططات وطلبات البحث وعمليات التحويل التي يتم نشرها في خدمة Data Connect. بعد ذلك، تقوم بدمج الطرق من حزمة SDK هذه في منطق العميل.

كما ذكرنا في قسم آخر، من المهم ملاحظة أنّ طلبات البحث والتغييرات Data Connect لا يرسلها رمز العميل ويتم تنفيذها على الخادم. بدلاً من ذلك، عند نشرها، يتم تخزين عمليات Data Connect على الخادم مثل "وظائف السحابة الإلكترونية". وهذا يعني أنّك بحاجة إلى نشر التغييرات المقابلة من جهة العميل لتجنّب تعطُّل المستخدمين الحاليين (على سبيل المثال، في إصدارات التطبيقات القديمة).

لهذا السبب، يوفّر لك Data Connect بيئة مطوّرين وأدوات تسمح لك بإنشاء نماذج أولية للمخططات وطلبات البحث والتغييرات التي يتم نشرها على الخادم. تنشئ الأداة أيضًا حِزم تطوير برامج (SDK) من جهة العميل تلقائيًا، أثناء إنشاء نموذج أولي لها.

عند تكرار التحديثات على تطبيقات الخدمة والعميل، تكون التحديثات من جهة الخادم والعميل جاهزة للنشر.

إنشاء حزمة تطوير البرامج (SDK) من Flutter

كما هو الحال مع معظم مشاريع Firebase، يتم تنفيذ العمل على Firebase Data Connect العميل الرمز في دليل مشروع على الجهاز. تُعد كل من إضافة Data Connect VS Code وواجهة سطر الأوامر Firebase أداتَين محليتَين مهمتَين لإنشاء رمز العميل وإدارته.

ترتبط خيارات إنشاء حزمة SDK بعدة إدخالات في dataconnect.yamlملف الذي تم إنشاؤه عند بدء مشروعك.

إعداد عملية إنشاء حزمة تطوير البرامج (SDK)

في connector.yaml، أضِف outputDir وpackage و (بالنسبة إلى حزمة تطوير البرامج (SDK) على الويب) packageJsonDir.
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 من سطر أوامر Firebase، يمكنك ضبط ميزة "مراقبة" على تحديثات .gql وتعديل مصادر SDK تلقائيًا.

بدلاً من ذلك، يمكنك استخدام سطر الأوامر لإعادة إنشاء حِزم تطوير البرامج (SDK) عند تغيير ملفات ‎.gql:

firebase dataconnect:sdk:generate --watch

إنشاء حِزم SDK للدمج والإصدارات العلنية

في بعض السيناريوهات، مثل إعداد مصادر المشاريع لإرسالها إلى اختبارات التكامل المستمر، يمكنك استدعاء Firebase CLI لإجراء تحديث مجمّع.

في هذه الحالات، استخدِم firebase dataconnect:sdk:generate.

إعداد رمز العميل

بدء تطبيق Data Connect

أولاً، عليك إعداد تطبيقك باستخدام تعليمات الإعداد العادية لمنصّة Firebase.

بعد ذلك، عليك تثبيت المكوّن الإضافي Data Connect:

flutter pub add firebase_data_connect

إعداد Data Connect حزمة تطوير البرامج (SDK) من Flutter

ابدأ تشغيل مثيل Data Connect باستخدام المعلومات التي استخدَمتها لإعداد Data Connect (كلّها متوفّرة في Firebase console علامة التبويب Data Connect).

استيراد المكتبات

هناك مجموعتان من عمليات الاستيراد اللازمة لبدء رمز العميل، وهما عمليات استيراد عامة 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 أو من واجهة سطر الأوامر.

لا يختلف إعداد التطبيق للاتصال بالمحاكي في كلا السيناريوهَين.

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

الحقول الاختيارية

قد تحتوي بعض طلبات البحث على حقول اختيارية. في هذه الحالات، تُعرِض حزمة Flutter SDK طريقة لإنشاء العناصر، ويجب ضبطها بشكل منفصل.

على سبيل المثال، الحقل rating اختياري عند استدعاء createMovie، لذا عليك تقديمه في دالة "أداة الإنشاء".

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 بت) int
التاريخ DateTime
معرِّف فريد عالمي (UUID) السلسلة
إنت 64 int
عائم مزدوج
منطقي قيمة منطقية (Bool)
أي firebase_data_connect.AnyValue