From 36cfbfb97eec55dfcd8a28b8dbbf7ceb9f57cd2c Mon Sep 17 00:00:00 2001 From: Priyaranjan Date: Mon, 1 Jan 2024 22:11:07 +0530 Subject: [PATCH 01/18] =?UTF-8?q?=E2=9C=A8=20added:=20beautify=20json?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/widgets/raw.dart | 59 +++++++++++++++++++++++++++++++ lib/widgets/response_widgets.dart | 39 +++++++++++++------- 2 files changed, 85 insertions(+), 13 deletions(-) create mode 100644 lib/widgets/raw.dart diff --git a/lib/widgets/raw.dart b/lib/widgets/raw.dart new file mode 100644 index 00000000..b3bc6671 --- /dev/null +++ b/lib/widgets/raw.dart @@ -0,0 +1,59 @@ +import 'dart:convert'; + +import 'package:apidash/providers/providers.dart'; +import 'package:apidash/widgets/snackbars.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; + +class Raw extends StatelessWidget { + const Raw({super.key, required this.body, this.style}); + + final String body; + final TextStyle? style; + + String? _formatJson(String data, {required ScaffoldMessengerState sm}) { + try { + final dynamic parsedJson = json.decode(body); + + return const JsonEncoder.withIndent(' ').convert(parsedJson); + } catch (e) { + sm.hideCurrentSnackBar(); + sm.showSnackBar(getSnackBar("Failed to beautify JSON")); + } + return null; + } + + @override + Widget build(BuildContext context) { + var sm = ScaffoldMessenger.of(context); + return Stack( + children: [ + SingleChildScrollView( + child: Consumer(builder: (context, ref, _) { + return SelectableText( + ref.watch(beautifyJsonProvider) ?? body, + style: style, + ); + }), + ), + Align( + alignment: Alignment.topRight, + child: Consumer(builder: (context, ref, _) { + return ref.watch(beautifyJsonProvider) != null + ? const SizedBox.shrink() + : ElevatedButton( + onPressed: () { + ref.read(beautifyJsonProvider.notifier).state = + _formatJson(body, sm: sm); + }, + style: ElevatedButton.styleFrom( + padding: const EdgeInsets.symmetric(horizontal: 10), + ), + child: const Text("Beautify"), + ); + }), + ), + ], + ); + } +} diff --git a/lib/widgets/response_widgets.dart b/lib/widgets/response_widgets.dart index da905749..bd57a867 100644 --- a/lib/widgets/response_widgets.dart +++ b/lib/widgets/response_widgets.dart @@ -1,3 +1,4 @@ +import 'package:apidash/widgets/raw.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:http_parser/http_parser.dart'; @@ -407,22 +408,31 @@ class _BodySuccessState extends State { return Padding( padding: kP10, child: Column( + crossAxisAlignment: CrossAxisAlignment.stretch, children: [ - Row( + Wrap( + alignment: WrapAlignment.spaceBetween, children: [ (widget.options == kRawBodyViewOptions) ? const SizedBox() : SegmentedButton( - selectedIcon: Icon( - kResponseBodyViewIcons[currentSeg]![kKeyIcon]), + selectedIcon: showLabel + ? Icon( + kResponseBodyViewIcons[currentSeg]![kKeyIcon], + ) + : null, segments: widget.options .map>( (e) => ButtonSegment( value: e, - label: Text( - kResponseBodyViewIcons[e]![kKeyName]), + label: showLabel + ? Text( + kResponseBodyViewIcons[e]![kKeyName], + ) + : null, icon: Icon( - kResponseBodyViewIcons[e]![kKeyIcon]), + kResponseBodyViewIcons[e]![kKeyIcon], + ), ), ) .toList(), @@ -434,8 +444,11 @@ class _BodySuccessState extends State { }); }, ), - const Spacer(), - kCodeRawBodyViewOptions.contains(currentSeg) + // const Spacer(), + Row( + mainAxisSize: MainAxisSize.min, + children: [ + kCodeRawBodyViewOptions.contains(currentSeg) ? CopyButton( toCopy: widget.body, showLabel: showLabel, @@ -446,6 +459,8 @@ class _BodySuccessState extends State { mimeType: widget.mediaType.mimeType, showLabel: showLabel, ), + ], + ) ], ), kVSpacer10, @@ -491,11 +506,9 @@ class _BodySuccessState extends State { width: double.maxFinite, padding: kP8, decoration: textContainerdecoration, - child: SingleChildScrollView( - child: SelectableText( - widget.body, - style: kCodeStyle, - ), + child: Raw( + body: widget.body, + style: kCodeStyle, ), ), ), From 89793cb45cc2c2b2be40b7bd6164c035faf897d8 Mon Sep 17 00:00:00 2001 From: Priyaranjan Date: Mon, 1 Jan 2024 22:11:42 +0530 Subject: [PATCH 02/18] added: raw provider for beautify json --- lib/providers/providers.dart | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/providers/providers.dart b/lib/providers/providers.dart index 14b06493..2a934094 100644 --- a/lib/providers/providers.dart +++ b/lib/providers/providers.dart @@ -1,3 +1,4 @@ export 'collection_providers.dart'; export 'settings_providers.dart'; export 'ui_providers.dart'; +export 'raw_provider.dart'; From 70f9116e8f6cac0891749cd5eddb973f4f823fbd Mon Sep 17 00:00:00 2001 From: Priyaranjan Date: Mon, 1 Jan 2024 22:12:25 +0530 Subject: [PATCH 03/18] added: raw provider for beautify json --- lib/providers/raw_provider.dart | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 lib/providers/raw_provider.dart diff --git a/lib/providers/raw_provider.dart b/lib/providers/raw_provider.dart new file mode 100644 index 00000000..b6afb331 --- /dev/null +++ b/lib/providers/raw_provider.dart @@ -0,0 +1,5 @@ +import 'package:flutter_riverpod/flutter_riverpod.dart'; + +final beautifyJsonProvider = StateProvider.autoDispose( + (ref) => null, +); From 7f38a53fc55dc426a47ecc2aedc4fc3f813841a6 Mon Sep 17 00:00:00 2001 From: Priyaranjan Date: Mon, 1 Jan 2024 22:12:52 +0530 Subject: [PATCH 04/18] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20refactor:=20row=20to?= =?UTF-8?q?=20wrap?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/widgets/request_widgets.dart | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/widgets/request_widgets.dart b/lib/widgets/request_widgets.dart index 6ba74bce..d010d632 100644 --- a/lib/widgets/request_widgets.dart +++ b/lib/widgets/request_widgets.dart @@ -46,13 +46,14 @@ class _RequestPaneState extends State _controller.index = widget.tabIndex!; } return Column( + crossAxisAlignment: CrossAxisAlignment.stretch, children: [ Padding( padding: kPh20v10, child: SizedBox( height: kHeaderHeight, - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, + child: Wrap( + alignment: WrapAlignment.spaceBetween, children: [ Text( "Request", @@ -65,10 +66,9 @@ class _RequestPaneState extends State ? Icons.code_off_rounded : Icons.code_rounded, ), - label: SizedBox( - width: 75, - child: Text( - widget.codePaneVisible ? "Hide Code" : "View Code"), + label: Text( + widget.codePaneVisible ? "Hide Code" : "View Code", + overflow: TextOverflow.ellipsis, ), ), ], From 05fb363f14190846b2ecbf05881fc1c0723b9482 Mon Sep 17 00:00:00 2001 From: Ashita Prasad Date: Sun, 14 Jan 2024 22:57:03 +0530 Subject: [PATCH 05/18] bump json_data_explorer version --- devtools_options.yaml | 1 + pubspec.lock | 22 +++++++++++++++++++--- pubspec.yaml | 2 +- 3 files changed, 21 insertions(+), 4 deletions(-) create mode 100644 devtools_options.yaml diff --git a/devtools_options.yaml b/devtools_options.yaml new file mode 100644 index 00000000..7e7e7f67 --- /dev/null +++ b/devtools_options.yaml @@ -0,0 +1 @@ +extensions: diff --git a/pubspec.lock b/pubspec.lock index 1845e975..c42c9d37 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -265,6 +265,14 @@ packages: url: "https://pub.dev" source: hosted version: "7.0.0" + file_picker: + dependency: "direct main" + description: + name: file_picker + sha256: "4e42aacde3b993c5947467ab640882c56947d9d27342a5b6f2895b23956954a6" + url: "https://pub.dev" + source: hosted + version: "6.1.1" fixnum: dependency: transitive description: @@ -350,6 +358,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.6.18+2" + flutter_plugin_android_lifecycle: + dependency: transitive + description: + name: flutter_plugin_android_lifecycle + sha256: b068ffc46f82a55844acfa4fdbb61fad72fa2aef0905548419d97f0f95c456da + url: "https://pub.dev" + source: hosted + version: "2.0.17" flutter_riverpod: dependency: "direct main" description: @@ -533,10 +549,10 @@ packages: description: path: "." ref: HEAD - resolved-ref: "9e279ee9862c4fc4050dbcb5074529b22e67a7c3" + resolved-ref: "320c9fc7d4b8366daa1d70ba28523977ab101d9f" url: "https://github.com/foss42/json_data_explorer.git" source: git - version: "0.1.1" + version: "0.1.2" json_serializable: dependency: "direct dev" description: @@ -1280,5 +1296,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.2.0 <4.0.0" + dart: ">=3.2.3 <4.0.0" flutter: ">=3.16.0" diff --git a/pubspec.yaml b/pubspec.yaml index 33a4ad9f..f91513e3 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -46,7 +46,7 @@ dependencies: json_data_explorer: git: url: https://github.com/foss42/json_data_explorer.git - version: ^0.1.1 + version: ^0.1.2 scrollable_positioned_list: ^0.2.3 file_picker: ^6.1.1 flutter_svg: ^2.0.9 From 9ab777e5c6bd19f6fce20dd5090b29a5897ce8e5 Mon Sep 17 00:00:00 2001 From: Ashita Prasad Date: Sun, 14 Jan 2024 23:11:08 +0530 Subject: [PATCH 06/18] Update json_data_explorer ref --- pubspec.lock | 4 ++-- pubspec.yaml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pubspec.lock b/pubspec.lock index c42c9d37..5e8d5462 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -548,8 +548,8 @@ packages: dependency: "direct main" description: path: "." - ref: HEAD - resolved-ref: "320c9fc7d4b8366daa1d70ba28523977ab101d9f" + ref: "9fa58d7b51e65174ab11cbcae17bba88a4194dde" + resolved-ref: "9fa58d7b51e65174ab11cbcae17bba88a4194dde" url: "https://github.com/foss42/json_data_explorer.git" source: git version: "0.1.2" diff --git a/pubspec.yaml b/pubspec.yaml index f91513e3..bdb8665a 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -46,7 +46,7 @@ dependencies: json_data_explorer: git: url: https://github.com/foss42/json_data_explorer.git - version: ^0.1.2 + ref: 9fa58d7b51e65174ab11cbcae17bba88a4194dde scrollable_positioned_list: ^0.2.3 file_picker: ^6.1.1 flutter_svg: ^2.0.9 From 88ba5361677a1e62c319d53dee3f2203599ca464 Mon Sep 17 00:00:00 2001 From: Ashita Prasad Date: Sun, 14 Jan 2024 23:21:08 +0530 Subject: [PATCH 07/18] Rebuild JSON preview for cases where the response is in a few ms. --- lib/widgets/json_previewer.dart | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lib/widgets/json_previewer.dart b/lib/widgets/json_previewer.dart index 49b1eb10..28fff99b 100644 --- a/lib/widgets/json_previewer.dart +++ b/lib/widgets/json_previewer.dart @@ -151,6 +151,14 @@ class _JsonPreviewerState extends State { store.expandAll(); } + @override + void didUpdateWidget(JsonPreviewer oldWidget) { + if (oldWidget.code != widget.code) { + store.buildNodes(widget.code, areAllCollapsed: true); + store.expandAll(); + } + } + @override Widget build(BuildContext context) { var sm = ScaffoldMessenger.of(context); From 14dfa720e0e8a9c9373a7b3b916cd84c004ba870 Mon Sep 17 00:00:00 2001 From: Ashita Prasad Date: Mon, 15 Jan 2024 00:44:26 +0530 Subject: [PATCH 08/18] Add maxRootNodeWidth to JSON Previewer Fixes #106 --- lib/utils/ui_utils.dart | 10 ++ lib/widgets/json_previewer.dart | 217 +++++++++++++++++--------------- 2 files changed, 126 insertions(+), 101 deletions(-) diff --git a/lib/utils/ui_utils.dart b/lib/utils/ui_utils.dart index aeaf1b1a..a0a05c0b 100644 --- a/lib/utils/ui_utils.dart +++ b/lib/utils/ui_utils.dart @@ -59,3 +59,13 @@ Color getDarkModeColor(Color col) { kColorWhite, ); } + +double? getJsonPreviewerMaxRootNodeWidth(double w) { + if (w < 300) { + return 150; + } + if (w < 400) { + return 200; + } + return null; +} diff --git a/lib/widgets/json_previewer.dart b/lib/widgets/json_previewer.dart index 28fff99b..3056b23c 100644 --- a/lib/widgets/json_previewer.dart +++ b/lib/widgets/json_previewer.dart @@ -5,6 +5,7 @@ import 'package:provider/provider.dart'; import 'package:scrollable_positioned_list/scrollable_positioned_list.dart'; import 'package:url_launcher/url_launcher_string.dart'; import '../consts.dart'; +import '../utils/ui_utils.dart'; import "snackbars.dart"; import 'textfields.dart'; @@ -165,114 +166,128 @@ class _JsonPreviewerState extends State { return ChangeNotifierProvider.value( value: store, child: Consumer( - builder: (context, state, child) => Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.end, - children: [ - TextButton( - onPressed: () async { - await _copy(kEncoder.convert(widget.code), sm); - }, - child: const Text('Copy'), - ), - TextButton( - onPressed: state.areAllExpanded() ? null : state.expandAll, - child: const Text('Expand All'), - ), - TextButton( - onPressed: state.areAllCollapsed() ? null : state.collapseAll, - child: const Text('Collapse All'), - ), - ], - ), - Expanded( - child: JsonDataExplorer( - nodes: state.displayNodes, - itemScrollController: itemScrollController, - itemSpacing: 4, - rootInformationBuilder: (context, node) => - rootInfoBox(context, node), - collapsableToggleBuilder: (context, node) => AnimatedRotation( - turns: node.isCollapsed ? -0.25 : 0, - duration: const Duration(milliseconds: 300), - child: const Icon(Icons.arrow_drop_down), - ), - trailingBuilder: (context, node) => node.isFocused - ? Padding( - padding: const EdgeInsets.only(right: 12), - child: IconButton( - padding: EdgeInsets.zero, - constraints: const BoxConstraints(maxHeight: 18), - icon: const Icon( - Icons.copy, - size: 18, - ), - onPressed: () async { - await _copy(kEncoder.convert(toJson(node)), sm); - }, - ), - ) - : const SizedBox(), - valueStyleBuilder: (value, style) => - valueStyleOverride(context, value, style), - theme: (Theme.of(context).brightness == Brightness.light) - ? dataExplorerThemeLight - : dataExplorerThemeDark, - ), - ), - Container( - decoration: BoxDecoration( - color: Theme.of(context).colorScheme.background, - border: Border.all( - color: Theme.of(context).colorScheme.surfaceVariant), - borderRadius: kBorderRadius8, - ), - child: Row( + builder: (context, state, child) { + return LayoutBuilder( + builder: (BuildContext context, BoxConstraints constraints) { + var maxRootNodeWidth = + getJsonPreviewerMaxRootNodeWidth(constraints.maxWidth); + return Column( + crossAxisAlignment: CrossAxisAlignment.start, children: [ - const Padding( - padding: EdgeInsets.symmetric(horizontal: 8.0), - child: Icon( - Icons.search, - size: 18, - ), + Row( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + TextButton( + onPressed: () async { + await _copy(kEncoder.convert(widget.code), sm); + }, + child: const Text('Copy'), + ), + TextButton( + onPressed: + state.areAllExpanded() ? null : state.expandAll, + child: const Text('Expand All'), + ), + TextButton( + onPressed: + state.areAllCollapsed() ? null : state.collapseAll, + child: const Text('Collapse All'), + ), + ], ), Expanded( - child: JsonSearchField( - controller: searchController, - onChanged: (term) => state.search(term), + child: JsonDataExplorer( + nodes: state.displayNodes, + itemScrollController: itemScrollController, + itemSpacing: 4, + rootInformationBuilder: (context, node) => + rootInfoBox(context, node), + collapsableToggleBuilder: (context, node) => + AnimatedRotation( + turns: node.isCollapsed ? -0.25 : 0, + duration: const Duration(milliseconds: 300), + child: const Icon(Icons.arrow_drop_down), + ), + trailingBuilder: (context, node) => node.isFocused + ? Padding( + padding: const EdgeInsets.only(right: 12), + child: IconButton( + padding: EdgeInsets.zero, + constraints: + const BoxConstraints(maxHeight: 18), + icon: const Icon( + Icons.copy, + size: 18, + ), + onPressed: () async { + await _copy( + kEncoder.convert(toJson(node)), sm); + }, + ), + ) + : const SizedBox(), + valueStyleBuilder: (value, style) => + valueStyleOverride(context, value, style), + theme: (Theme.of(context).brightness == Brightness.light) + ? dataExplorerThemeLight + : dataExplorerThemeDark, + maxRootNodeWidth: maxRootNodeWidth, ), ), - const SizedBox( - width: 8, + Container( + decoration: BoxDecoration( + color: Theme.of(context).colorScheme.background, + border: Border.all( + color: Theme.of(context).colorScheme.surfaceVariant), + borderRadius: kBorderRadius8, + ), + child: Row( + children: [ + const Padding( + padding: EdgeInsets.symmetric(horizontal: 8.0), + child: Icon( + Icons.search, + size: 18, + ), + ), + Expanded( + child: JsonSearchField( + controller: searchController, + onChanged: (term) => state.search(term), + ), + ), + const SizedBox( + width: 8, + ), + if (state.searchResults.isNotEmpty) + Text(_searchFocusText(), + style: Theme.of(context).textTheme.bodySmall), + if (state.searchResults.isNotEmpty) + IconButton( + visualDensity: VisualDensity.compact, + onPressed: () { + store.focusPreviousSearchResult(); + _scrollToSearchMatch(); + }, + icon: const Icon(Icons.arrow_drop_up), + ), + if (state.searchResults.isNotEmpty) + IconButton( + visualDensity: VisualDensity.compact, + onPressed: () { + store.focusNextSearchResult(); + _scrollToSearchMatch(); + }, + icon: const Icon(Icons.arrow_drop_down), + ), + ], + ), ), - if (state.searchResults.isNotEmpty) - Text(_searchFocusText(), - style: Theme.of(context).textTheme.bodySmall), - if (state.searchResults.isNotEmpty) - IconButton( - visualDensity: VisualDensity.compact, - onPressed: () { - store.focusPreviousSearchResult(); - _scrollToSearchMatch(); - }, - icon: const Icon(Icons.arrow_drop_up), - ), - if (state.searchResults.isNotEmpty) - IconButton( - visualDensity: VisualDensity.compact, - onPressed: () { - store.focusNextSearchResult(); - _scrollToSearchMatch(); - }, - icon: const Icon(Icons.arrow_drop_down), - ), ], - ), - ), - ], - ), + ); + }, + ); + }, ), ); } From 1c50591db1d2ac5cc6f315c6364ec62a7bfaca19 Mon Sep 17 00:00:00 2001 From: Ashita Prasad Date: Mon, 15 Jan 2024 00:51:17 +0530 Subject: [PATCH 09/18] Small button styles --- lib/consts.dart | 1 + lib/widgets/json_previewer.dart | 15 ++++++++++++--- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/lib/consts.dart b/lib/consts.dart index e598db62..f8f9f97c 100644 --- a/lib/consts.dart +++ b/lib/consts.dart @@ -48,6 +48,7 @@ const kHintOpacity = 0.6; const kForegroundOpacity = 0.05; const kTextStyleButton = TextStyle(fontWeight: FontWeight.bold); +const kTextStyleButtonSmall = TextStyle(fontSize: 12); const kFormDataButtonLabelTextStyle = TextStyle( fontSize: 12, fontWeight: FontWeight.w600, diff --git a/lib/widgets/json_previewer.dart b/lib/widgets/json_previewer.dart index 3056b23c..078a9721 100644 --- a/lib/widgets/json_previewer.dart +++ b/lib/widgets/json_previewer.dart @@ -181,17 +181,26 @@ class _JsonPreviewerState extends State { onPressed: () async { await _copy(kEncoder.convert(widget.code), sm); }, - child: const Text('Copy'), + child: const Text( + 'Copy', + style: kTextStyleButtonSmall, + ), ), TextButton( onPressed: state.areAllExpanded() ? null : state.expandAll, - child: const Text('Expand All'), + child: const Text( + 'Expand All', + style: kTextStyleButtonSmall, + ), ), TextButton( onPressed: state.areAllCollapsed() ? null : state.collapseAll, - child: const Text('Collapse All'), + child: const Text( + 'Collapse All', + style: kTextStyleButtonSmall, + ), ), ], ), From 46b320501f2b5b69156b31342cebd85e0a2f9520 Mon Sep 17 00:00:00 2001 From: Ashita Prasad Date: Mon, 15 Jan 2024 00:51:21 +0530 Subject: [PATCH 10/18] Update ui_utils.dart --- lib/utils/ui_utils.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/utils/ui_utils.dart b/lib/utils/ui_utils.dart index a0a05c0b..3bf1fb98 100644 --- a/lib/utils/ui_utils.dart +++ b/lib/utils/ui_utils.dart @@ -67,5 +67,5 @@ double? getJsonPreviewerMaxRootNodeWidth(double w) { if (w < 400) { return 200; } - return null; + return w - 150; } From 8720317eb634a6711d6604b530bee4907cb41501 Mon Sep 17 00:00:00 2001 From: Ashita Prasad Date: Mon, 15 Jan 2024 01:01:29 +0530 Subject: [PATCH 11/18] UI fixes params & headers --- .../editor_pane/details_card/request_pane/request_headers.dart | 3 ++- .../editor_pane/details_card/request_pane/request_params.dart | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/screens/home_page/editor_pane/details_card/request_pane/request_headers.dart b/lib/screens/home_page/editor_pane/details_card/request_pane/request_headers.dart index 1637f265..76866ab9 100644 --- a/lib/screens/home_page/editor_pane/details_card/request_pane/request_headers.dart +++ b/lib/screens/home_page/editor_pane/details_card/request_pane/request_headers.dart @@ -54,7 +54,7 @@ class EditRequestHeadersState extends ConsumerState { columns: [ DaviColumn( name: 'Checkbox', - width: 36, + width: 30, cellBuilder: (_, row) { int idx = row.index; return CheckBox( @@ -72,6 +72,7 @@ class EditRequestHeadersState extends ConsumerState { ), DaviColumn( name: 'Header Name', + width: 70, grow: 1, cellBuilder: (_, row) { int idx = row.index; diff --git a/lib/screens/home_page/editor_pane/details_card/request_pane/request_params.dart b/lib/screens/home_page/editor_pane/details_card/request_pane/request_params.dart index 18b17e58..736bf619 100644 --- a/lib/screens/home_page/editor_pane/details_card/request_pane/request_params.dart +++ b/lib/screens/home_page/editor_pane/details_card/request_pane/request_params.dart @@ -55,7 +55,7 @@ class EditRequestURLParamsState extends ConsumerState { columns: [ DaviColumn( name: 'Checkbox', - width: 36, + width: 30, cellBuilder: (_, row) { int idx = row.index; @@ -74,6 +74,7 @@ class EditRequestURLParamsState extends ConsumerState { ), DaviColumn( name: 'URL Parameter', + width: 70, grow: 1, cellBuilder: (_, row) { int idx = row.index; From 13f230c2ddb0024284bd677a40125128e73d3e30 Mon Sep 17 00:00:00 2001 From: Ashita Prasad Date: Mon, 15 Jan 2024 01:18:31 +0530 Subject: [PATCH 12/18] Fix SegmentedButton padding --- lib/widgets/response_widgets.dart | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/lib/widgets/response_widgets.dart b/lib/widgets/response_widgets.dart index 680041c0..6d8960e2 100644 --- a/lib/widgets/response_widgets.dart +++ b/lib/widgets/response_widgets.dart @@ -397,6 +397,13 @@ class _BodySuccessState extends State { (widget.options == kRawBodyViewOptions) ? const SizedBox() : SegmentedButton( + style: const ButtonStyle( + padding: MaterialStatePropertyAll( + EdgeInsets.symmetric( + horizontal: 8, + ), + ), + ), selectedIcon: Icon(currentSeg.icon), segments: widget.options .map>( From 2b943e8ef51bfd36fc427be5d9420c4f6f76db70 Mon Sep 17 00:00:00 2001 From: Ashita Prasad Date: Mon, 15 Jan 2024 01:27:06 +0530 Subject: [PATCH 13/18] =?UTF-8?q?Revert=20"=E2=99=BB=EF=B8=8F=20refactor:?= =?UTF-8?q?=20row=20to=20wrap"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 7f38a53fc55dc426a47ecc2aedc4fc3f813841a6. --- lib/widgets/request_widgets.dart | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/widgets/request_widgets.dart b/lib/widgets/request_widgets.dart index d010d632..6ba74bce 100644 --- a/lib/widgets/request_widgets.dart +++ b/lib/widgets/request_widgets.dart @@ -46,14 +46,13 @@ class _RequestPaneState extends State _controller.index = widget.tabIndex!; } return Column( - crossAxisAlignment: CrossAxisAlignment.stretch, children: [ Padding( padding: kPh20v10, child: SizedBox( height: kHeaderHeight, - child: Wrap( - alignment: WrapAlignment.spaceBetween, + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( "Request", @@ -66,9 +65,10 @@ class _RequestPaneState extends State ? Icons.code_off_rounded : Icons.code_rounded, ), - label: Text( - widget.codePaneVisible ? "Hide Code" : "View Code", - overflow: TextOverflow.ellipsis, + label: SizedBox( + width: 75, + child: Text( + widget.codePaneVisible ? "Hide Code" : "View Code"), ), ), ], From fe5c37950a501bf09920d19634996e0c0ee459eb Mon Sep 17 00:00:00 2001 From: Ashita Prasad Date: Mon, 15 Jan 2024 01:36:44 +0530 Subject: [PATCH 14/18] Revert response widgets --- lib/widgets/response_widgets.dart | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/lib/widgets/response_widgets.dart b/lib/widgets/response_widgets.dart index 8d4d4c9e..6d8960e2 100644 --- a/lib/widgets/response_widgets.dart +++ b/lib/widgets/response_widgets.dart @@ -1,4 +1,3 @@ -import 'package:apidash/widgets/raw.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:http_parser/http_parser.dart'; @@ -392,10 +391,8 @@ class _BodySuccessState extends State { return Padding( padding: kP10, child: Column( - crossAxisAlignment: CrossAxisAlignment.stretch, children: [ - Wrap( - alignment: WrapAlignment.spaceBetween, + Row( children: [ (widget.options == kRawBodyViewOptions) ? const SizedBox() @@ -425,11 +422,8 @@ class _BodySuccessState extends State { }); }, ), - // const Spacer(), - Row( - mainAxisSize: MainAxisSize.min, - children: [ - kCodeRawBodyViewOptions.contains(currentSeg) + const Spacer(), + kCodeRawBodyViewOptions.contains(currentSeg) ? CopyButton( toCopy: widget.body, showLabel: showLabel, @@ -440,8 +434,6 @@ class _BodySuccessState extends State { mimeType: widget.mediaType.mimeType, showLabel: showLabel, ), - ], - ) ], ), kVSpacer10, @@ -487,9 +479,11 @@ class _BodySuccessState extends State { width: double.maxFinite, padding: kP8, decoration: textContainerdecoration, - child: Raw( - body: widget.body, - style: kCodeStyle, + child: SingleChildScrollView( + child: SelectableText( + widget.body, + style: kCodeStyle, + ), ), ), ), From 246bb3f4e8eac85b8449aeba40b965660c256b3f Mon Sep 17 00:00:00 2001 From: Ashita Prasad Date: Mon, 15 Jan 2024 02:20:31 +0530 Subject: [PATCH 15/18] Show/Copy beautified response when available --- lib/widgets/response_widgets.dart | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/widgets/response_widgets.dart b/lib/widgets/response_widgets.dart index 6d8960e2..c45a44f7 100644 --- a/lib/widgets/response_widgets.dart +++ b/lib/widgets/response_widgets.dart @@ -425,7 +425,7 @@ class _BodySuccessState extends State { const Spacer(), kCodeRawBodyViewOptions.contains(currentSeg) ? CopyButton( - toCopy: widget.body, + toCopy: widget.formattedBody ?? widget.body, showLabel: showLabel, ) : const SizedBox(), @@ -481,7 +481,7 @@ class _BodySuccessState extends State { decoration: textContainerdecoration, child: SingleChildScrollView( child: SelectableText( - widget.body, + widget.formattedBody ?? widget.body, style: kCodeStyle, ), ), From d96a7a6628fc8d7772c00b1f7d362d6f4025687e Mon Sep 17 00:00:00 2001 From: Ashita Prasad Date: Mon, 15 Jan 2024 02:20:58 +0530 Subject: [PATCH 16/18] Revert "added: raw provider for beautify json" This reverts commit 89793cb45cc2c2b2be40b7bd6164c035faf897d8. --- lib/providers/providers.dart | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/providers/providers.dart b/lib/providers/providers.dart index 2a934094..14b06493 100644 --- a/lib/providers/providers.dart +++ b/lib/providers/providers.dart @@ -1,4 +1,3 @@ export 'collection_providers.dart'; export 'settings_providers.dart'; export 'ui_providers.dart'; -export 'raw_provider.dart'; From d2c4c56ca121f4404fd3d557587244344bc0ff96 Mon Sep 17 00:00:00 2001 From: Ashita Prasad Date: Mon, 15 Jan 2024 02:21:03 +0530 Subject: [PATCH 17/18] Revert "added: raw provider for beautify json" This reverts commit 70f9116e8f6cac0891749cd5eddb973f4f823fbd. --- lib/providers/raw_provider.dart | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 lib/providers/raw_provider.dart diff --git a/lib/providers/raw_provider.dart b/lib/providers/raw_provider.dart deleted file mode 100644 index b6afb331..00000000 --- a/lib/providers/raw_provider.dart +++ /dev/null @@ -1,5 +0,0 @@ -import 'package:flutter_riverpod/flutter_riverpod.dart'; - -final beautifyJsonProvider = StateProvider.autoDispose( - (ref) => null, -); From 92100ecdf66951a0aefd3ec950c3d1c855e9b5ca Mon Sep 17 00:00:00 2001 From: Ashita Prasad Date: Mon, 15 Jan 2024 02:22:44 +0530 Subject: [PATCH 18/18] Delete raw.dart --- lib/widgets/raw.dart | 59 -------------------------------------------- 1 file changed, 59 deletions(-) delete mode 100644 lib/widgets/raw.dart diff --git a/lib/widgets/raw.dart b/lib/widgets/raw.dart deleted file mode 100644 index b3bc6671..00000000 --- a/lib/widgets/raw.dart +++ /dev/null @@ -1,59 +0,0 @@ -import 'dart:convert'; - -import 'package:apidash/providers/providers.dart'; -import 'package:apidash/widgets/snackbars.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; - -class Raw extends StatelessWidget { - const Raw({super.key, required this.body, this.style}); - - final String body; - final TextStyle? style; - - String? _formatJson(String data, {required ScaffoldMessengerState sm}) { - try { - final dynamic parsedJson = json.decode(body); - - return const JsonEncoder.withIndent(' ').convert(parsedJson); - } catch (e) { - sm.hideCurrentSnackBar(); - sm.showSnackBar(getSnackBar("Failed to beautify JSON")); - } - return null; - } - - @override - Widget build(BuildContext context) { - var sm = ScaffoldMessenger.of(context); - return Stack( - children: [ - SingleChildScrollView( - child: Consumer(builder: (context, ref, _) { - return SelectableText( - ref.watch(beautifyJsonProvider) ?? body, - style: style, - ); - }), - ), - Align( - alignment: Alignment.topRight, - child: Consumer(builder: (context, ref, _) { - return ref.watch(beautifyJsonProvider) != null - ? const SizedBox.shrink() - : ElevatedButton( - onPressed: () { - ref.read(beautifyJsonProvider.notifier).state = - _formatJson(body, sm: sm); - }, - style: ElevatedButton.styleFrom( - padding: const EdgeInsets.symmetric(horizontal: 10), - ), - child: const Text("Beautify"), - ); - }), - ), - ], - ); - } -}