unilitix 2.0.15
unilitix: ^2.0.15 copied to clipboard
African-first mobile UX analytics for Flutter. Pure Dart SDK — track sessions, screens, events and crashes with a single line of code.
Unilitix Flutter SDK #
African-first mobile UX analytics for Flutter. Track sessions, screens, events and crashes with a single line of code.
Install #
# pubspec.yaml
dependencies:
unilitix: ^2.0.15
flutter pub get
Quick start #
Copy this entire block into your main.dart and replace YOUR_API_KEY:
import 'package:flutter/material.dart';
import 'package:unilitix/unilitix.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Unilitix.init(
config: const UnilitixConfig(apiKey: 'YOUR_API_KEY'),
);
runApp(
UnilitixGestureDetector(
child: const MyApp(),
),
);
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
navigatorObservers: [Unilitix.observer], // screen tracking
home: const HomeScreen(),
);
}
}
Get your API key at app.unilitix.com → Settings → Apps → Create App.
Verify your integration #
In debug mode, within 5 seconds of launch you will see:
[Unilitix] ✅ SDK initialized
[Unilitix] ✅ Session started
If you see a ⚠️ warning about screen events, confirm Unilitix.observer is inside navigatorObservers in your MaterialApp. Silent in production builds.
Common mistakes #
| ❌ Wrong | ✅ Correct |
|---|---|
Unilitix.init('your_api_key') |
Unilitix.init(config: const UnilitixConfig(apiKey: '...')) |
runApp(const MyApp()) |
runApp(UnilitixGestureDetector(child: const MyApp())) |
UnilitixNavigatorObserver() |
Unilitix.observer |
Track custom events #
Unilitix.track('purchase_completed', {
'amount': 5000,
'currency': 'NGN',
});
// Any key/value properties — strings, numbers, booleans
Unilitix.track('loan_applied', {
'amount': 50000,
'loan_type': 'personal',
'screen': 'LoanApplication',
});
Identify users #
// Call after login
Unilitix.identify('user_123', {
'name': 'Tosin',
'plan': 'pro',
'country': 'Nigeria',
});
// Call on logout
Unilitix.reset();
Configuration #
All options have sensible defaults. Only override what you need:
await Unilitix.init(
config: const UnilitixConfig(
apiKey: 'YOUR_API_KEY',
debug: true, // console logging
autoTrackScreens: true, // screen flow tracking
autoTrackTaps: true, // tap heatmaps
autoTrackCrashes: true, // crash reports
autoTrackRageTaps: true, // frustration detection
flushIntervalSeconds: 30, // upload frequency
sessionTimeoutSeconds: 1800, // session idle timeout (30 min)
maskInputs: true, // hide sensitive fields
sampleRate: 1.0, // 100% of sessions
captureScreenshots: true, // visual session replay
captureSnapshots: true, // widget tree capture
uploadScreenshotsOnWifiOnly: true, // save mobile data
),
);
Session control #
await Unilitix.startSession();
await Unilitix.endSession();
await Unilitix.flush();
Privacy #
Unilitix.optOut();
Unilitix.optIn();
Wrap sensitive widgets to exclude them from recordings:
UnilitixPrivate(
child: CreditCardWidget(),
)
Migration from v1.x #
// Before (v1.x)
await Unilitix.init('your_api_key');
runApp(const MyApp());
// After (v2.x)
await Unilitix.init(
config: const UnilitixConfig(apiKey: 'your_api_key'),
);
runApp(
UnilitixGestureDetector(
child: const MyApp(),
),
);
Requirements #
| Platform | Minimum version |
|---|---|
| Android | API 21 (Android 5.0) |
| iOS | In development — track progress |
Support #
- Docs: docs.unilitix.com
- Email: support@unilitix.com
- Issues: GitHub Issues