import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:pretty_json/pretty_json.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 String format(Map jsonInput) => prettyJson(jsonInput, indent: 2); static void asDialog(BuildContext context, Map dataMap) { showDialog(context: context, builder: (context) => AlertDialog( scrollable: true, title: const Row(children: [Icon(Icons.bug_report_outlined), Text('Rohdaten')]), content: Text(JsonViewer.format(dataMap)), actions: [ TextButton(onPressed: () { Clipboard.setData(ClipboardData(text: JsonViewer.format(dataMap))).then((value) { showDialog(context: context, builder: (context) => const AlertDialog(content: Text('Formatiertes JSON wurde erfolgreich in deiner Zwischenlage abgelegt.'))); }); }, child: const Text('Kopieren')), TextButton(onPressed: () { Clipboard.setData(ClipboardData(text: dataMap.toString())).then((value) { showDialog(context: context, builder: (context) => const AlertDialog(content: Text('Unformatiertes JSON wurde erfolgreich in deiner Zwischenablage abgelegt.'))); }); }, child: const Text('Inline Kopieren')), TextButton(onPressed: () => Navigator.of(context).pop(), child: const Text('Schließen')) ], )); } }