iOS + Android from one Dart codebase. Dart error zones for crash capture, route observers for screen tracking, Dio / http client interceptors for network calls — native crash reporting on both platforms included.
1// In your main.dart2import "package:justanalytics/justanalytics.dart";34void main() async {5WidgetsFlutterBinding.ensureInitialized();6await JustAnalytics.init(7siteId: "YOUR_SITE_ID",8environment: "production",9);10runApp(const MyApp());11}
One Dart package, both platforms — same crash dashboard for iOS and Android builds.
Dart-side exceptions via runZonedGuarded. Native crashes on iOS (Mach signals) and Android (libsignal) bridged through the same pipeline.
Dio interceptor — one line in your client setup. Or wrap the http package's Client class. Every request becomes a span.
JustAnalyticsNavigatorObserver plugs into MaterialApp.navigatorObservers. Works with GoRouter via the goRouter.observers list.
Apple PrivacyInfo.xcprivacy and Play Store Data Safety form ship with the package. ATT-friendly on iOS, no GAID on Android.
WidgetsBinding.addTimingsCallback captures slow frames. Identifies which routes are janky on which device classes.
Crash-free-session-rate, p95 startup, network-error-rate per route. Email, webhook, or PagerDuty.
pub add the package, wrap runApp in a guarded zone, mount the navigator observer.
# Install
flutter pub add justanalytics
# main.dart
import 'package:flutter/material.dart';
import 'package:justanalytics/justanalytics.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await JustAnalytics.init(
siteId: const String.fromEnvironment('JA_SITE_ID'),
environment: 'production',
captureCrashes: true,
captureNetwork: true,
captureScreens: true,
);
runApp(MyApp());
}
class MyApp extends StatelessWidget {
Widget build(BuildContext context) => MaterialApp(
navigatorObservers: [JustAnalyticsNavigatorObserver()],
home: HomePage(),
);
}Replace five tools with one platform. Start with the free tier or try Pro free for 7 days.
Start 7-Day Free Trial