জেনারেট করা ফ্লাটার SDK ব্যবহার করুন

Firebase Data Connect ক্লায়েন্ট SDK-গুলো আপনাকে একটি ফায়ারবেস অ্যাপ থেকে সরাসরি আপনার সার্ভার-সাইড কোয়েরি এবং মিউটেশন কল করার সুযোগ দেয়। আপনার Data Connect সার্ভিসে যে স্কিমা, কোয়েরি এবং মিউটেশনগুলো ডেপ্লয় করবেন, সেগুলোর ডিজাইন করার পাশাপাশি আপনি একটি কাস্টম ক্লায়েন্ট SDK তৈরি করেন। তারপর, এই SDK-এর মেথডগুলো আপনার ক্লায়েন্ট লজিকে ইন্টিগ্রেট করেন।

আমরা অন্যত্র যেমন উল্লেখ করেছি, এটা মনে রাখা গুরুত্বপূর্ণ যে Data Connect কোয়েরি এবং মিউটেশনগুলো ক্লায়েন্ট কোড দ্বারা সাবমিট করা হয় না এবং সার্ভারে এক্সিকিউট করা হয় না। পরিবর্তে, ডেপ্লয় করার সময়, Data Connect অপারেশনগুলো ক্লাউড ফাংশনের মতো সার্ভারে সংরক্ষিত হয়। এর মানে হলো, বিদ্যমান ব্যবহারকারীদের (উদাহরণস্বরূপ, অ্যাপের পুরোনো সংস্করণগুলোতে) সমস্যা এড়াতে আপনাকে সংশ্লিষ্ট ক্লায়েন্ট-সাইড পরিবর্তনগুলো ডেপ্লয় করতে হবে।

এই কারণেই Data Connect আপনাকে এমন একটি ডেভেলপার এনভায়রনমেন্ট এবং টুলিং প্রদান করে, যা দিয়ে আপনি আপনার সার্ভারে ডেপ্লয় করা স্কিমা, কোয়েরি এবং মিউটেশনগুলোর প্রোটোটাইপ তৈরি করতে পারেন। এছাড়াও, আপনি প্রোটোটাইপ করার সময়েই এটি স্বয়ংক্রিয়ভাবে ক্লায়েন্ট-সাইড SDK তৈরি করে দেয়।

যখন আপনি আপনার পরিষেবা এবং ক্লায়েন্ট অ্যাপগুলিতে আপডেটগুলি পুনরাবৃত্তি করবেন, তখন সার্ভার- এবং ক্লায়েন্ট-সাইড উভয় আপডেটই স্থাপনের জন্য প্রস্তুত হয়ে যাবে।

ক্লায়েন্ট ডেভেলপমেন্ট ওয়ার্কফ্লো কী?

আপনি যদি ' Get started' অংশটি অনুসরণ করে থাকেন, তাহলে আপনাকে Data Connect এর সামগ্রিক ডেভেলপমেন্ট ফ্লো-এর সাথে পরিচয় করিয়ে দেওয়া হয়েছে। এই গাইডে, আপনি আপনার স্কিমা থেকে ফ্লাটার এসডিকে (Flutter SDK) তৈরি করা এবং ক্লায়েন্ট কোয়েরি ও মিউটেশন নিয়ে কাজ করার বিষয়ে আরও বিস্তারিত তথ্য পাবেন।

সংক্ষেপে, আপনার ক্লায়েন্ট অ্যাপে তৈরি করা ফ্লাটার এসডিকে ব্যবহার করার জন্য, আপনাকে এই পূর্বশর্ত ধাপগুলো অনুসরণ করতে হবে:

  1. আপনার ফ্লাটার অ্যাপে ফায়ারবেস যুক্ত করুন।
  2. flutterfire CLI ইনস্টল করুন: dart pub global activate flutterfire_cli .
  3. flutterfire configure চালান।

তারপর:

  1. আপনার অ্যাপের স্কিমা তৈরি করুন।
  2. SDK জেনারেশন সেট আপ করুন:

  3. আপনার ক্লায়েন্ট কোড শুরু করুন এবং লাইব্রেরিগুলো ইম্পোর্ট করুন

  4. কোয়েরি এবং মিউটেশন কলগুলো বাস্তবায়ন করুন।

  5. Data Connect এমুলেটরটি সেট আপ করে ব্যবহার করুন এবং পুনরাবৃত্তি করুন।

আপনার ফ্লাটার এসডিকে তৈরি করুন

আপনার অ্যাপগুলিতে Data Connect তৈরি SDK সেট আপ করতে Firebase CLI ব্যবহার করুন। init কমান্ডটি বর্তমান ফোল্ডারের সমস্ত অ্যাপ সনাক্ত করবে এবং তৈরি করা SDK-গুলি স্বয়ংক্রিয়ভাবে ইনস্টল করবে।

firebase init dataconnect:sdk

প্রোটোটাইপিং করার সময় SDK আপডেট করুন।

আপনার যদি ডেটা কানেক্ট ভিএস কোড এক্সটেনশন ইনস্টল করা থাকে, তাহলে এটি তৈরি করা এসডিকে-গুলোকে সর্বদা হালনাগাদ রাখবে।

আপনি যদি ডেটা কানেক্ট ভিএস কোড এক্সটেনশন ব্যবহার না করেন, তাহলে জেনারেট করা এসডিকে-গুলো আপ-টু-ডেট রাখতে ফায়ারবেস সিএলআই ব্যবহার করতে পারেন।

firebase dataconnect:sdk:generate --watch

বিল্ড পাইপলাইনে SDK তৈরি করুন

