تخطَّ إلى المحتوى الرئيسي

محوّلات أطر العمل

حزمة Dart

العميل الخاص بتطبيقات Flutter وDart: بلغة Dart خالصة، بلا اعتماديات وقت تشغيل، وبالأحداث والرايات وصندوق الوارد نفسها التي تحملها بقية العملاء.

مكان النشر

prodantix_sdk on pub.dev. Pure Dart, with no runtime dependencies.

التثبيت

Bash
dart pub add prodantix_sdk

مثال

Dart
import 'package:prodantix_sdk/prodantix_sdk.dart';

const projectKey = String.fromEnvironment('PRODANTIX_PUBLIC_KEY');

final client = ProdantixClient(
  apiKey: projectKey,
  host: 'https://eu.api.prodantix.com',
);

client.identify('user-123');
client.capture('order.completed', properties: {'total': 42});

final inbox = await client.getInbox();
await client.shutdown();
هذا العميل يتذكر من يستخدمه، فتضبط identify معرّف المستخدم مرة واحدة ويصير كل استدعاء لاحق عن ذلك الشخص. استدعِ reset عند تسجيل الخروج.

الرايات البعيدة والمحلية

الفحص البعيد يسأل الخادم وهو المرجع. أما الفحص المحلي فيقيّم نسخة مخزّنة من قواعد المشروع داخل العملية نفسها، دون ذهاب وإياب في كل استدعاء، وهو ما يحتاجه المسار الساخن.

Dart
// Remote: asks the server, and is the authoritative answer.
if (await client.isFeatureEnabled('new-checkout')) {
  // ...
}

// Local: evaluated in process from a cached snapshot, no round trip per call.
if (await client.isFeatureEnabledLocal('new-checkout', properties: {'plan': 'pro'})) {
  // ...
}

// Every per-flag read records one $feature_flag_called exposure.
final variant = await client.getVariant('new-checkout');
if (variant?['key'] == 'treatment') {
  // ...
}

// A flag targeting a cohort reads this user's memberships from the store;
// pass them yourself to skip the lookup.
if (await client.isFeatureEnabledLocal('members', cohorts: ['<cohort id>'])) {
  // ...
}

أين يعمل

يستهدف الهواتف وآلة Dart الافتراضية، ويصل إلى الشبكة عبر dart:io. وعلى أي منصة أخرى مرّر Transport وRequester خاصين بك، ولا يتغير شيء آخر في العميل.

Dart
final client = ProdantixClient(
  apiKey: projectKey,
  host: 'https://eu.api.prodantix.com',
  transport: MyTransport(),
  requester: myRequester,
  // Hold a Socket.IO subscription to flag changes and refetch the snapshot on
  // push, instead of waiting for the 30s poll.
  streamFlags: true,
);