Make Response headers modular

This commit is contained in:
Ankit Mahato
2023-03-16 16:54:48 +05:30
parent 88ba41ce89
commit b54275dbc3

View File

@ -1,9 +1,11 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:apidash/providers/providers.dart'; import 'package:apidash/providers/providers.dart';
import 'package:apidash/widgets/widgets.dart';
import 'package:apidash/consts.dart'; import 'package:apidash/consts.dart';
const kHeaderRow = ["Header Name", "Header Value"];
class ResponseHeaders extends ConsumerStatefulWidget { class ResponseHeaders extends ConsumerStatefulWidget {
const ResponseHeaders({super.key}); const ResponseHeaders({super.key});
@ -32,19 +34,19 @@ class _ResponseHeadersState extends ConsumerState<ResponseHeaders> {
getHeaderBox(context, responseHeaders, "Response Headers"), getHeaderBox(context, responseHeaders, "Response Headers"),
if (responseHeaders.isNotEmpty) kVSpacer5, if (responseHeaders.isNotEmpty) kVSpacer5,
if (responseHeaders.isNotEmpty) if (responseHeaders.isNotEmpty)
getTable( MapTable(
context, map: responseHeaders,
responseHeaders, colNames: kHeaderRow,
["Header Name", "Header Value"], firstColumnHeaderCase: true,
), ),
kVSpacer10, kVSpacer10,
getHeaderBox(context, requestHeaders, "Request Headers"), getHeaderBox(context, requestHeaders, "Request Headers"),
if (requestHeaders.isNotEmpty) kVSpacer5, if (requestHeaders.isNotEmpty) kVSpacer5,
if (requestHeaders.isNotEmpty) if (requestHeaders.isNotEmpty)
getTable( MapTable(
context, map: requestHeaders,
requestHeaders, colNames: kHeaderRow,
["Header Name", "Header Value"], firstColumnHeaderCase: true,
), ),
], ],
), ),
@ -65,97 +67,11 @@ class _ResponseHeadersState extends ConsumerState<ResponseHeaders> {
), ),
), ),
if (map.isNotEmpty) if (map.isNotEmpty)
TextButton( CopyButton(
onPressed: () async { toCopy: encoder.convert(map),
await Clipboard.setData(
ClipboardData(text: encoder.convert(map)));
},
child: Row(
children: const [
Icon(
Icons.content_copy,
size: 20,
),
Text("Copy")
],
),
), ),
], ],
), ),
); );
} }
Widget getTable(BuildContext context, Map map, List<String> headers) {
return Table(
border: TableBorder(
horizontalInside: BorderSide(
color: Theme.of(context).colorScheme.surfaceVariant,
),
),
columnWidths: const <int, TableColumnWidth>{
0: FlexColumnWidth(),
1: FlexColumnWidth(),
},
defaultVerticalAlignment: TableCellVerticalAlignment.middle,
children: [
getHeaderRow(context, headers),
...getTableRowsFromMap(context, map),
],
);
}
TableRow getHeaderRow(BuildContext context, List<String> headers) {
return TableRow(
children: headers
.map<TableCell>(
(e) => TableCell(
verticalAlignment: TableCellVerticalAlignment.top,
child: Padding(
padding: kP1,
child: SelectableText(
e,
style: kCodeStyle.copyWith(
fontWeight: FontWeight.bold,
color: Theme.of(context).colorScheme.primary,
),
),
),
),
)
.toList(),
);
}
List<TableRow> getTableRowsFromMap(BuildContext context, Map map) {
return map.entries
.map<TableRow>(
(entry) => TableRow(
children: [
TableCell(
verticalAlignment: TableCellVerticalAlignment.top,
child: Padding(
padding: kP1,
child: SelectableText(
entry.key,
style: kCodeStyle.copyWith(
color: Theme.of(context).colorScheme.tertiary,
),
),
),
),
TableCell(
verticalAlignment: TableCellVerticalAlignment.top,
child: Padding(
padding: kP1,
child: SelectableText(
entry.value,
style: kCodeStyle,
),
),
),
],
),
)
.toList();
}
} }