Flutter Onboarding Tracking: Measure Where Users Drop Off
Flutter gives you one codebase for iOS and Android. Your onboarding analytics should give you one funnel that shows drop-off on both. Here's how to set it up.
What you're trying to measure
The goal isn't tracking. The goal is answering: which step in my onboarding flow causes the most users to quit?
To answer that, you need:
- An event fired at each meaningful step (not page view - completed action)
- A funnel that sequences those events
- Per-step conversion rates, split by platform if needed
Install the Flutter SDK
Add the OnRamp SDK to your pubspec.yaml:
dependencies:
onramp_sdk: ^0.2.0
Then run:
flutter pub get
Initialise in main()
import 'package:onramp_sdk/onramp_sdk.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await OnRamp.init(apiKey: 'onr_your_key_here');
runApp(const MyApp());
}
✓ Tip
Call OnRamp.init() once before runApp(). Calling it again on hot reload or widget rebuild is safe but unnecessary - the SDK ignores duplicate inits.
Track each onboarding step
import 'package:onramp_sdk/onramp_sdk.dart';
class SignupScreen extends StatefulWidget {
// ...
}
class _SignupScreenState extends State<SignupScreen> {
Future<void> _handleSignup(String email, String password) async {
await AuthService.createAccount(email, password);
// Fire after the action succeeds
await OnRamp.step('account_created');
if (mounted) {
Navigator.pushNamed(context, '/verify-email');
}
}
}
Add properties for segment analysis
await OnRamp.step('account_created', properties: {
'plan': 'trial',
'signup_method': 'google',
'platform': Platform.isIOS ? 'ios' : 'android',
});
Properties let you split the funnel: if iOS users complete onboarding at 70% and Android at 45%, you've found a platform-specific problem to fix.
Recommended step map for Flutter onboarding
| Step | Event name | When to fire |
|---|---|---|
| App first opened | app_opened | After main() init |
| Signup started | signup_started | When user taps signup button |
| Account created | account_created | After account creation succeeds |
| Profile completed | profile_completed | After profile form submitted |
| Permissions granted | permissions_granted | After user accepts notifications |
| First action taken | first_action | After user creates first item |
! Note
Don't fire steps in initState(). If the widget mounts before the user does anything, you'll count visits as completions and your funnel data will be wrong.
Build the funnel
Open the OnRamp dashboard → Funnel → New funnel
Name it to match the flow: "Core onboarding", "Payment flow", etc.
Add steps in order
Enter each step name exactly as you pass to OnRamp.step(). The funnel uses exact string matching - account_created ≠ AccountCreated.
Set conversion window to 7 days
Flutter apps on mobile often see users who install, don't open for a day or two, then complete onboarding. A 24h window undercounts them.
Reading the funnel
Step completion rate
Completion = users who completed step N ÷ users who entered step N
Example: 190 ÷ 400 = 47.5% completed the 'account_created' step
What to act on first: the step with the highest count of abandoned users, not necessarily the highest abandonment rate.
Flutter-specific things to watch for
Permission prompt timing. If you ask for push notification permissions during onboarding, many users deny it and immediately close the app. Track permissions_granted and permissions_denied separately so you can distinguish permission refusal from genuine onboarding failure.
iOS vs Android differences. Flutter renders identically but the platform behaves differently. Background app refresh, keyboard behavior, and system permission dialogs all differ. If iOS and Android show different drop-off at the same step, it's almost always a platform-specific behavior - not the design.
Deep link re-entry. If your flow includes email verification with a deep link back into the app, the deep link handler needs to fire the corresponding step. This is a common gap - users click the link, the app opens, but the step never fires.
Flutter onboarding analytics
See your Flutter funnel in minutes
Install the Dart SDK, call OnRamp.step() at each milestone, and your onboarding funnel populates automatically - iOS and Android side by side.
Start free trial →
