mirror of
https://github.com/foss42/apidash.git
synced 2025-06-06 03:18:43 +08:00
Make Response headers modular
This commit is contained in:
@ -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();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user