Refine backendless share intake
This commit is contained in:
@@ -10,6 +10,7 @@ import 'package:relationship_saver/features/ai_digest/presentation/ai_digest_rev
|
||||
import 'package:relationship_saver/features/auth/session_controller.dart';
|
||||
import 'package:relationship_saver/features/local/local_models.dart';
|
||||
import 'package:relationship_saver/features/reminders/scheduling/reminder_scheduler_provider.dart';
|
||||
import 'package:relationship_saver/features/share_intake/application/share_intake_debug_log.dart';
|
||||
import 'package:relationship_saver/features/share_intake/share_capture_flow.dart';
|
||||
import 'package:relationship_saver/features/share_intake/share_capture_models.dart';
|
||||
import 'package:relationship_saver/features/share_intake/share_inbox_view.dart';
|
||||
@@ -210,6 +211,11 @@ class SettingsView extends ConsumerWidget {
|
||||
icon: const Icon(Icons.inbox_rounded),
|
||||
label: const Text('Open Share Inbox'),
|
||||
),
|
||||
OutlinedButton.icon(
|
||||
onPressed: () => _showShareDiagnostics(context),
|
||||
icon: const Icon(Icons.bug_report_rounded),
|
||||
label: const Text('Share Diagnostics'),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
@@ -411,6 +417,26 @@ class SettingsView extends ConsumerWidget {
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Future<void> _showShareDiagnostics(BuildContext context) async {
|
||||
final ShareIntakeDebugLog debugLog = const ShareIntakeDebugLog();
|
||||
final List<ShareIntakeDebugEvent> events = await debugLog.read();
|
||||
if (!context.mounted) {
|
||||
return;
|
||||
}
|
||||
await showDialog<void>(
|
||||
context: context,
|
||||
builder: (BuildContext context) => _ShareDiagnosticsDialog(
|
||||
events: events,
|
||||
onClear: () async {
|
||||
await debugLog.clear();
|
||||
if (context.mounted) {
|
||||
Navigator.of(context).pop();
|
||||
}
|
||||
},
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class _SettingRow extends StatelessWidget {
|
||||
@@ -462,6 +488,57 @@ class _SettingRow extends StatelessWidget {
|
||||
}
|
||||
}
|
||||
|
||||
class _ShareDiagnosticsDialog extends StatelessWidget {
|
||||
const _ShareDiagnosticsDialog({required this.events, required this.onClear});
|
||||
|
||||
final List<ShareIntakeDebugEvent> events;
|
||||
final Future<void> Function() onClear;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return AlertDialog(
|
||||
title: const Text('Share Diagnostics'),
|
||||
content: SizedBox(
|
||||
width: 520,
|
||||
child: events.isEmpty
|
||||
? const Text(
|
||||
'No Flutter share events recorded yet. If you tried sharing, the native share extension likely did not open the app or the plugin did not receive the URL callback.',
|
||||
)
|
||||
: SingleChildScrollView(
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: events
|
||||
.map(
|
||||
(ShareIntakeDebugEvent event) => Padding(
|
||||
padding: const EdgeInsets.only(bottom: 10),
|
||||
child: SelectableText(
|
||||
'${_debugTimeLabel(event.at)} ${event.stage}\n${event.message}',
|
||||
),
|
||||
),
|
||||
)
|
||||
.toList(growable: false),
|
||||
),
|
||||
),
|
||||
),
|
||||
actions: <Widget>[
|
||||
TextButton(
|
||||
onPressed: events.isEmpty ? null : onClear,
|
||||
child: const Text('Clear'),
|
||||
),
|
||||
FilledButton(
|
||||
onPressed: () => Navigator.of(context).pop(),
|
||||
child: const Text('Close'),
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
String _debugTimeLabel(DateTime value) {
|
||||
return '${value.hour.toString().padLeft(2, '0')}:${value.minute.toString().padLeft(2, '0')}:${value.second.toString().padLeft(2, '0')}';
|
||||
}
|
||||
|
||||
class _LlmConfigDraft {
|
||||
const _LlmConfigDraft({
|
||||
required this.provider,
|
||||
|
||||
Reference in New Issue
Block a user