V3-12: crash reporting (code only)

shouldInitializeCrashReporting() and scrubExtra() are pure, fully unit-tested decision/scrubbing functions wired into sentry_flutter via beforeSend/beforeBreadcrumb. Config.crashReportingEnabled defaults off; the DSN is a compile-time --dart-define, not a preference. RecordingEngine gained an injected onUnexpectedStop callback, firing once when restoreAfterProcessDeath finds a trip still 'recording' at launch -- the process died without a user stop.

Marked partially done: the ticket's real acceptance criteria (a forced crash landing in a real Sentry project from a release build, inspecting a real payload) need a Sentry account and a release build this environment can't produce.
This commit is contained in:
2026-08-17 19:32:54 -05:00
parent 0e605ef174
commit be50448917
14 changed files with 443 additions and 9 deletions

View File

@@ -142,6 +142,21 @@ class _SettingsBodyState extends ConsumerState<_SettingsBody> {
},
),
const Divider(),
const _SectionHeader('Crash reporting'),
SwitchListTile(
key: const Key('crash-reporting-switch'),
title: const Text('Send crash reports'),
subtitle: const Text(
'Off by default. No location, device id, or ride content is ever included '
'-- see V3-12. Takes effect on next launch.',
),
value: ref.watch(crashReportingEnabledProvider),
onChanged: (value) async {
await widget.config.setCrashReportingEnabled(value);
ref.read(crashReportingEnabledProvider.notifier).state = value;
},
),
const Divider(),
const _SectionHeader('Sync'),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 16),