posthog_dart
PostHog uchun sof Dart SDK — Windows, Linux, Android, iOS, macOS va Web'da bir xil ishlaydi.
Rasmiy posthog_flutter plagini
posthog-android va posthog-ios native SDK'lari ustidagi qobiq. Windows va
Linux uchun native SDK mavjud emas, shuning uchun u yerda plagin jimgina
no-op'ga aylanadi: ilova xatosiz ishlaydi, lekin hech qanday analitika
yig'ilmaydi. Bu paket o'sha ishni sof Dart'da, to'g'ridan-to'g'ri PostHog HTTP
API'si orqali bajaradi — native bog'liqliksiz.
API rasmiy plagin bilan aynan mos, shuning uchun migratsiya import qatorini almashtirishdan iborat.
Platformalar
| Imkoniyat | Android | iOS | macOS | Web | Windows | Linux |
|---|---|---|---|---|---|---|
| Event capture, identify, groups | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Feature flags | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Error tracking (Dart) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Session replay | ✅ | ✅ | ✅ | — | ✅ | ✅ |
| Surveys | ✅ | ✅ | ✅ | —¹ | ✅ | ✅ |
| Offline navbat (diskda) | ✅ | ✅ | ✅ | —² | ✅ | ✅ |
¹ Web'da PostHog JS SDK'sidan foydalaning — surveys sozlamasi e'tiborsiz
qoldiriladi. ² Web'da navbat xotirada; batafsil quyida.
Rasmiy plagin bilan taqqoslaganda:
posthog_flutter |
posthog_dart |
|
|---|---|---|
| Windows / Linux | ❌ jimgina no-op | ✅ to'liq |
| Native crash (fatal) | ✅ | ❌ |
| Push notification | ✅ | ❌ |
Qo'llab-quvvatlanmaydigan imkoniyatlar API mosligi uchun no-op sifatida saqlangan — mavjud kod kompilyatsiya bo'ladi. Batafsil: Cheklovlar.
O'rnatish
dependencies:
posthog_dart: ^0.1.0
Boshlash
import 'package:flutter/material.dart';
import 'package:posthog_dart/posthog_dart.dart';
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
final config = PostHogConfig('<loyiha_api_kaliti>')
..host = 'https://us.i.posthog.com'
..captureApplicationLifecycleEvents = true;
await Posthog().setup(config);
runApp(const MyApp());
}
API kalitini PostHog'da Project settings → Project API key dan oling. EU
mintaqasi uchun host ni https://eu.i.posthog.com qiling; o'zingiz hosting
qilsangiz — o'z domeningizni.
Ekran ko'rishlarini avtomatik yig'ish uchun PosthogObserver ni ulang (surveys
uchun ham shu talab qilinadi):
MaterialApp(
navigatorObservers: [PosthogObserver()],
home: const HomePage(),
);
Session replay uchun ilovani PostHogWidget bilan o'rang:
PostHogWidget(
child: MaterialApp(...),
);
Ishlatish
Eventlar
await Posthog().capture(
eventName: 'buyurtma_yakunlandi',
properties: {'summa': 42.5, 'valyuta': 'UZS'},
);
await Posthog().screen(screenName: 'Savat');
Foydalanuvchi shaxsi
await Posthog().identify(
userId: 'user-123',
userProperties: {'plan': 'pro'},
);
await Posthog().group(groupType: 'company', groupKey: 'acme');
// Chiqishda — keyingi eventlar yangi anonim shaxsga bog'lanadi.
await Posthog().reset();
Feature flags
if (await Posthog().isFeatureEnabled('yangi_dizayn')) {
// ...
}
final variant = await Posthog().getFeatureFlag('tugma_rangi');
final result = await Posthog().getFeatureFlagResult('yangi_dizayn');
await Posthog().reloadFeatureFlags();
Bayroqlar diskda cache qilinadi, shuning uchun offline'da oxirgi ma'lum qiymatlar qaytadi.
Xatolar va loglar
try {
await riskyOperation();
} catch (e, s) {
await Posthog().captureException(error: e, stackTrace: s);
}
Posthog().logger.info('foydalanuvchi kirdi', {'usul': 'google'});
Posthog().logger.error('to\'lov muvaffaqiyatsiz', {'kod': 'E001'});
Tutilmagan Dart xatolarini avtomatik yig'ish uchun:
final config = PostHogConfig('<kalit>')
..errorTrackingConfig.captureFlutterErrors = true
..errorTrackingConfig.capturePlatformDispatcherErrors = true
..errorTrackingConfig.captureIsolateErrors = true;
Super properties
await Posthog().register('ilova_bosqichi', 'beta'); // har eventga qo'shiladi
await Posthog().unregister('ilova_bosqichi');
Maxfiylik
await Posthog().disable(); // yig'ishni to'xtatish
await Posthog().enable();
Boshidanoq o'chirish uchun config.optOut = true.
Session replay'da maxfiy maydonlarni yashirish:
PostHogMaskWidget(
child: Text('Karta raqami: 4111 1111 1111 1111'),
);
Konfiguratsiya
final config = PostHogConfig('<kalit>')
..host = 'https://us.i.posthog.com'
..flushAt = 20
..flushInterval = const Duration(seconds: 30)
..sessionReplay = true
..debug = true;
| Sozlama | Default | Tavsif |
|---|---|---|
host |
https://us.i.posthog.com |
API manzili (EU yoki self-hosted) |
flushAt |
20 |
Shuncha event yig'ilganda yuboriladi |
flushInterval |
30s |
Vaqt bo'yicha yuborish oralig'i |
maxQueueSize |
1000 |
Navbat chegarasi; oshsa eng eski o'chiriladi |
maxBatchSize |
50 |
Bitta so'rovdagi maksimal event |
captureApplicationLifecycleEvents |
true |
Application Opened va h.k. |
preloadFeatureFlags |
true |
setup() da bayroqlarni yuklash |
sendFeatureFlagEvents |
true |
$feature_flag_called yuborish |
sessionReplay |
false |
Session replay |
surveys |
true |
Surveys (web'da e'tiborsiz) |
personProfiles |
identifiedOnly |
Anonim eventlar uchun profil yaratish |
optOut |
false |
Yig'ishni boshidanoq o'chirish |
debug |
false |
Konsolga batafsil log |
Eventni yuborishdan oldin o'zgartirish yoki tashlab yuborish:
config.beforeSend = [
(event) => event.event == '\$screen' ? null : event, // tashlanadi
];
Rasmiy plagindan o'tish
Metod nomlari, parametr nomlari va default qiymatlar aynan bir xil. Import qatorini almashtiring:
// eski
import 'package:posthog_flutter/posthog_flutter.dart';
// yangi
import 'package:posthog_dart/posthog_dart.dart';
pubspec.yaml da:
dependencies:
# posthog_flutter: ^5.36.2
posthog_dart: ^0.1.0
Boshqa hech nima o'zgarmaydi. Native tomon (Android AndroidManifest.xml,
iOS Info.plist) sozlamalari endi kerak emas — ularni olib tashlashingiz
mumkin.
Diqqat: bu paket alohida distinct_id va navbat saqlaydi. Migratsiyadan keyin
mavjud foydalanuvchilarga yangi anonim ID beriladi; uzluksizlik kerak bo'lsa
config.bootstrap orqali eski qiymatni bering.
Cheklovlar
Quyidagilar native SDK'ni talab qiladi va sof Dart'da amalga oshirib bo'lmaydi. API mosligi uchun ular no-op sifatida saqlangan — mavjud kod kompilyatsiya bo'ladi, lekin hech nima yuborilmaydi:
registerPushNotificationToken(),unregisterPushNotificationToken(),capturePushNotificationOpened()— FCM/APNs token registratsiyasiPostHogConfig.pushIdentityProviderPostHogSessionReplayConfig.captureNativeScreens— Flutter UI'sini qoplagan native ekranni suratga olishPostHogErrorTrackingConfig.captureNativeExceptions— native fatal crash
Shuningdek:
- Exception steps buferi Dart'da yashaydi, shuning uchun native fatal crash'dan omon qolmaydi (rasmiy plaginda u native SDK'da edi).
- Web'da navbat xotirada: sahifa yangilanganda yuborilmagan eventlar
yo'qoladi. Foydalanuvchi shaxsi esa
localStorageda saqlanadi. - Native platform view'lar replay'da qora maska bilan qoplanadi (ularni suratga olish native SDK'ni talab qiladi).
Rasmiy plagindan farqlar
Windows va Linux qo'llab-quvvatlashidan tashqari:
beforeSendbarcha eventlarga qo'llanadi. Rasmiy SDK'da native tomondan yuborilgan eventlar (survey shownva boshqalar) undan o'tmasdi.- Retry backoff'ga jitter qo'shildi — ko'p qurilma offline'dan bir vaqtda qaytganda serverga to'lqin hosil qilmaydi.
- Uzoq offline holatda navbat tashlab yuborilmaydi. Rasmiy SDK 3 marta muvaffaqiyatsizlikdan keyin butun navbatni o'chirardi.
- Survey modelidagi bug tuzatildi: savol
idmaydoni xato ravishdatypedan o'qilardi, bu javob kalitlarini buzardi. - Survey branching (
end,specific_question,response_based) endi ishlaydi. Rasmiy plaginda bu qaror native SDK'da qabul qilinardi, web'da esa umuman qo'llab-quvvatlanmasdi. - Survey payload'ini tahlil qilish crash bermaydi: to'liqsiz ma'lumot default qiymatlarga tushadi.
Durationsozlamalari sub-soniyali aniqlikni saqlaydi (native API butun soniyalarni kutgani uchun ular yaxlitlanardi).
Kodda har bir ataylab qilingan chetlanish // PostHog upstream'dan farq:
izohi bilan belgilangan.
Ma'lumot saqlanishi
| Platforma | Navbat | Shaxs va sozlamalar |
|---|---|---|
| Windows | %APPDATA%/posthog/ |
%APPDATA%/posthog/state.json |
| Linux / macOS | application support katalogi | o'sha katalogda state.json |
| Android / iOS | application support katalogi | o'sha katalogda state.json |
| Web | xotira | localStorage |
Navbat: bitta fayl = bitta event, nomi UUIDv7. Bu tartibni kafolatlaydi va yozish paytida jarayon o'lsa faqat oxirgi, chala yozilgan event yo'qoladi.
Yuborish muvaffaqiyatsiz bo'lsa eksponensial backoff qo'llanadi (1s → 30s,
jitter bilan), Retry-After sarlavhasi hisobga olinadi. 4xx javoblar qayta
urinilmaydi; tarmoq xatolari va 5xx — urinilaveradi.
Namuna
example/ katalogida Windows, Linux, macOS, Android, iOS va Web'da
ishlaydigan to'liq ilova bor:
cd example
flutter run -d windows --dart-define=POSTHOG_KEY=phc_xxx
Litsenziya
MIT. Bu paket rasmiy
posthog-flutter plaginining
Dart kodiga asoslangan (MIT, © PostHog). To'liq atribut — LICENSE.
Bu jamoatchilik tomonidan yaratilgan paket va PostHog Inc. bilan rasmiy aloqasi yo'q.
Libraries
- posthog_dart
- Public Flutter API for the PostHog SDK.