import 'dart:convert'; import 'package:flutter/material.dart'; import '../../utils/clipboard_helper.dart'; class JsonViewer extends StatelessWidget { final String title; final Map data; const JsonViewer({super.key, required this.title, required this.data}); @override Widget build(BuildContext context) => Scaffold( appBar: AppBar(title: Text(title)), body: SingleChildScrollView( scrollDirection: Axis.vertical, child: Text(format(data)), ), ); static final _encoder = const JsonEncoder.withIndent(' '); static String format(Map jsonInput) => _encoder.convert(jsonInput); static void asDialog(BuildContext context, Map dataMap) { showDialog( context: context, builder: (dialogCtx) => AlertDialog( scrollable: true, title: const Row( children: [Icon(Icons.bug_report_outlined), Text('Rohdaten')], ), content: Text(JsonViewer.format(dataMap)), actions: [ TextButton( onPressed: () => copyToClipboard( dialogCtx, JsonViewer.format(dataMap), successMessage: 'Formatiertes JSON kopiert', ), child: const Text('Kopieren'), ), TextButton( onPressed: () => copyToClipboard( dialogCtx, dataMap.toString(), successMessage: 'Inline JSON kopiert', ), child: const Text('Inline Kopieren'), ), TextButton( onPressed: () => Navigator.of(dialogCtx).pop(), child: const Text('Schließen'), ), ], ), ); } }