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) { return Scaffold( appBar: AppBar( title: Text(title), ), body: SingleChildScrollView( scrollDirection: Axis.vertical, child: Text(format(data)), ), ); } static String format(Map jsonInput) { return prettyJson(jsonInput, indent: 2); //return jsonInput.replaceAllMapped(RegExp(r'[{,}]'), (match) => "${match.group(0)}\n "); } static void asDialog(BuildContext context, Map dataMap) { showDialog(context: context, builder: (context) { return 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")) ], ); }); } }