buildActions method

  1. @override
List<Widget> buildActions(
  1. BuildContext context
)
override

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();
      },
    ),
  ];
}