mirror of
https://github.com/foss42/apidash.git
synced 2025-08-06 13:51:20 +08:00
Code cleanup & Refactoring
This commit is contained in:
@ -56,6 +56,7 @@ const kForegroundOpacity = 0.05;
|
|||||||
const kOverlayBackgroundOpacity = 0.5;
|
const kOverlayBackgroundOpacity = 0.5;
|
||||||
|
|
||||||
const kTextStyleButton = TextStyle(fontWeight: FontWeight.bold);
|
const kTextStyleButton = TextStyle(fontWeight: FontWeight.bold);
|
||||||
|
const kTextStyleTab = TextStyle(fontSize: 14);
|
||||||
const kTextStyleButtonSmall = TextStyle(fontSize: 12);
|
const kTextStyleButtonSmall = TextStyle(fontSize: 12);
|
||||||
const kFormDataButtonLabelTextStyle = TextStyle(
|
const kFormDataButtonLabelTextStyle = TextStyle(
|
||||||
fontSize: 12,
|
fontSize: 12,
|
||||||
@ -71,9 +72,13 @@ const kP5 = EdgeInsets.all(5);
|
|||||||
const kP8 = EdgeInsets.all(8);
|
const kP8 = EdgeInsets.all(8);
|
||||||
const kPs8 = EdgeInsets.only(left: 8);
|
const kPs8 = EdgeInsets.only(left: 8);
|
||||||
const kPs2 = EdgeInsets.only(left: 2);
|
const kPs2 = EdgeInsets.only(left: 2);
|
||||||
|
const kPe8 = EdgeInsets.only(right: 8.0);
|
||||||
const kPh20v5 = EdgeInsets.symmetric(horizontal: 20, vertical: 5);
|
const kPh20v5 = EdgeInsets.symmetric(horizontal: 20, vertical: 5);
|
||||||
const kPh20v10 = EdgeInsets.symmetric(horizontal: 20, vertical: 10);
|
const kPh20v10 = EdgeInsets.symmetric(horizontal: 20, vertical: 10);
|
||||||
const kP10 = EdgeInsets.all(10);
|
const kP10 = EdgeInsets.all(10);
|
||||||
|
const kPv8 = EdgeInsets.symmetric(vertical: 8);
|
||||||
|
const kPv2 = EdgeInsets.symmetric(vertical: 2);
|
||||||
|
const kPh2 = EdgeInsets.symmetric(horizontal: 2);
|
||||||
const kPt24o8 = EdgeInsets.only(top: 24, left: 8.0, right: 8.0, bottom: 8.0);
|
const kPt24o8 = EdgeInsets.only(top: 24, left: 8.0, right: 8.0, bottom: 8.0);
|
||||||
const kPt5o10 =
|
const kPt5o10 =
|
||||||
EdgeInsets.only(left: 10.0, right: 10.0, top: 5.0, bottom: 10.0);
|
EdgeInsets.only(left: 10.0, right: 10.0, top: 5.0, bottom: 10.0);
|
||||||
@ -105,8 +110,6 @@ const kPb10 = EdgeInsets.only(
|
|||||||
const kPb15 = EdgeInsets.only(
|
const kPb15 = EdgeInsets.only(
|
||||||
bottom: 15,
|
bottom: 15,
|
||||||
);
|
);
|
||||||
const kPr8CollectionPane = EdgeInsets.only(right: 8.0);
|
|
||||||
const kpsV5 = EdgeInsets.symmetric(vertical: 2);
|
|
||||||
const kHSpacer4 = SizedBox(width: 4);
|
const kHSpacer4 = SizedBox(width: 4);
|
||||||
const kHSpacer5 = SizedBox(width: 5);
|
const kHSpacer5 = SizedBox(width: 5);
|
||||||
const kHSpacer10 = SizedBox(width: 10);
|
const kHSpacer10 = SizedBox(width: 10);
|
||||||
@ -118,7 +121,7 @@ const kVSpacer20 = SizedBox(height: 20);
|
|||||||
const kVSpacer40 = SizedBox(height: 40);
|
const kVSpacer40 = SizedBox(height: 40);
|
||||||
|
|
||||||
const kTabAnimationDuration = Duration(milliseconds: 200);
|
const kTabAnimationDuration = Duration(milliseconds: 200);
|
||||||
const kTabHeight = 45.0;
|
const kTabHeight = 32.0;
|
||||||
const kHeaderHeight = 32.0;
|
const kHeaderHeight = 32.0;
|
||||||
const kSegmentHeight = 24.0;
|
const kSegmentHeight = 24.0;
|
||||||
const kTextButtonMinWidth = 44.0;
|
const kTextButtonMinWidth = 44.0;
|
||||||
@ -537,3 +540,36 @@ const kLabelSave = "Save";
|
|||||||
const kLabelDownload = "Download";
|
const kLabelDownload = "Download";
|
||||||
const kLabelSaving = "Saving";
|
const kLabelSaving = "Saving";
|
||||||
const kLabelSaved = "Saved";
|
const kLabelSaved = "Saved";
|
||||||
|
// Request Pane
|
||||||
|
const kLabelRequest = "Request";
|
||||||
|
const kLabelHideCode = "Hide Code";
|
||||||
|
const kLabelViewCode = "View Code";
|
||||||
|
const kLabelURLParams = "URL Params";
|
||||||
|
const kLabelHeaders = "Headers";
|
||||||
|
const kLabelBody = "Body";
|
||||||
|
const kNameCheckbox = "Checkbox";
|
||||||
|
const kNameURLParam = "URL Parameter";
|
||||||
|
const kNameHeader = "Header Name";
|
||||||
|
const kNameValue = "Value";
|
||||||
|
const kNameField = "Field";
|
||||||
|
const kHintAddURLParam = "Add URL Parameter";
|
||||||
|
const kHintAddValue = "Add Value";
|
||||||
|
const kHintAddName = "Add Name";
|
||||||
|
const kHintAddFieldName = "Add Field Name";
|
||||||
|
const kLabelAddParam = "Add Param";
|
||||||
|
const kLabelAddHeader = "Add Header";
|
||||||
|
const kLabelSelectFile = "Select File";
|
||||||
|
const kLabelAddFormField = "Add Form Field";
|
||||||
|
// Response Pane
|
||||||
|
const kLabelNotSent = "Not Sent";
|
||||||
|
const kLabelResponse = "Response";
|
||||||
|
const kLabelResponseBody = "Response Body";
|
||||||
|
const kTooltipClearResponse = "Clear Response";
|
||||||
|
const kHeaderRow = ["Header Name", "Header Value"];
|
||||||
|
const kLabelRequestHeaders = "Request Headers";
|
||||||
|
const kLabelResponseHeaders = "Response Headers";
|
||||||
|
const kLabelItems = "items";
|
||||||
|
const kMsgError = "Error: Response data does not exist.";
|
||||||
|
const kMsgNullBody = "Response body is missing (null).";
|
||||||
|
const kMsgNoContent = "No content";
|
||||||
|
const kMsgUnknowContentType = "Unknown Response Content-Type";
|
||||||
|
@ -26,7 +26,7 @@ class CollectionPane extends ConsumerWidget {
|
|||||||
crossAxisAlignment: CrossAxisAlignment.stretch,
|
crossAxisAlignment: CrossAxisAlignment.stretch,
|
||||||
children: [
|
children: [
|
||||||
Padding(
|
Padding(
|
||||||
padding: kPr8CollectionPane,
|
padding: kPe8,
|
||||||
child: Wrap(
|
child: Wrap(
|
||||||
alignment: WrapAlignment.spaceBetween,
|
alignment: WrapAlignment.spaceBetween,
|
||||||
children: [
|
children: [
|
||||||
@ -115,7 +115,7 @@ class _RequestListState extends ConsumerState<RequestList> {
|
|||||||
thumbVisibility: alwaysShowCollectionPaneScrollbar ? true : null,
|
thumbVisibility: alwaysShowCollectionPaneScrollbar ? true : null,
|
||||||
radius: const Radius.circular(12),
|
radius: const Radius.circular(12),
|
||||||
child: ReorderableListView.builder(
|
child: ReorderableListView.builder(
|
||||||
padding: kPr8CollectionPane,
|
padding: kPe8,
|
||||||
scrollController: controller,
|
scrollController: controller,
|
||||||
buildDefaultDragHandles: false,
|
buildDefaultDragHandles: false,
|
||||||
itemCount: requestSequence.length,
|
itemCount: requestSequence.length,
|
||||||
|
@ -52,8 +52,8 @@ class _FormDataBodyState extends ConsumerState<FormDataWidget> {
|
|||||||
rows: formRows,
|
rows: formRows,
|
||||||
columns: [
|
columns: [
|
||||||
DaviColumn(
|
DaviColumn(
|
||||||
cellPadding: kpsV5,
|
cellPadding: kPv2,
|
||||||
name: 'Key',
|
name: kNameField,
|
||||||
grow: 4,
|
grow: 4,
|
||||||
cellBuilder: (_, row) {
|
cellBuilder: (_, row) {
|
||||||
int idx = row.index;
|
int idx = row.index;
|
||||||
@ -63,7 +63,7 @@ class _FormDataBodyState extends ConsumerState<FormDataWidget> {
|
|||||||
child: FormDataField(
|
child: FormDataField(
|
||||||
keyId: "$selectedId-$idx-form-v-$seed",
|
keyId: "$selectedId-$idx-form-v-$seed",
|
||||||
initialValue: formRows[idx].name,
|
initialValue: formRows[idx].name,
|
||||||
hintText: " Add Key",
|
hintText: kHintAddFieldName,
|
||||||
onChanged: (value) {
|
onChanged: (value) {
|
||||||
formRows[idx] = formRows[idx].copyWith(name: value);
|
formRows[idx] = formRows[idx].copyWith(name: value);
|
||||||
if (isLast && !isAddingRow) {
|
if (isLast && !isAddingRow) {
|
||||||
@ -93,7 +93,7 @@ class _FormDataBodyState extends ConsumerState<FormDataWidget> {
|
|||||||
),
|
),
|
||||||
DaviColumn(
|
DaviColumn(
|
||||||
width: 40,
|
width: 40,
|
||||||
cellPadding: kpsV5,
|
cellPadding: kPv2,
|
||||||
cellAlignment: Alignment.center,
|
cellAlignment: Alignment.center,
|
||||||
cellBuilder: (_, row) {
|
cellBuilder: (_, row) {
|
||||||
return Text(
|
return Text(
|
||||||
@ -103,9 +103,9 @@ class _FormDataBodyState extends ConsumerState<FormDataWidget> {
|
|||||||
},
|
},
|
||||||
),
|
),
|
||||||
DaviColumn(
|
DaviColumn(
|
||||||
name: 'Value',
|
name: kNameValue,
|
||||||
grow: 4,
|
grow: 4,
|
||||||
cellPadding: kpsV5,
|
cellPadding: kPv2,
|
||||||
cellBuilder: (_, row) {
|
cellBuilder: (_, row) {
|
||||||
int idx = row.index;
|
int idx = row.index;
|
||||||
bool isLast = idx + 1 == formRows.length;
|
bool isLast = idx + 1 == formRows.length;
|
||||||
@ -145,7 +145,7 @@ class _FormDataBodyState extends ConsumerState<FormDataWidget> {
|
|||||||
(formRows[idx].type == FormDataType.file &&
|
(formRows[idx].type == FormDataType.file &&
|
||||||
formRows[idx].value.isNotEmpty)
|
formRows[idx].value.isNotEmpty)
|
||||||
? formRows[idx].value.toString()
|
? formRows[idx].value.toString()
|
||||||
: "Select File",
|
: kLabelSelectFile,
|
||||||
textAlign: TextAlign.center,
|
textAlign: TextAlign.center,
|
||||||
overflow: TextOverflow.ellipsis,
|
overflow: TextOverflow.ellipsis,
|
||||||
style: kFormDataButtonLabelTextStyle,
|
style: kFormDataButtonLabelTextStyle,
|
||||||
@ -159,7 +159,7 @@ class _FormDataBodyState extends ConsumerState<FormDataWidget> {
|
|||||||
: CellField(
|
: CellField(
|
||||||
keyId: "$selectedId-$idx-form-v-$seed",
|
keyId: "$selectedId-$idx-form-v-$seed",
|
||||||
initialValue: formRows[idx].value,
|
initialValue: formRows[idx].value,
|
||||||
hintText: " Add Value",
|
hintText: kHintAddValue,
|
||||||
onChanged: (value) {
|
onChanged: (value) {
|
||||||
formRows[idx] = formRows[idx].copyWith(value: value);
|
formRows[idx] = formRows[idx].copyWith(value: value);
|
||||||
if (isLast && !isAddingRow) {
|
if (isLast && !isAddingRow) {
|
||||||
@ -231,7 +231,7 @@ class _FormDataBodyState extends ConsumerState<FormDataWidget> {
|
|||||||
},
|
},
|
||||||
icon: const Icon(Icons.add),
|
icon: const Icon(Icons.add),
|
||||||
label: const Text(
|
label: const Text(
|
||||||
"Add Form Data",
|
kLabelAddFormField,
|
||||||
style: kTextStyleButton,
|
style: kTextStyleButton,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
@ -59,7 +59,7 @@ class EditRequestHeadersState extends ConsumerState<EditRequestHeaders> {
|
|||||||
rows: headerRows,
|
rows: headerRows,
|
||||||
columns: [
|
columns: [
|
||||||
DaviColumn(
|
DaviColumn(
|
||||||
name: 'Checkbox',
|
name: kNameCheckbox,
|
||||||
width: 30,
|
width: 30,
|
||||||
cellBuilder: (_, row) {
|
cellBuilder: (_, row) {
|
||||||
int idx = row.index;
|
int idx = row.index;
|
||||||
@ -80,7 +80,7 @@ class EditRequestHeadersState extends ConsumerState<EditRequestHeaders> {
|
|||||||
},
|
},
|
||||||
),
|
),
|
||||||
DaviColumn(
|
DaviColumn(
|
||||||
name: 'Header Name',
|
name: kNameHeader,
|
||||||
width: 70,
|
width: 70,
|
||||||
grow: 1,
|
grow: 1,
|
||||||
cellBuilder: (_, row) {
|
cellBuilder: (_, row) {
|
||||||
@ -89,7 +89,7 @@ class EditRequestHeadersState extends ConsumerState<EditRequestHeaders> {
|
|||||||
return HeaderField(
|
return HeaderField(
|
||||||
keyId: "$selectedId-$idx-headers-k-$seed",
|
keyId: "$selectedId-$idx-headers-k-$seed",
|
||||||
initialValue: headerRows[idx].name,
|
initialValue: headerRows[idx].name,
|
||||||
hintText: "Add Header Name",
|
hintText: kHintAddName,
|
||||||
onChanged: (value) {
|
onChanged: (value) {
|
||||||
headerRows[idx] = headerRows[idx].copyWith(name: value);
|
headerRows[idx] = headerRows[idx].copyWith(name: value);
|
||||||
if (isLast && !isAddingRow) {
|
if (isLast && !isAddingRow) {
|
||||||
@ -115,7 +115,7 @@ class EditRequestHeadersState extends ConsumerState<EditRequestHeaders> {
|
|||||||
},
|
},
|
||||||
),
|
),
|
||||||
DaviColumn(
|
DaviColumn(
|
||||||
name: 'Header Value',
|
name: kNameValue,
|
||||||
grow: 1,
|
grow: 1,
|
||||||
cellBuilder: (_, row) {
|
cellBuilder: (_, row) {
|
||||||
int idx = row.index;
|
int idx = row.index;
|
||||||
@ -123,7 +123,7 @@ class EditRequestHeadersState extends ConsumerState<EditRequestHeaders> {
|
|||||||
return CellField(
|
return CellField(
|
||||||
keyId: "$selectedId-$idx-headers-v-$seed",
|
keyId: "$selectedId-$idx-headers-v-$seed",
|
||||||
initialValue: headerRows[idx].value,
|
initialValue: headerRows[idx].value,
|
||||||
hintText: " Add Header Value",
|
hintText: kHintAddValue,
|
||||||
onChanged: (value) {
|
onChanged: (value) {
|
||||||
headerRows[idx] = headerRows[idx].copyWith(value: value);
|
headerRows[idx] = headerRows[idx].copyWith(value: value);
|
||||||
if (isLast && !isAddingRow) {
|
if (isLast && !isAddingRow) {
|
||||||
@ -202,7 +202,7 @@ class EditRequestHeadersState extends ConsumerState<EditRequestHeaders> {
|
|||||||
},
|
},
|
||||||
icon: const Icon(Icons.add),
|
icon: const Icon(Icons.add),
|
||||||
label: const Text(
|
label: const Text(
|
||||||
"Add Header",
|
kLabelAddHeader,
|
||||||
style: kTextStyleButton,
|
style: kTextStyleButton,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
@ -59,7 +59,7 @@ class EditRequestURLParamsState extends ConsumerState<EditRequestURLParams> {
|
|||||||
rows: paramRows,
|
rows: paramRows,
|
||||||
columns: [
|
columns: [
|
||||||
DaviColumn(
|
DaviColumn(
|
||||||
name: 'Checkbox',
|
name: kNameCheckbox,
|
||||||
width: 30,
|
width: 30,
|
||||||
cellBuilder: (_, row) {
|
cellBuilder: (_, row) {
|
||||||
int idx = row.index;
|
int idx = row.index;
|
||||||
@ -80,7 +80,7 @@ class EditRequestURLParamsState extends ConsumerState<EditRequestURLParams> {
|
|||||||
},
|
},
|
||||||
),
|
),
|
||||||
DaviColumn(
|
DaviColumn(
|
||||||
name: 'URL Parameter',
|
name: kNameURLParam,
|
||||||
width: 70,
|
width: 70,
|
||||||
grow: 1,
|
grow: 1,
|
||||||
cellBuilder: (_, row) {
|
cellBuilder: (_, row) {
|
||||||
@ -89,7 +89,7 @@ class EditRequestURLParamsState extends ConsumerState<EditRequestURLParams> {
|
|||||||
return CellField(
|
return CellField(
|
||||||
keyId: "$selectedId-$idx-params-k-$seed",
|
keyId: "$selectedId-$idx-params-k-$seed",
|
||||||
initialValue: paramRows[idx].name,
|
initialValue: paramRows[idx].name,
|
||||||
hintText: "Add URL Parameter",
|
hintText: kHintAddURLParam,
|
||||||
onChanged: (value) {
|
onChanged: (value) {
|
||||||
paramRows[idx] = paramRows[idx].copyWith(name: value);
|
paramRows[idx] = paramRows[idx].copyWith(name: value);
|
||||||
if (isLast && !isAddingRow) {
|
if (isLast && !isAddingRow) {
|
||||||
@ -115,7 +115,7 @@ class EditRequestURLParamsState extends ConsumerState<EditRequestURLParams> {
|
|||||||
},
|
},
|
||||||
),
|
),
|
||||||
DaviColumn(
|
DaviColumn(
|
||||||
name: 'Value',
|
name: kNameValue,
|
||||||
grow: 1,
|
grow: 1,
|
||||||
cellBuilder: (_, row) {
|
cellBuilder: (_, row) {
|
||||||
int idx = row.index;
|
int idx = row.index;
|
||||||
@ -123,7 +123,7 @@ class EditRequestURLParamsState extends ConsumerState<EditRequestURLParams> {
|
|||||||
return CellField(
|
return CellField(
|
||||||
keyId: "$selectedId-$idx-params-v-$seed",
|
keyId: "$selectedId-$idx-params-v-$seed",
|
||||||
initialValue: paramRows[idx].value,
|
initialValue: paramRows[idx].value,
|
||||||
hintText: "Add Value",
|
hintText: kHintAddValue,
|
||||||
onChanged: (value) {
|
onChanged: (value) {
|
||||||
paramRows[idx] = paramRows[idx].copyWith(value: value);
|
paramRows[idx] = paramRows[idx].copyWith(value: value);
|
||||||
if (isLast && !isAddingRow) {
|
if (isLast && !isAddingRow) {
|
||||||
@ -202,7 +202,7 @@ class EditRequestURLParamsState extends ConsumerState<EditRequestURLParams> {
|
|||||||
},
|
},
|
||||||
icon: const Icon(Icons.add),
|
icon: const Icon(Icons.add),
|
||||||
label: const Text(
|
label: const Text(
|
||||||
"Add Param",
|
kLabelAddParam,
|
||||||
style: kTextStyleButton,
|
style: kTextStyleButton,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
@ -34,7 +34,6 @@ class ResponseDetails extends ConsumerWidget {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context, WidgetRef ref) {
|
Widget build(BuildContext context, WidgetRef ref) {
|
||||||
var sm = ScaffoldMessenger.of(context);
|
|
||||||
final responseStatus = ref.watch(
|
final responseStatus = ref.watch(
|
||||||
selectedRequestModelProvider.select((value) => value?.responseStatus));
|
selectedRequestModelProvider.select((value) => value?.responseStatus));
|
||||||
final message = ref
|
final message = ref
|
||||||
@ -52,8 +51,6 @@ class ResponseDetails extends ConsumerWidget {
|
|||||||
ref
|
ref
|
||||||
.read(collectionStateNotifierProvider.notifier)
|
.read(collectionStateNotifierProvider.notifier)
|
||||||
.clearResponse(selectedRequest?.id);
|
.clearResponse(selectedRequest?.id);
|
||||||
sm.hideCurrentSnackBar();
|
|
||||||
sm.showSnackBar(getSnackBar('Response cleared'));
|
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
const Expanded(
|
const Expanded(
|
||||||
|
@ -246,15 +246,12 @@ class ClearResponseButton extends StatelessWidget {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return Tooltip(
|
return IconButton(
|
||||||
message: 'Clear response',
|
tooltip: kTooltipClearResponse,
|
||||||
child: TextButton(
|
onPressed: onPressed,
|
||||||
style: TextButton.styleFrom(minimumSize: const Size(40, 40)),
|
icon: const Icon(
|
||||||
onPressed: onPressed,
|
Icons.delete,
|
||||||
child: const Icon(
|
size: 16,
|
||||||
Icons.delete,
|
|
||||||
size: 20,
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -48,16 +48,12 @@ class _RequestPaneState extends State<RequestPane>
|
|||||||
return Column(
|
return Column(
|
||||||
children: [
|
children: [
|
||||||
Padding(
|
Padding(
|
||||||
padding: kPh20v10,
|
padding: kP8,
|
||||||
child: SizedBox(
|
child: SizedBox(
|
||||||
height: kHeaderHeight,
|
height: kHeaderHeight,
|
||||||
child: Row(
|
child: Row(
|
||||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
mainAxisAlignment: MainAxisAlignment.end,
|
||||||
children: [
|
children: [
|
||||||
Text(
|
|
||||||
"Request",
|
|
||||||
style: Theme.of(context).textTheme.titleMedium,
|
|
||||||
),
|
|
||||||
FilledButton.tonalIcon(
|
FilledButton.tonalIcon(
|
||||||
onPressed: widget.onPressedCodeButton,
|
onPressed: widget.onPressedCodeButton,
|
||||||
icon: Icon(
|
icon: Icon(
|
||||||
@ -68,7 +64,8 @@ class _RequestPaneState extends State<RequestPane>
|
|||||||
label: SizedBox(
|
label: SizedBox(
|
||||||
width: 75,
|
width: 75,
|
||||||
child: Text(
|
child: Text(
|
||||||
widget.codePaneVisible ? "Hide Code" : "View Code"),
|
widget.codePaneVisible ? kLabelHideCode : kLabelViewCode,
|
||||||
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
@ -79,18 +76,19 @@ class _RequestPaneState extends State<RequestPane>
|
|||||||
key: Key(widget.selectedId!),
|
key: Key(widget.selectedId!),
|
||||||
controller: _controller,
|
controller: _controller,
|
||||||
overlayColor: kColorTransparentState,
|
overlayColor: kColorTransparentState,
|
||||||
|
labelPadding: kPh2,
|
||||||
onTap: widget.onTapTabBar,
|
onTap: widget.onTapTabBar,
|
||||||
tabs: [
|
tabs: [
|
||||||
TabLabel(
|
TabLabel(
|
||||||
text: 'URL Params',
|
text: kLabelURLParams,
|
||||||
showIndicator: widget.showIndicators[0],
|
showIndicator: widget.showIndicators[0],
|
||||||
),
|
),
|
||||||
TabLabel(
|
TabLabel(
|
||||||
text: 'Headers',
|
text: kLabelHeaders,
|
||||||
showIndicator: widget.showIndicators[1],
|
showIndicator: widget.showIndicators[1],
|
||||||
),
|
),
|
||||||
TabLabel(
|
TabLabel(
|
||||||
text: 'Body',
|
text: kLabelBody,
|
||||||
showIndicator: widget.showIndicators[2],
|
showIndicator: widget.showIndicators[2],
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
|
@ -23,7 +23,7 @@ class NotSentWidget extends StatelessWidget {
|
|||||||
color: color,
|
color: color,
|
||||||
),
|
),
|
||||||
Text(
|
Text(
|
||||||
'Not Sent',
|
kLabelNotSent,
|
||||||
style:
|
style:
|
||||||
Theme.of(context).textTheme.titleMedium?.copyWith(color: color),
|
Theme.of(context).textTheme.titleMedium?.copyWith(color: color),
|
||||||
),
|
),
|
||||||
@ -66,42 +66,19 @@ class ResponsePaneHeader extends StatelessWidget {
|
|||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return Padding(
|
return Padding(
|
||||||
padding: kPh20v10,
|
padding: kPv8,
|
||||||
child: SizedBox(
|
child: SizedBox(
|
||||||
height: kHeaderHeight,
|
height: kHeaderHeight,
|
||||||
child: Row(
|
child: Row(
|
||||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
children: [
|
children: [
|
||||||
Text.rich(
|
kHSpacer10,
|
||||||
TextSpan(
|
|
||||||
children: [
|
|
||||||
const TextSpan(
|
|
||||||
text: "Response (",
|
|
||||||
),
|
|
||||||
TextSpan(
|
|
||||||
text: "$responseStatus",
|
|
||||||
style: TextStyle(
|
|
||||||
color: getResponseStatusCodeColor(
|
|
||||||
responseStatus,
|
|
||||||
brightness: Theme.of(context).brightness,
|
|
||||||
),
|
|
||||||
fontFamily: kCodeStyle.fontFamily,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
const TextSpan(
|
|
||||||
text: ")",
|
|
||||||
),
|
|
||||||
],
|
|
||||||
style: Theme.of(context).textTheme.titleMedium,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
kHSpacer20,
|
|
||||||
Expanded(
|
Expanded(
|
||||||
child: Text(
|
child: Text(
|
||||||
message ?? "",
|
"$responseStatus: ${message ?? '-'}",
|
||||||
softWrap: false,
|
softWrap: false,
|
||||||
overflow: TextOverflow.ellipsis,
|
overflow: TextOverflow.ellipsis,
|
||||||
style: Theme.of(context).textTheme.titleMedium!.copyWith(
|
style: Theme.of(context).textTheme.bodyMedium?.copyWith(
|
||||||
fontFamily: kCodeStyle.fontFamily,
|
fontFamily: kCodeStyle.fontFamily,
|
||||||
color: getResponseStatusCodeColor(
|
color: getResponseStatusCodeColor(
|
||||||
responseStatus,
|
responseStatus,
|
||||||
@ -110,10 +87,10 @@ class ResponsePaneHeader extends StatelessWidget {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
kHSpacer20,
|
kHSpacer10,
|
||||||
Text(
|
Text(
|
||||||
humanizeDuration(time),
|
humanizeDuration(time),
|
||||||
style: Theme.of(context).textTheme.titleMedium!.copyWith(
|
style: Theme.of(context).textTheme.bodyMedium?.copyWith(
|
||||||
fontFamily: kCodeStyle.fontFamily,
|
fontFamily: kCodeStyle.fontFamily,
|
||||||
color: Theme.of(context).colorScheme.secondary,
|
color: Theme.of(context).colorScheme.secondary,
|
||||||
),
|
),
|
||||||
@ -163,31 +140,15 @@ class _ResponseTabViewState extends State<ResponseTabView>
|
|||||||
TabBar(
|
TabBar(
|
||||||
key: Key(widget.selectedId!),
|
key: Key(widget.selectedId!),
|
||||||
controller: _controller,
|
controller: _controller,
|
||||||
|
labelPadding: kPh2,
|
||||||
overlayColor: kColorTransparentState,
|
overlayColor: kColorTransparentState,
|
||||||
onTap: (index) {},
|
onTap: (index) {},
|
||||||
tabs: const [
|
tabs: const [
|
||||||
SizedBox(
|
TabLabel(
|
||||||
height: kTabHeight,
|
text: kLabelResponseBody,
|
||||||
child: Center(
|
|
||||||
child: Text(
|
|
||||||
'Body',
|
|
||||||
textAlign: TextAlign.center,
|
|
||||||
overflow: TextOverflow.fade,
|
|
||||||
softWrap: false,
|
|
||||||
style: kTextStyleButton,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
SizedBox(
|
TabLabel(
|
||||||
height: kTabHeight,
|
text: kLabelHeaders,
|
||||||
child: Center(
|
|
||||||
child: Text(
|
|
||||||
'Headers',
|
|
||||||
textAlign: TextAlign.center,
|
|
||||||
overflow: TextOverflow.fade,
|
|
||||||
style: kTextStyleButton,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
@ -227,8 +188,8 @@ class ResponseHeadersHeader extends StatelessWidget {
|
|||||||
children: [
|
children: [
|
||||||
Expanded(
|
Expanded(
|
||||||
child: Text(
|
child: Text(
|
||||||
"$name (${map.length} items)",
|
"$name (${map.length} $kLabelItems)",
|
||||||
style: Theme.of(context).textTheme.labelLarge!.copyWith(
|
style: Theme.of(context).textTheme.labelMedium?.copyWith(
|
||||||
fontWeight: FontWeight.bold,
|
fontWeight: FontWeight.bold,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
@ -243,8 +204,6 @@ class ResponseHeadersHeader extends StatelessWidget {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const kHeaderRow = ["Header Name", "Header Value"];
|
|
||||||
|
|
||||||
class ResponseHeaders extends StatelessWidget {
|
class ResponseHeaders extends StatelessWidget {
|
||||||
const ResponseHeaders({
|
const ResponseHeaders({
|
||||||
super.key,
|
super.key,
|
||||||
@ -263,7 +222,7 @@ class ResponseHeaders extends StatelessWidget {
|
|||||||
children: [
|
children: [
|
||||||
ResponseHeadersHeader(
|
ResponseHeadersHeader(
|
||||||
map: responseHeaders,
|
map: responseHeaders,
|
||||||
name: "Response Headers",
|
name: kLabelResponseHeaders,
|
||||||
),
|
),
|
||||||
if (responseHeaders.isNotEmpty) kVSpacer5,
|
if (responseHeaders.isNotEmpty) kVSpacer5,
|
||||||
if (responseHeaders.isNotEmpty)
|
if (responseHeaders.isNotEmpty)
|
||||||
@ -275,7 +234,7 @@ class ResponseHeaders extends StatelessWidget {
|
|||||||
kVSpacer10,
|
kVSpacer10,
|
||||||
ResponseHeadersHeader(
|
ResponseHeadersHeader(
|
||||||
map: requestHeaders,
|
map: requestHeaders,
|
||||||
name: "Request Headers",
|
name: kLabelRequestHeaders,
|
||||||
),
|
),
|
||||||
if (requestHeaders.isNotEmpty) kVSpacer5,
|
if (requestHeaders.isNotEmpty) kVSpacer5,
|
||||||
if (requestHeaders.isNotEmpty)
|
if (requestHeaders.isNotEmpty)
|
||||||
@ -302,20 +261,18 @@ class ResponseBody extends StatelessWidget {
|
|||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
final responseModel = selectedRequestModel?.responseModel;
|
final responseModel = selectedRequestModel?.responseModel;
|
||||||
if (responseModel == null) {
|
if (responseModel == null) {
|
||||||
return const ErrorMessage(
|
return const ErrorMessage(message: '$kMsgError $kUnexpectedRaiseIssue');
|
||||||
message:
|
|
||||||
'Error: Response data does not exist. $kUnexpectedRaiseIssue');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var body = responseModel.body;
|
var body = responseModel.body;
|
||||||
var formattedBody = responseModel.formattedBody;
|
var formattedBody = responseModel.formattedBody;
|
||||||
if (body == null) {
|
if (body == null) {
|
||||||
return const ErrorMessage(
|
return const ErrorMessage(
|
||||||
message: 'Response body is missing (null). $kUnexpectedRaiseIssue');
|
message: '$kMsgNullBody $kUnexpectedRaiseIssue');
|
||||||
}
|
}
|
||||||
if (body.isEmpty) {
|
if (body.isEmpty) {
|
||||||
return const ErrorMessage(
|
return const ErrorMessage(
|
||||||
message: 'No content',
|
message: kMsgNoContent,
|
||||||
showIcon: false,
|
showIcon: false,
|
||||||
showIssueButton: false,
|
showIssueButton: false,
|
||||||
);
|
);
|
||||||
@ -325,7 +282,7 @@ class ResponseBody extends StatelessWidget {
|
|||||||
if (mediaType == null) {
|
if (mediaType == null) {
|
||||||
return ErrorMessage(
|
return ErrorMessage(
|
||||||
message:
|
message:
|
||||||
'Unknown Response Content-Type - ${responseModel.contentType}. $kUnexpectedRaiseIssue');
|
'$kMsgUnknowContentType - ${responseModel.contentType}. $kUnexpectedRaiseIssue');
|
||||||
}
|
}
|
||||||
|
|
||||||
var responseBodyView = getResponseBodyViewOptions(mediaType);
|
var responseBodyView = getResponseBodyViewOptions(mediaType);
|
||||||
|
@ -2,7 +2,11 @@ import 'package:flutter/material.dart';
|
|||||||
import 'package:apidash/consts.dart';
|
import 'package:apidash/consts.dart';
|
||||||
|
|
||||||
class TabLabel extends StatelessWidget {
|
class TabLabel extends StatelessWidget {
|
||||||
const TabLabel({super.key, required this.text, this.showIndicator = false});
|
const TabLabel({
|
||||||
|
super.key,
|
||||||
|
required this.text,
|
||||||
|
this.showIndicator = false,
|
||||||
|
});
|
||||||
final String text;
|
final String text;
|
||||||
final bool showIndicator;
|
final bool showIndicator;
|
||||||
|
|
||||||
@ -18,14 +22,14 @@ class TabLabel extends StatelessWidget {
|
|||||||
textAlign: TextAlign.center,
|
textAlign: TextAlign.center,
|
||||||
overflow: TextOverflow.fade,
|
overflow: TextOverflow.fade,
|
||||||
softWrap: false,
|
softWrap: false,
|
||||||
style: kTextStyleButton,
|
style: kTextStyleTab,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
if (showIndicator)
|
if (showIndicator)
|
||||||
const Align(
|
const Align(
|
||||||
alignment: Alignment.topCenter,
|
alignment: Alignment.topCenter,
|
||||||
child: Padding(
|
child: Padding(
|
||||||
padding: EdgeInsets.only(top: 6),
|
padding: EdgeInsets.only(top: 1),
|
||||||
child: Icon(
|
child: Icon(
|
||||||
Icons.circle,
|
Icons.circle,
|
||||||
size: 6,
|
size: 6,
|
||||||
|
Reference in New Issue
Block a user