Files
Client/lib/widget/debug/json_viewer.dart
T

50 lines
1.9 KiB
Dart

import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
class JsonViewer extends StatelessWidget {
final String title;
final Map<String, dynamic> 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<String, dynamic> jsonInput) => _encoder.convert(jsonInput);
static void asDialog(BuildContext context, Map<String, dynamic> 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) {
if (!context.mounted) return;
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) {
if (!context.mounted) return;
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'))
],
));
}
}