buildActions method
Optional actions to show in the console toolbar
Implementation
@override
List<Widget> buildActions(BuildContext context) {
return [
PopupMenuButton<_ExportFormat>(
icon: const Icon(Icons.share),
tooltip: 'Export Network Logs',
onSelected: (format) {
final logs = NetworkLogStore.logs.toList();
if (logs.isEmpty) {
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('No network logs to export')),
);
return;
}
switch (format) {
case _ExportFormat.json:
final text = jsonEncode(logs.map((e) => e.toJson()).toList());
ExportUtil.exportData(text: text, title: 'Network Logs (JSON)');
case _ExportFormat.har:
final text = NetworkLog.toHarDocument(logs);
ExportUtil.exportData(text: text, title: 'Network Logs (HAR)');
case _ExportFormat.curl:
final text = logs.map((e) => e.toCurl()).join('\n\n');
ExportUtil.exportData(text: text, title: 'Network Logs (cURL)');
}
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('Exported as ${format.label}')),
);
},
itemBuilder:
(_) => const [
PopupMenuItem(
value: _ExportFormat.json,
child: Text('Export as JSON'),
),
PopupMenuItem(
value: _ExportFormat.har,
child: Text('Export as HAR'),
),
PopupMenuItem(
value: _ExportFormat.curl,
child: Text('Export as cURL'),
),
],
),
IconButton(
tooltip: 'Clear Network Logs',
icon: const Icon(Icons.delete),
onPressed: () async {
final confirmed = await showDialog<bool>(
context: context,
builder:
(ctx) => AlertDialog(
title: const Text('Clear Network Logs?'),
content: const Text(
'This will permanently delete all captured requests.',
),
actions: [
TextButton(
child: const Text('Cancel'),
onPressed: () => Navigator.pop(ctx, false),
),
ElevatedButton(
child: const Text('Clear'),
onPressed: () => Navigator.pop(ctx, true),
),
],
),
);
if (confirmed ?? false) NetworkLogStore.clear();
},
),
];
}