আপনি CI/CD বিল্ড প্রসেসে ডেটা কানেক্ট SDK তৈরি করতে Firebase CLI ব্যবহার করতে পারেন।

firebase dataconnect:sdk:generate

ক্লায়েন্ট কোড সেট আপ করুন

আপনার Data Connect অ্যাপটি চালু করুন

প্রথমে, ফায়ারবেসের সাধারণ সেটআপ নির্দেশাবলী অনুসরণ করে আপনার অ্যাপটি চালু করুন।

তারপর, Data Connect প্লাগইনটি ইনস্টল করুন:

flutter pub add firebase_data_connect

Data Connect ফ্লাটার এসডিকে শুরু করুন

ডেটা কানেক্ট সেট আপ করার জন্য আপনি যে তথ্য ব্যবহার করেছিলেন, তা দিয়ে আপনার ডেটা Data Connect ইনস্ট্যান্সটি চালু করুন (এই সমস্ত তথ্য Firebase কনসোলের ডেটা কানেক্ট ট্যাবে পাওয়া যাবে)।

লাইব্রেরি আমদানি করুন

আপনার ক্লায়েন্ট কোড ইনিশিয়ালাইজ করার জন্য দুই ধরনের ইম্পোর্ট প্রয়োজন: সাধারণ Data Connect ইম্পোর্ট এবং নির্দিষ্ট, জেনারেটেড এসডিকে ইম্পোর্ট।

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

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

ক্লায়েন্ট সাইডে কোয়েরি ব্যবহার করুন

জেনারেট করা কোডটিতে আগে থেকেই পূর্বনির্ধারিত কোয়েরি রেফ (Query Refs) থাকবে। আপনাকে শুধু সেগুলো ইম্পোর্ট করে এক্সিকিউট 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();
}

ঐচ্ছিক ক্ষেত্র

কিছু কোয়েরিতে ঐচ্ছিক ফিল্ড থাকতে পারে। এইসব ক্ষেত্রে, ফ্লাটার এসডিকে একটি বিল্ডার মেথড প্রদান করে, এবং সেটি আলাদাভাবে সেট করতে হবে।

উদাহরণস্বরূপ, createMovie কল করার সময় rating ফিল্ডটি ঐচ্ছিক, তাই আপনাকে এটি বিল্ডার ফাংশনে প্রদান করতে হবে।

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`

গণনা ক্ষেত্রগুলির পরিবর্তনগুলি পরিচালনা করুন

একটি অ্যাপের স্কিমাতে এনুমারেশন থাকতে পারে, যেগুলো আপনার GraphQL কোয়েরি দ্বারা অ্যাক্সেস করা যায়।

অ্যাপের ডিজাইন পরিবর্তনের সাথে সাথে, আপনি enum-সমর্থিত নতুন ভ্যালু যোগ করতে পারেন। উদাহরণস্বরূপ, কল্পনা করুন যে আপনার অ্যাপ্লিকেশনের লাইফসাইকেলের পরবর্তী পর্যায়ে আপনি AspectRatio enum-এ একটি FULLSCREEN ভ্যালু যোগ করার সিদ্ধান্ত নিয়েছেন।

Data Connect ওয়ার্কফ্লোতে, আপনি আপনার কোয়েরি এবং এসডিকে আপডেট করার জন্য স্থানীয় ডেভেলপমেন্ট টুলিং ব্যবহার করতে পারেন।

তবে, আপনার ক্লায়েন্টদের একটি আপডেট করা সংস্করণ প্রকাশ করার আগে, পুরোনো ক্লায়েন্টগুলো অকার্যকর হয়ে যেতে পারে।

স্থিতিস্থাপক বাস্তবায়নের উদাহরণ

তৈরি করা SDK অজানা মানগুলি পরিচালনা করতে বাধ্য করে। অর্থাৎ, ক্লায়েন্ট কোডকে অবশ্যই 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}");
  }
}

ক্লায়েন্ট সাইডে মিউটেশন ব্যবহার করুন

কোয়েরির মতোই মিউটেশনগুলোও অ্যাক্সেস করা যায়।

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

আপনার ফ্লাটার অ্যাপগুলির প্রোটোটাইপ তৈরি করুন এবং পরীক্ষা করুন

স্থানীয় এমুলেটর ব্যবহার করার জন্য ক্লায়েন্টদের নির্দেশ দিন।

আপনি Data Connect এমুলেটরটি ডেটা কানেক্ট ভিএস কোড এক্সটেনশন থেকে অথবা সিএলআই থেকে ব্যবহার করতে পারেন।

উভয় ক্ষেত্রেই এমুলেটরের সাথে সংযোগ করার জন্য অ্যাপটিকে প্রস্তুত করার পদ্ধতি একই।

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

প্রোডাকশন রিসোর্সে স্যুইচ করতে, এমুলেটরের সাথে সংযোগ করার লাইনগুলো কমেন্ট আউট করুন।

ডার্ট এসডিকে-তে ডেটা টাইপ

Data Connect সার্ভারটি প্রচলিত GraphQL ডেটা টাইপগুলো উপস্থাপন করে। SDK-তে এগুলো নিম্নরূপে প্রদর্শিত হয়।

ডেটা সংযোগের ধরণ ডার্ট
টাইমস্ট্যাম্প firebase_data_connect.Timestamp
পূর্ণসংখ্যা (৩২-বিট) int
তারিখ তারিখ ও সময়
UUID স্ট্রিং
Int64 int
ভাসা দ্বিগুণ
বুলিয়ান বুল
যেকোনো firebase_data_connect.AnyValue