From fa6dc8e352b5d1f806178d6bb367fc1170270afe Mon Sep 17 00:00:00 2001 From: DenserMeerkat Date: Fri, 15 Mar 2024 03:16:47 +0530 Subject: [PATCH 1/8] feat: drag scrolling --- lib/consts.dart | 8 +- .../request_pane/request_body.dart | 46 +-- .../request_pane/request_form_data.dart | 314 ++++++++++-------- .../request_pane/request_headers.dart | 212 ++++++------ .../request_pane/request_params.dart | 212 ++++++------ lib/widgets/form_data_field.dart | 2 +- lib/widgets/headerfield.dart | 1 + lib/widgets/request_widgets.dart | 1 + lib/widgets/textfields.dart | 1 + pubspec.lock | 68 ++-- pubspec.yaml | 1 + 11 files changed, 462 insertions(+), 404 deletions(-) diff --git a/lib/consts.dart b/lib/consts.dart index a557023d..efde9820 100644 --- a/lib/consts.dart +++ b/lib/consts.dart @@ -70,6 +70,8 @@ const kP10 = EdgeInsets.all(10); const kPt24o8 = EdgeInsets.only(top: 24, left: 8.0, right: 8.0, bottom: 8.0); const kPt5o10 = EdgeInsets.only(left: 10.0, right: 10.0, top: 5.0, bottom: 10.0); +const kPh4 = EdgeInsets.symmetric(horizontal: 4); +const kPh8 = EdgeInsets.symmetric(horizontal: 8); const kPh20 = EdgeInsets.symmetric( horizontal: 20, ); @@ -113,6 +115,11 @@ const kTextButtonMinWidth = 44.0; const kRandMax = 100000; +const kDataTableScrollbarTheme = ScrollbarThemeData( + crossAxisMargin: -4, +); +const kDataTableBottomPadding = 80.0; +const kDataRowHeight = 36.0; const kTableThemeData = DaviThemeData( columnDividerThickness: 1, columnDividerColor: kColorTransparent, @@ -279,7 +286,6 @@ enum CodegenLanguage { rustUreq("Rust (ureq)", "rust", "rs"), juliaHttp("Julia (HTTP)", "julia", "jl"); - const CodegenLanguage(this.label, this.codeHighlightLang, this.ext); final String label; final String codeHighlightLang; diff --git a/lib/screens/home_page/editor_pane/details_card/request_pane/request_body.dart b/lib/screens/home_page/editor_pane/details_card/request_pane/request_body.dart index f667f6b5..085df3f2 100644 --- a/lib/screens/home_page/editor_pane/details_card/request_pane/request_body.dart +++ b/lib/screens/home_page/editor_pane/details_card/request_pane/request_body.dart @@ -21,7 +21,6 @@ class EditRequestBody extends ConsumerWidget { decoration: BoxDecoration( color: Theme.of(context).colorScheme.background, ), - margin: kPt5o10, child: Column( children: [ const SizedBox( @@ -38,27 +37,34 @@ class EditRequestBody extends ConsumerWidget { ), Expanded( child: switch (contentType) { - ContentType.formdata => const FormDataWidget(), + ContentType.formdata => + const Padding(padding: kPh4, child: FormDataWidget()), // TODO: Fix JsonTextFieldEditor & plug it here - ContentType.json => TextFieldEditor( - key: Key("$selectedId-json-body"), - fieldKey: "$selectedId-json-body-editor", - initialValue: requestModel?.requestBody, - onChanged: (String value) { - ref - .read(collectionStateNotifierProvider.notifier) - .update(selectedId, requestBody: value); - }, + ContentType.json => Padding( + padding: kPt5o10, + child: TextFieldEditor( + key: Key("$selectedId-json-body"), + fieldKey: "$selectedId-json-body-editor", + initialValue: requestModel?.requestBody, + onChanged: (String value) { + ref + .read(collectionStateNotifierProvider.notifier) + .update(selectedId, requestBody: value); + }, + ), ), - _ => TextFieldEditor( - key: Key("$selectedId-body"), - fieldKey: "$selectedId-body-editor", - initialValue: requestModel?.requestBody, - onChanged: (String value) { - ref - .read(collectionStateNotifierProvider.notifier) - .update(selectedId, requestBody: value); - }, + _ => Padding( + padding: kPt5o10, + child: TextFieldEditor( + key: Key("$selectedId-body"), + fieldKey: "$selectedId-body-editor", + initialValue: requestModel?.requestBody, + onChanged: (String value) { + ref + .read(collectionStateNotifierProvider.notifier) + .update(selectedId, requestBody: value); + }, + ), ), }, ) diff --git a/lib/screens/home_page/editor_pane/details_card/request_pane/request_form_data.dart b/lib/screens/home_page/editor_pane/details_card/request_pane/request_form_data.dart index 5d518e22..3b9baf9f 100644 --- a/lib/screens/home_page/editor_pane/details_card/request_pane/request_form_data.dart +++ b/lib/screens/home_page/editor_pane/details_card/request_pane/request_form_data.dart @@ -1,7 +1,7 @@ import 'dart:math'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:davi/davi.dart'; +import 'package:data_table_2/data_table_2.dart'; import 'package:apidash/providers/providers.dart'; import 'package:apidash/widgets/widgets.dart'; import 'package:apidash/models/models.dart'; @@ -31,144 +31,23 @@ class _FormDataBodyState extends ConsumerState { rows = formRows == null || formRows.isEmpty ? [kFormDataEmptyModel] : formRows; - DaviModel daviModelRows = DaviModel( - rows: rows, - columns: [ - DaviColumn( - cellPadding: kpsV5, - name: 'Key', - grow: 4, - cellBuilder: (_, row) { - int idx = row.index; - return Theme( - data: Theme.of(context), - child: FormDataField( - keyId: "$selectedId-$idx-form-v-$seed", - initialValue: rows[idx].name, - hintText: " Add Key", - onChanged: (value) { - rows[idx] = rows[idx].copyWith( - name: value, - ); - _onFieldChange(selectedId!); - }, - colorScheme: Theme.of(context).colorScheme, - formDataType: rows[idx].type, - onFormDataTypeChanged: (value) { - rows[idx] = rows[idx].copyWith( - type: value ?? FormDataType.text, - ); - rows[idx] = rows[idx].copyWith(value: ""); - setState(() {}); - _onFieldChange(selectedId!); - }, - ), - ); - }, - sortable: false, - ), - DaviColumn( - width: 40, - cellPadding: kpsV5, - cellAlignment: Alignment.center, - cellBuilder: (_, row) { - return Text( - "=", - style: kCodeStyle, - ); - }, - ), - DaviColumn( - name: 'Value', - grow: 4, - cellPadding: kpsV5, - cellBuilder: (_, row) { - int idx = row.index; - return rows[idx].type == FormDataType.file - ? Align( - alignment: Alignment.centerLeft, - child: Row( - children: [ - Expanded( - child: Theme( - data: Theme.of(context), - child: ElevatedButton.icon( - icon: const Icon( - Icons.snippet_folder_rounded, - size: 20, - ), - style: ButtonStyle( - shape: MaterialStatePropertyAll( - RoundedRectangleBorder( - borderRadius: BorderRadius.circular(6), - ), - ), - ), - onPressed: () async { - var pickedResult = await pickFile(); - if (pickedResult != null && - pickedResult.files.isNotEmpty && - pickedResult.files.first.path != null) { - rows[idx] = rows[idx].copyWith( - value: pickedResult.files.first.path!, - ); - setState(() {}); - _onFieldChange(selectedId!); - } - }, - label: Text( - (rows[idx].type == FormDataType.file && - rows[idx].value.isNotEmpty) - ? rows[idx].value.toString() - : "Select File", - textAlign: TextAlign.center, - overflow: TextOverflow.ellipsis, - style: kFormDataButtonLabelTextStyle, - ), - ), - ), - ), - ], - ), - ) - : CellField( - keyId: "$selectedId-$idx-form-v-$seed", - initialValue: rows[idx].value, - hintText: " Add Value", - onChanged: (value) { - rows[idx] = rows[idx].copyWith(value: value); - _onFieldChange(selectedId!); - }, - colorScheme: Theme.of(context).colorScheme, - ); - }, - sortable: false, - ), - DaviColumn( - pinStatus: PinStatus.none, - width: 30, - cellBuilder: (_, row) { - return InkWell( - child: Theme.of(context).brightness == Brightness.dark - ? kIconRemoveDark - : kIconRemoveLight, - onTap: () { - seed = random.nextInt(kRandMax); - if (rows.length == 1) { - setState(() { - rows = [kFormDataEmptyModel]; - }); - } else { - rows.removeAt(row.index); - } - _onFieldChange(selectedId!); - setState(() {}); - }, - ); - }, - ), - ], - ); + List columns = const [ + DataColumn2( + label: Text('Key'), + ), + DataColumn2( + label: Text('='), + fixedWidth: 30, + ), + DataColumn2( + label: Text('Value'), + ), + DataColumn2( + label: Text('Remove'), + fixedWidth: 32, + ), + ]; + return Stack( children: [ Container( @@ -180,9 +59,160 @@ class _FormDataBodyState extends ConsumerState { child: Column( children: [ Expanded( - child: DaviTheme( - data: kTableThemeData, - child: Davi(daviModelRows), + child: Theme( + data: Theme.of(context) + .copyWith(scrollbarTheme: kDataTableScrollbarTheme), + child: DataTable2( + columnSpacing: 12, + dividerThickness: 0, + horizontalMargin: 0, + headingRowHeight: 0, + dataRowHeight: kDataRowHeight, + bottomMargin: kDataTableBottomPadding, + isVerticalScrollBarVisible: true, + columns: columns, + rows: List.generate( + rows.length, + (index) { + return DataRow( + key: ValueKey("$selectedId-$index-form-row-$seed"), + cells: [ + DataCell( + Theme( + data: Theme.of(context), + child: FormDataField( + keyId: "$selectedId-$index-form-v-$seed", + initialValue: rows[index].name, + hintText: "Add Key", + onChanged: (value) { + rows[index] = rows[index].copyWith( + name: value, + ); + _onFieldChange(selectedId!); + }, + colorScheme: Theme.of(context).colorScheme, + formDataType: rows[index].type, + onFormDataTypeChanged: (value) { + rows[index] = rows[index].copyWith( + type: value ?? FormDataType.text, + ); + rows[index] = + rows[index].copyWith(value: ""); + setState(() {}); + _onFieldChange(selectedId!); + }, + ), + ), + ), + DataCell( + Text( + "=", + style: kCodeStyle, + ), + ), + DataCell( + rows[index].type == FormDataType.file + ? Align( + alignment: Alignment.centerLeft, + child: Row( + children: [ + Expanded( + child: Theme( + data: Theme.of(context), + child: ElevatedButton.icon( + icon: const Icon( + Icons.snippet_folder_rounded, + size: 20, + ), + style: ButtonStyle( + shape: + MaterialStatePropertyAll( + RoundedRectangleBorder( + borderRadius: + BorderRadius.circular( + 6), + ), + ), + ), + onPressed: () async { + var pickedResult = + await pickFile(); + if (pickedResult != null && + pickedResult + .files.isNotEmpty && + pickedResult.files.first + .path != + null) { + rows[index] = + rows[index].copyWith( + value: pickedResult + .files.first.path!, + ); + setState(() {}); + _onFieldChange(selectedId!); + } + }, + label: Text( + (rows[index].type == + FormDataType + .file && + rows[index] + .value + .isNotEmpty) + ? rows[index] + .value + .toString() + : "Select File", + textAlign: TextAlign.center, + overflow: + TextOverflow.ellipsis, + style: + kFormDataButtonLabelTextStyle, + ), + ), + ), + ), + ], + ), + ) + : CellField( + keyId: "$selectedId-$index-form-v-$seed", + initialValue: rows[index].value, + hintText: "Add Value", + onChanged: (value) { + rows[index] = + rows[index].copyWith(value: value); + _onFieldChange(selectedId!); + }, + colorScheme: + Theme.of(context).colorScheme, + ), + ), + DataCell( + InkWell( + child: Theme.of(context).brightness == + Brightness.dark + ? kIconRemoveDark + : kIconRemoveLight, + onTap: () { + seed = random.nextInt(kRandMax); + if (rows.length == 1) { + setState(() { + rows = [kFormDataEmptyModel]; + }); + } else { + rows.removeAt(index); + } + _onFieldChange(selectedId!); + setState(() {}); + }, + ), + ), + ], + ); + }, + ), + ), ), ), ], 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 7658c8a0..4e2adba6 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 @@ -1,7 +1,7 @@ import 'dart:math'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:davi/davi.dart'; +import 'package:data_table_2/data_table_2.dart'; import 'package:apidash/providers/providers.dart'; import 'package:apidash/widgets/widgets.dart'; import 'package:apidash/models/models.dart'; @@ -49,101 +49,27 @@ class EditRequestHeadersState extends ConsumerState { ref.read(selectedRequestModelProvider)?.isHeaderEnabledList ?? List.filled(rows.length, true, growable: true); - DaviModel model = DaviModel( - rows: rows, - columns: [ - DaviColumn( - name: 'Checkbox', - width: 30, - cellBuilder: (_, row) { - int idx = row.index; - return CheckBox( - keyId: "$selectedId-$idx-headers-c-$seed", - value: isRowEnabledList[idx], - onChanged: (value) { - setState(() { - isRowEnabledList[idx] = value!; - }); - _onFieldChange(selectedId!); - }, - colorScheme: Theme.of(context).colorScheme, - ); - }, - ), - DaviColumn( - name: 'Header Name', - width: 70, - grow: 1, - cellBuilder: (_, row) { - int idx = row.index; - return HeaderField( - keyId: "$selectedId-$idx-headers-k-$seed", - initialValue: rows[idx].name, - hintText: "Add Header Name", - onChanged: (value) { - rows[idx] = rows[idx].copyWith(name: value); - _onFieldChange(selectedId!); - }, - colorScheme: Theme.of(context).colorScheme, - ); - }, - sortable: false, - ), - DaviColumn( - width: 30, - cellBuilder: (_, row) { - return Text( - "=", - style: kCodeStyle, - ); - }, - ), - DaviColumn( - name: 'Header Value', - grow: 1, - cellBuilder: (_, row) { - int idx = row.index; - return CellField( - keyId: "$selectedId-$idx-headers-v-$seed", - initialValue: rows[idx].value, - hintText: " Add Header Value", - onChanged: (value) { - rows[idx] = rows[idx].copyWith(value: value); - _onFieldChange(selectedId!); - }, - colorScheme: Theme.of(context).colorScheme, - ); - }, - sortable: false, - ), - DaviColumn( - pinStatus: PinStatus.none, - width: 30, - cellBuilder: (_, row) { - return InkWell( - child: Theme.of(context).brightness == Brightness.dark - ? kIconRemoveDark - : kIconRemoveLight, - onTap: () { - seed = random.nextInt(kRandMax); - if (rows.length == 1) { - setState(() { - rows = [ - kNameValueEmptyModel, - ]; - isRowEnabledList = [true]; - }); - } else { - rows.removeAt(row.index); - isRowEnabledList.removeAt(row.index); - } - _onFieldChange(selectedId!); - }, - ); - }, - ), - ], - ); + List columns = const [ + DataColumn2( + label: Text('Checkbox'), + fixedWidth: 30, + ), + DataColumn2( + label: Text('Header Name'), + ), + DataColumn2( + label: Text('='), + fixedWidth: 30, + ), + DataColumn2( + label: Text('Header Value'), + ), + DataColumn2( + label: Text('Remove'), + fixedWidth: 32, + ), + ]; + return Stack( children: [ Container( @@ -155,9 +81,97 @@ class EditRequestHeadersState extends ConsumerState { child: Column( children: [ Expanded( - child: DaviTheme( - data: kTableThemeData, - child: Davi(model), + child: Theme( + data: Theme.of(context) + .copyWith(scrollbarTheme: kDataTableScrollbarTheme), + child: DataTable2( + columnSpacing: 12, + dividerThickness: 0, + horizontalMargin: 0, + headingRowHeight: 0, + dataRowHeight: kDataRowHeight, + bottomMargin: kDataTableBottomPadding, + isVerticalScrollBarVisible: true, + columns: columns, + rows: List.generate( + rows.length, + (index) { + return DataRow( + key: ValueKey("$selectedId-$index-headers-row-$seed"), + cells: [ + DataCell( + CheckBox( + keyId: "$selectedId-$index-headers-c-$seed", + value: isRowEnabledList[index], + onChanged: (value) { + setState(() { + isRowEnabledList[index] = value!; + }); + _onFieldChange(selectedId!); + }, + colorScheme: Theme.of(context).colorScheme, + ), + ), + DataCell( + HeaderField( + keyId: "$selectedId-$index-headers-k-$seed", + initialValue: rows[index].name, + hintText: "Add Header Name", + onChanged: (value) { + rows[index] = + rows[index].copyWith(name: value); + _onFieldChange(selectedId!); + }, + colorScheme: Theme.of(context).colorScheme, + ), + ), + DataCell( + Text( + "=", + style: kCodeStyle, + ), + ), + DataCell( + CellField( + keyId: "$selectedId-$index-headers-v-$seed", + initialValue: rows[index].value, + hintText: "Add Header Value", + onChanged: (value) { + rows[index] = + rows[index].copyWith(value: value); + _onFieldChange(selectedId!); + }, + colorScheme: Theme.of(context).colorScheme, + ), + ), + DataCell( + InkWell( + child: Theme.of(context).brightness == + Brightness.dark + ? kIconRemoveDark + : kIconRemoveLight, + onTap: () { + seed = random.nextInt(kRandMax); + if (rows.length == 1) { + setState(() { + rows = [ + kNameValueEmptyModel, + ]; + isRowEnabledList = [true]; + }); + } else { + rows.removeAt(index); + isRowEnabledList.removeAt(index); + } + _onFieldChange(selectedId!); + }, + ), + ), + ], + ); + }, + ), + ), ), ), ], 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 01005df6..c6fe63ef 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 @@ -1,11 +1,11 @@ import 'dart:math'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:davi/davi.dart'; import 'package:apidash/providers/providers.dart'; import 'package:apidash/widgets/widgets.dart'; import 'package:apidash/models/models.dart'; import 'package:apidash/consts.dart'; +import 'package:data_table_2/data_table_2.dart'; class EditRequestURLParams extends ConsumerStatefulWidget { const EditRequestURLParams({super.key}); @@ -50,101 +50,26 @@ class EditRequestURLParamsState extends ConsumerState { ref.read(selectedRequestModelProvider)?.isParamEnabledList ?? List.filled(rows.length, true, growable: true); - DaviModel model = DaviModel( - rows: rows, - columns: [ - DaviColumn( - name: 'Checkbox', - width: 30, - cellBuilder: (_, row) { - int idx = row.index; - return CheckBox( - keyId: "$selectedId-$idx-params-c-$seed", - value: isRowEnabledList[idx], - onChanged: (value) { - setState(() { - isRowEnabledList[idx] = value!; - }); - _onFieldChange(selectedId!); - }, - colorScheme: Theme.of(context).colorScheme, - ); - }, - ), - DaviColumn( - name: 'URL Parameter', - width: 70, - grow: 1, - cellBuilder: (_, row) { - int idx = row.index; - return CellField( - keyId: "$selectedId-$idx-params-k-$seed", - initialValue: rows[idx].name, - hintText: "Add URL Parameter", - onChanged: (value) { - rows[idx] = rows[idx].copyWith(name: value); - _onFieldChange(selectedId!); - }, - colorScheme: Theme.of(context).colorScheme, - ); - }, - sortable: false, - ), - DaviColumn( - width: 30, - cellBuilder: (_, row) { - return Text( - "=", - style: kCodeStyle, - ); - }, - ), - DaviColumn( - name: 'Value', - grow: 1, - cellBuilder: (_, row) { - int idx = row.index; - return CellField( - keyId: "$selectedId-$idx-params-v-$seed", - initialValue: rows[idx].value, - hintText: "Add Value", - onChanged: (value) { - rows[idx] = rows[idx].copyWith(value: value); - _onFieldChange(selectedId!); - }, - colorScheme: Theme.of(context).colorScheme, - ); - }, - sortable: false, - ), - DaviColumn( - pinStatus: PinStatus.none, - width: 30, - cellBuilder: (_, row) { - return InkWell( - child: Theme.of(context).brightness == Brightness.dark - ? kIconRemoveDark - : kIconRemoveLight, - onTap: () { - seed = random.nextInt(kRandMax); - if (rows.length == 1) { - setState(() { - rows = [ - kNameValueEmptyModel, - ]; - isRowEnabledList = [true]; - }); - } else { - rows.removeAt(row.index); - isRowEnabledList.removeAt(row.index); - } - _onFieldChange(selectedId!); - }, - ); - }, - ), - ], - ); + List columns = const [ + DataColumn2( + label: Text('Checkbox'), + fixedWidth: 30, + ), + DataColumn2( + label: Text('URL Parameter'), + ), + DataColumn2( + label: Text('='), + fixedWidth: 30, + ), + DataColumn2( + label: Text('Parameter Value'), + ), + DataColumn2( + label: Text('Remove'), + fixedWidth: 32, + ), + ]; return Stack( children: [ Container( @@ -154,11 +79,100 @@ class EditRequestURLParamsState extends ConsumerState { ), margin: kP10, child: Column( + crossAxisAlignment: CrossAxisAlignment.stretch, children: [ Expanded( - child: DaviTheme( - data: kTableThemeData, - child: Davi(model), + child: Theme( + data: Theme.of(context) + .copyWith(scrollbarTheme: kDataTableScrollbarTheme), + child: DataTable2( + columnSpacing: 12, + dividerThickness: 0, + horizontalMargin: 0, + headingRowHeight: 0, + dataRowHeight: kDataRowHeight, + bottomMargin: kDataTableBottomPadding, + isVerticalScrollBarVisible: true, + columns: columns, + rows: List.generate( + rows.length, + (index) { + return DataRow( + key: ValueKey("$selectedId-$index-params-row-$seed"), + cells: [ + DataCell( + CheckBox( + keyId: "$selectedId-$index-params-c-$seed", + value: isRowEnabledList[index], + onChanged: (value) { + setState(() { + isRowEnabledList[index] = value!; + }); + _onFieldChange(selectedId!); + }, + colorScheme: Theme.of(context).colorScheme, + ), + ), + DataCell( + CellField( + keyId: "$selectedId-$index-params-k-$seed", + initialValue: rows[index].name, + hintText: "Add URL Parameter", + onChanged: (value) { + rows[index] = + rows[index].copyWith(name: value); + _onFieldChange(selectedId!); + }, + colorScheme: Theme.of(context).colorScheme, + ), + ), + DataCell( + Text( + "=", + style: kCodeStyle, + ), + ), + DataCell( + CellField( + keyId: "$selectedId-$index-params-v-$seed", + initialValue: rows[index].value, + hintText: "Add Value", + onChanged: (value) { + rows[index] = + rows[index].copyWith(value: value); + _onFieldChange(selectedId!); + }, + colorScheme: Theme.of(context).colorScheme, + ), + ), + DataCell( + InkWell( + child: Theme.of(context).brightness == + Brightness.dark + ? kIconRemoveDark + : kIconRemoveLight, + onTap: () { + seed = random.nextInt(kRandMax); + if (rows.length == 1) { + setState(() { + rows = [ + kNameValueEmptyModel, + ]; + isRowEnabledList = [true]; + }); + } else { + rows.removeAt(index); + isRowEnabledList.removeAt(index); + } + _onFieldChange(selectedId!); + }, + ), + ), + ], + ); + }, + ), + ), ), ), ], diff --git a/lib/widgets/form_data_field.dart b/lib/widgets/form_data_field.dart index 29f210c4..b578617b 100644 --- a/lib/widgets/form_data_field.dart +++ b/lib/widgets/form_data_field.dart @@ -52,7 +52,7 @@ class _FormDataFieldState extends State { ), ), hintText: widget.hintText, - contentPadding: const EdgeInsets.only(bottom: 16), + contentPadding: const EdgeInsets.only(bottom: 13), focusedBorder: UnderlineInputBorder( borderSide: BorderSide( color: colorScheme.primary.withOpacity( diff --git a/lib/widgets/headerfield.dart b/lib/widgets/headerfield.dart index 5bce6c8f..4f0fd096 100644 --- a/lib/widgets/headerfield.dart +++ b/lib/widgets/headerfield.dart @@ -81,6 +81,7 @@ class _HeaderFieldState extends State { hintStyle: kCodeStyle.copyWith( color: colorScheme.outline.withOpacity(kHintOpacity)), hintText: widget.hintText, + contentPadding: const EdgeInsets.only(bottom: 12), focusedBorder: UnderlineInputBorder( borderSide: BorderSide( color: colorScheme.primary.withOpacity( diff --git a/lib/widgets/request_widgets.dart b/lib/widgets/request_widgets.dart index ffac504e..e35df367 100644 --- a/lib/widgets/request_widgets.dart +++ b/lib/widgets/request_widgets.dart @@ -95,6 +95,7 @@ class _RequestPaneState extends State ), ], ), + kVSpacer5, Expanded( child: TabBarView( controller: _controller, diff --git a/lib/widgets/textfields.dart b/lib/widgets/textfields.dart index da68f9e2..c7bac1fb 100644 --- a/lib/widgets/textfields.dart +++ b/lib/widgets/textfields.dart @@ -68,6 +68,7 @@ class CellField extends StatelessWidget { ), ), hintText: hintText, + contentPadding: const EdgeInsets.only(bottom: 12), focusedBorder: UnderlineInputBorder( borderSide: BorderSide( color: clrScheme.primary.withOpacity( diff --git a/pubspec.lock b/pubspec.lock index 4125ed98..f2f67f8e 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -233,6 +233,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.3.4" + data_table_2: + dependency: "direct main" + description: + name: data_table_2 + sha256: fdb0551f103f1daf837bddfde14619fd9e683408833a618c9afabeb533fce88c + url: "https://pub.dev" + source: hosted + version: "2.5.11" davi: dependency: "direct main" description: @@ -508,10 +516,10 @@ packages: dependency: "direct main" description: name: http - sha256: "761a297c042deedc1ffbb156d6e2af13886bb305c2a343a4d972504cd67dd938" + sha256: a2bbf9d017fcced29139daa8ed2bba4ece450ab222871df93ca9eec6f80c34ba url: "https://pub.dev" source: hosted - version: "1.2.1" + version: "1.2.0" http_multi_server: dependency: transitive description: @@ -633,30 +641,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.2.0" - leak_tracker: - dependency: transitive - description: - name: leak_tracker - sha256: "78eb209deea09858f5269f5a5b02be4049535f568c07b275096836f01ea323fa" - url: "https://pub.dev" - source: hosted - version: "10.0.0" - leak_tracker_flutter_testing: - dependency: transitive - description: - name: leak_tracker_flutter_testing - sha256: b46c5e37c19120a8a01918cfaf293547f47269f7cb4b0058f21531c2465d6ef0 - url: "https://pub.dev" - source: hosted - version: "2.0.1" - leak_tracker_testing: - dependency: transitive - description: - name: leak_tracker_testing - sha256: a597f72a664dbd293f3bfc51f9ba69816f84dcd403cdac7066cb3f6003f3ab47 - url: "https://pub.dev" - source: hosted - version: "2.0.1" lints: dependency: transitive description: @@ -693,26 +677,26 @@ packages: dependency: transitive description: name: matcher - sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb + sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" url: "https://pub.dev" source: hosted - version: "0.12.16+1" + version: "0.12.16" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" + sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" url: "https://pub.dev" source: hosted - version: "0.8.0" + version: "0.5.0" meta: dependency: transitive description: name: meta - sha256: d584fa6707a52763a52446f02cc621b077888fb63b93bbcb1143a7be5a0c0c04 + sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e url: "https://pub.dev" source: hosted - version: "1.11.0" + version: "1.10.0" mime: dependency: transitive description: @@ -789,10 +773,10 @@ packages: dependency: "direct main" description: name: path - sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" + sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" url: "https://pub.dev" source: hosted - version: "1.9.0" + version: "1.8.3" path_parsing: dependency: transitive description: @@ -909,10 +893,10 @@ packages: dependency: transitive description: name: pointer_interceptor_web - sha256: a6237528b46c411d8d55cdfad8fcb3269fc4cbb26060b14bff94879165887d1e + sha256: "9386e064097fd16419e935c23f08f35b58e6aaec155dd39bd6a003b88f9c14b4" url: "https://pub.dev" source: hosted - version: "0.10.2" + version: "0.10.1+2" pointycastle: dependency: transitive description: @@ -1234,10 +1218,10 @@ packages: dependency: transitive description: name: url_launcher_web - sha256: "3692a459204a33e04bc94f5fb91158faf4f2c8903281ddd82915adecdb1a901d" + sha256: fff0932192afeedf63cdd50ecbb1bc825d31aed259f02bb8dba0f3b729a5e88b url: "https://pub.dev" source: hosted - version: "2.3.0" + version: "2.2.3" url_launcher_windows: dependency: transitive description: @@ -1306,10 +1290,10 @@ packages: dependency: "direct main" description: name: web - sha256: "97da13628db363c635202ad97068d47c5b8aa555808e7a9411963c533b449b27" + sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152 url: "https://pub.dev" source: hosted - version: "0.5.1" + version: "0.3.0" web_socket_channel: dependency: transitive description: @@ -1376,5 +1360,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.3.0 <4.0.0" - flutter: ">=3.19.0" + dart: ">=3.2.3 <4.0.0" + flutter: ">=3.16.0" diff --git a/pubspec.yaml b/pubspec.yaml index ab250f26..9b2e354c 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -56,6 +56,7 @@ dependencies: dart_style: ^2.3.4 json_text_field: ^1.1.0 csv: ^5.1.1 + data_table_2: ^2.5.11 dev_dependencies: flutter_test: From 266e36cf668968fee8ce62d813bece3528cdbe2f Mon Sep 17 00:00:00 2001 From: DenserMeerkat Date: Fri, 15 Mar 2024 03:18:20 +0530 Subject: [PATCH 2/8] rafactor: remove davi --- lib/consts.dart | 14 -------------- pubspec.yaml | 1 - 2 files changed, 15 deletions(-) diff --git a/lib/consts.dart b/lib/consts.dart index efde9820..deb14977 100644 --- a/lib/consts.dart +++ b/lib/consts.dart @@ -3,7 +3,6 @@ import 'dart:convert'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:google_fonts/google_fonts.dart'; -import 'package:davi/davi.dart'; const kDiscordUrl = "https://bit.ly/heyfoss"; const kGitUrl = "https://github.com/foss42/apidash"; @@ -120,19 +119,6 @@ const kDataTableScrollbarTheme = ScrollbarThemeData( ); const kDataTableBottomPadding = 80.0; const kDataRowHeight = 36.0; -const kTableThemeData = DaviThemeData( - columnDividerThickness: 1, - columnDividerColor: kColorTransparent, - row: RowThemeData( - dividerColor: kColorTransparent, - ), - decoration: BoxDecoration( - border: Border(), - ), - header: HeaderThemeData( - visible: false, - ), -); const kIconRemoveDark = Icon( Icons.remove_circle, diff --git a/pubspec.yaml b/pubspec.yaml index 9b2e354c..cc5a6b0a 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -15,7 +15,6 @@ dependencies: url_launcher: ^6.1.12 flutter_riverpod: ^2.3.7 uuid: ^4.1.0 - davi: ^3.4.1 http: ^1.1.0 http_parser: ^4.0.2 collection: ^1.17.2 From 5beb51d2f4bc891902dd28cfc733b2ff1e96ea57 Mon Sep 17 00:00:00 2001 From: DenserMeerkat Date: Sat, 16 Mar 2024 15:52:29 +0530 Subject: [PATCH 3/8] fix: textstyle height, keyId --- .../request_pane/request_form_data.dart | 6 +- .../request_pane/request_headers.dart | 4 +- .../request_pane/request_params.dart | 2 +- lib/widgets/form_data_field.dart | 4 +- lib/widgets/headerfield.dart | 6 +- lib/widgets/textfields.dart | 2 + pubspec.lock | 76 ++++++++++--------- 7 files changed, 58 insertions(+), 42 deletions(-) diff --git a/lib/screens/home_page/editor_pane/details_card/request_pane/request_form_data.dart b/lib/screens/home_page/editor_pane/details_card/request_pane/request_form_data.dart index 3b9baf9f..de703930 100644 --- a/lib/screens/home_page/editor_pane/details_card/request_pane/request_form_data.dart +++ b/lib/screens/home_page/editor_pane/details_card/request_pane/request_form_data.dart @@ -81,9 +81,9 @@ class _FormDataBodyState extends ConsumerState { Theme( data: Theme.of(context), child: FormDataField( - keyId: "$selectedId-$index-form-v-$seed", + keyId: "$selectedId-$index-form-k-$seed", initialValue: rows[index].name, - hintText: "Add Key", + hintText: " Add Key", onChanged: (value) { rows[index] = rows[index].copyWith( name: value, @@ -178,7 +178,7 @@ class _FormDataBodyState extends ConsumerState { : CellField( keyId: "$selectedId-$index-form-v-$seed", initialValue: rows[index].value, - hintText: "Add Value", + hintText: " Add Value", onChanged: (value) { rows[index] = rows[index].copyWith(value: value); 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 4e2adba6..52648d4b 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 @@ -37,7 +37,7 @@ class EditRequestHeadersState extends ConsumerState { @override Widget build(BuildContext context) { final selectedId = ref.watch(selectedIdStateProvider); - final length = ref.watch(selectedRequestModelProvider + ref.watch(selectedRequestModelProvider .select((value) => value?.requestHeaders?.length)); var rH = ref.read(selectedRequestModelProvider)?.requestHeaders; rows = (rH == null || rH.isEmpty) @@ -135,7 +135,7 @@ class EditRequestHeadersState extends ConsumerState { CellField( keyId: "$selectedId-$index-headers-v-$seed", initialValue: rows[index].value, - hintText: "Add Header Value", + hintText: " Add Header Value", onChanged: (value) { rows[index] = rows[index].copyWith(value: value); 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 c6fe63ef..6c673db5 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 @@ -38,7 +38,7 @@ class EditRequestURLParamsState extends ConsumerState { @override Widget build(BuildContext context) { final selectedId = ref.watch(selectedIdStateProvider); - final length = ref.watch(selectedRequestModelProvider + ref.watch(selectedRequestModelProvider .select((value) => value?.requestParams?.length)); var rP = ref.read(selectedRequestModelProvider)?.requestParams; rows = (rP == null || rP.isEmpty) diff --git a/lib/widgets/form_data_field.dart b/lib/widgets/form_data_field.dart index b578617b..76c40be4 100644 --- a/lib/widgets/form_data_field.dart +++ b/lib/widgets/form_data_field.dart @@ -43,16 +43,18 @@ class _FormDataFieldState extends State { initialValue: widget.initialValue, key: Key(widget.keyId), style: kCodeStyle.copyWith( + height: 1.8, color: colorScheme.onSurface, ), decoration: InputDecoration( hintStyle: kCodeStyle.copyWith( + height: 1.8, color: colorScheme.outline.withOpacity( kHintOpacity, ), ), hintText: widget.hintText, - contentPadding: const EdgeInsets.only(bottom: 13), + contentPadding: const EdgeInsets.only(bottom: 12), focusedBorder: UnderlineInputBorder( borderSide: BorderSide( color: colorScheme.primary.withOpacity( diff --git a/lib/widgets/headerfield.dart b/lib/widgets/headerfield.dart index 4f0fd096..ec0f3a48 100644 --- a/lib/widgets/headerfield.dart +++ b/lib/widgets/headerfield.dart @@ -76,9 +76,13 @@ class _HeaderFieldState extends State { onChanged: widget.onChanged, controller: controller, focusNode: focusNode, - style: kCodeStyle.copyWith(color: colorScheme.onSurface), + style: kCodeStyle.copyWith( + height: 1.6, + color: colorScheme.onSurface, + ), decoration: InputDecoration( hintStyle: kCodeStyle.copyWith( + height: 1.6, color: colorScheme.outline.withOpacity(kHintOpacity)), hintText: widget.hintText, contentPadding: const EdgeInsets.only(bottom: 12), diff --git a/lib/widgets/textfields.dart b/lib/widgets/textfields.dart index c7bac1fb..cb5e224b 100644 --- a/lib/widgets/textfields.dart +++ b/lib/widgets/textfields.dart @@ -59,10 +59,12 @@ class CellField extends StatelessWidget { key: Key(keyId), initialValue: initialValue, style: kCodeStyle.copyWith( + height: 1.6, color: clrScheme.onSurface, ), decoration: InputDecoration( hintStyle: kCodeStyle.copyWith( + height: 1.6, color: clrScheme.outline.withOpacity( kHintOpacity, ), diff --git a/pubspec.lock b/pubspec.lock index f2f67f8e..ac27b7a9 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -49,14 +49,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.1.18" - axis_layout: - dependency: transitive - description: - name: axis_layout - sha256: "9ba44f279f39121065d811e72da892de86f5613d68eb0b295f60d021ea8f2a59" - url: "https://pub.dev" - source: hosted - version: "1.0.1" barcode: dependency: transitive description: @@ -241,14 +233,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.5.11" - davi: - dependency: "direct main" - description: - name: davi - sha256: "4105870281c4c33e8e017e21e212b96fd2637b4c1a35b2a56f14aaa4acdf6f0d" - url: "https://pub.dev" - source: hosted - version: "3.4.1" eventify: dependency: transitive description: @@ -516,10 +500,10 @@ packages: dependency: "direct main" description: name: http - sha256: a2bbf9d017fcced29139daa8ed2bba4ece450ab222871df93ca9eec6f80c34ba + sha256: "761a297c042deedc1ffbb156d6e2af13886bb305c2a343a4d972504cd67dd938" url: "https://pub.dev" source: hosted - version: "1.2.0" + version: "1.2.1" http_multi_server: dependency: transitive description: @@ -641,6 +625,30 @@ packages: url: "https://pub.dev" source: hosted version: "0.2.0" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "78eb209deea09858f5269f5a5b02be4049535f568c07b275096836f01ea323fa" + url: "https://pub.dev" + source: hosted + version: "10.0.0" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: b46c5e37c19120a8a01918cfaf293547f47269f7cb4b0058f21531c2465d6ef0 + url: "https://pub.dev" + source: hosted + version: "2.0.1" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: a597f72a664dbd293f3bfc51f9ba69816f84dcd403cdac7066cb3f6003f3ab47 + url: "https://pub.dev" + source: hosted + version: "2.0.1" lints: dependency: transitive description: @@ -677,26 +685,26 @@ packages: dependency: transitive description: name: matcher - sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" + sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb url: "https://pub.dev" source: hosted - version: "0.12.16" + version: "0.12.16+1" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" + sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" url: "https://pub.dev" source: hosted - version: "0.5.0" + version: "0.8.0" meta: dependency: transitive description: name: meta - sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e + sha256: d584fa6707a52763a52446f02cc621b077888fb63b93bbcb1143a7be5a0c0c04 url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.11.0" mime: dependency: transitive description: @@ -773,10 +781,10 @@ packages: dependency: "direct main" description: name: path - sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" + sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" url: "https://pub.dev" source: hosted - version: "1.8.3" + version: "1.9.0" path_parsing: dependency: transitive description: @@ -893,10 +901,10 @@ packages: dependency: transitive description: name: pointer_interceptor_web - sha256: "9386e064097fd16419e935c23f08f35b58e6aaec155dd39bd6a003b88f9c14b4" + sha256: a6237528b46c411d8d55cdfad8fcb3269fc4cbb26060b14bff94879165887d1e url: "https://pub.dev" source: hosted - version: "0.10.1+2" + version: "0.10.2" pointycastle: dependency: transitive description: @@ -1218,10 +1226,10 @@ packages: dependency: transitive description: name: url_launcher_web - sha256: fff0932192afeedf63cdd50ecbb1bc825d31aed259f02bb8dba0f3b729a5e88b + sha256: "3692a459204a33e04bc94f5fb91158faf4f2c8903281ddd82915adecdb1a901d" url: "https://pub.dev" source: hosted - version: "2.2.3" + version: "2.3.0" url_launcher_windows: dependency: transitive description: @@ -1290,10 +1298,10 @@ packages: dependency: "direct main" description: name: web - sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152 + sha256: "97da13628db363c635202ad97068d47c5b8aa555808e7a9411963c533b449b27" url: "https://pub.dev" source: hosted - version: "0.3.0" + version: "0.5.1" web_socket_channel: dependency: transitive description: @@ -1360,5 +1368,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.2.3 <4.0.0" - flutter: ">=3.16.0" + dart: ">=3.3.0 <4.0.0" + flutter: ">=3.19.0" From 6724db3be67f7c4749e2a348c461b5d7c695a754 Mon Sep 17 00:00:00 2001 From: DenserMeerkat Date: Sun, 17 Mar 2024 04:06:17 +0530 Subject: [PATCH 4/8] fix: form data columns --- .../request_pane/request_form_data.dart | 151 ++++++++---------- .../request_pane/request_headers.dart | 2 +- .../request_pane/request_params.dart | 2 +- lib/widgets/form_data_field.dart | 2 - lib/widgets/headerfield.dart | 2 - lib/widgets/textfields.dart | 2 - pubspec.yaml | 4 +- 7 files changed, 69 insertions(+), 96 deletions(-) diff --git a/lib/screens/home_page/editor_pane/details_card/request_pane/request_form_data.dart b/lib/screens/home_page/editor_pane/details_card/request_pane/request_form_data.dart index de703930..b83666a6 100644 --- a/lib/screens/home_page/editor_pane/details_card/request_pane/request_form_data.dart +++ b/lib/screens/home_page/editor_pane/details_card/request_pane/request_form_data.dart @@ -34,13 +34,19 @@ class _FormDataBodyState extends ConsumerState { List columns = const [ DataColumn2( label: Text('Key'), + size: ColumnSize.M, ), DataColumn2( label: Text('='), - fixedWidth: 30, + fixedWidth: 20, + ), + DataColumn2( + label: Text('Type'), + fixedWidth: 70, ), DataColumn2( label: Text('Value'), + size: ColumnSize.L, ), DataColumn2( label: Text('Remove'), @@ -78,30 +84,16 @@ class _FormDataBodyState extends ConsumerState { key: ValueKey("$selectedId-$index-form-row-$seed"), cells: [ DataCell( - Theme( - data: Theme.of(context), - child: FormDataField( - keyId: "$selectedId-$index-form-k-$seed", - initialValue: rows[index].name, - hintText: " Add Key", - onChanged: (value) { - rows[index] = rows[index].copyWith( - name: value, - ); - _onFieldChange(selectedId!); - }, - colorScheme: Theme.of(context).colorScheme, - formDataType: rows[index].type, - onFormDataTypeChanged: (value) { - rows[index] = rows[index].copyWith( - type: value ?? FormDataType.text, - ); - rows[index] = - rows[index].copyWith(value: ""); - setState(() {}); - _onFieldChange(selectedId!); - }, - ), + CellField( + keyId: "$selectedId-$index-form-k-$seed", + initialValue: rows[index].name, + hintText: " Add Key", + onChanged: (value) { + rows[index] = + rows[index].copyWith(name: value); + _onFieldChange(selectedId!); + }, + colorScheme: Theme.of(context).colorScheme, ), ), DataCell( @@ -110,69 +102,56 @@ class _FormDataBodyState extends ConsumerState { style: kCodeStyle, ), ), + DataCell( + DropdownButtonFormData( + formDataType: rows[index].type, + onChanged: (value) { + rows[index] = rows[index].copyWith( + type: value ?? FormDataType.text, + ); + rows[index] = rows[index].copyWith(value: ""); + setState(() {}); + _onFieldChange(selectedId!); + }, + ), + ), DataCell( rows[index].type == FormDataType.file - ? Align( - alignment: Alignment.centerLeft, - child: Row( - children: [ - Expanded( - child: Theme( - data: Theme.of(context), - child: ElevatedButton.icon( - icon: const Icon( - Icons.snippet_folder_rounded, - size: 20, - ), - style: ButtonStyle( - shape: - MaterialStatePropertyAll( - RoundedRectangleBorder( - borderRadius: - BorderRadius.circular( - 6), - ), - ), - ), - onPressed: () async { - var pickedResult = - await pickFile(); - if (pickedResult != null && - pickedResult - .files.isNotEmpty && - pickedResult.files.first - .path != - null) { - rows[index] = - rows[index].copyWith( - value: pickedResult - .files.first.path!, - ); - setState(() {}); - _onFieldChange(selectedId!); - } - }, - label: Text( - (rows[index].type == - FormDataType - .file && - rows[index] - .value - .isNotEmpty) - ? rows[index] - .value - .toString() - : "Select File", - textAlign: TextAlign.center, - overflow: - TextOverflow.ellipsis, - style: - kFormDataButtonLabelTextStyle, - ), - ), - ), - ), - ], + ? ElevatedButton.icon( + icon: const Icon( + Icons.snippet_folder_rounded, + size: 20, + ), + style: ElevatedButton.styleFrom( + minimumSize: const Size.fromHeight( + kDataRowHeight), + shape: RoundedRectangleBorder( + borderRadius: + BorderRadius.circular(6), + ), + ), + onPressed: () async { + var pickedResult = await pickFile(); + if (pickedResult != null && + pickedResult.files.isNotEmpty && + pickedResult.files.first.path != + null) { + rows[index] = rows[index].copyWith( + value: + pickedResult.files.first.path!, + ); + setState(() {}); + _onFieldChange(selectedId!); + } + }, + label: Text( + (rows[index].type == + FormDataType.file && + rows[index].value.isNotEmpty) + ? rows[index].value.toString() + : "Select File", + overflow: TextOverflow.ellipsis, + style: kFormDataButtonLabelTextStyle, ), ) : CellField( 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 52648d4b..2fde22ab 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 @@ -59,7 +59,7 @@ class EditRequestHeadersState extends ConsumerState { ), DataColumn2( label: Text('='), - fixedWidth: 30, + fixedWidth: 22, ), DataColumn2( label: Text('Header Value'), 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 6c673db5..4f122798 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 @@ -60,7 +60,7 @@ class EditRequestURLParamsState extends ConsumerState { ), DataColumn2( label: Text('='), - fixedWidth: 30, + fixedWidth: 22, ), DataColumn2( label: Text('Parameter Value'), diff --git a/lib/widgets/form_data_field.dart b/lib/widgets/form_data_field.dart index 76c40be4..7b7751fb 100644 --- a/lib/widgets/form_data_field.dart +++ b/lib/widgets/form_data_field.dart @@ -43,12 +43,10 @@ class _FormDataFieldState extends State { initialValue: widget.initialValue, key: Key(widget.keyId), style: kCodeStyle.copyWith( - height: 1.8, color: colorScheme.onSurface, ), decoration: InputDecoration( hintStyle: kCodeStyle.copyWith( - height: 1.8, color: colorScheme.outline.withOpacity( kHintOpacity, ), diff --git a/lib/widgets/headerfield.dart b/lib/widgets/headerfield.dart index ec0f3a48..3d60caac 100644 --- a/lib/widgets/headerfield.dart +++ b/lib/widgets/headerfield.dart @@ -77,12 +77,10 @@ class _HeaderFieldState extends State { controller: controller, focusNode: focusNode, style: kCodeStyle.copyWith( - height: 1.6, color: colorScheme.onSurface, ), decoration: InputDecoration( hintStyle: kCodeStyle.copyWith( - height: 1.6, color: colorScheme.outline.withOpacity(kHintOpacity)), hintText: widget.hintText, contentPadding: const EdgeInsets.only(bottom: 12), diff --git a/lib/widgets/textfields.dart b/lib/widgets/textfields.dart index cb5e224b..c7bac1fb 100644 --- a/lib/widgets/textfields.dart +++ b/lib/widgets/textfields.dart @@ -59,12 +59,10 @@ class CellField extends StatelessWidget { key: Key(keyId), initialValue: initialValue, style: kCodeStyle.copyWith( - height: 1.6, color: clrScheme.onSurface, ), decoration: InputDecoration( hintStyle: kCodeStyle.copyWith( - height: 1.6, color: clrScheme.outline.withOpacity( kHintOpacity, ), diff --git a/pubspec.yaml b/pubspec.yaml index 79ee83ab..9c30cd6f 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -13,7 +13,7 @@ dependencies: multi_split_view: ^2.4.0 url_launcher: ^6.2.5 flutter_riverpod: ^2.5.1 - riverpod: ^2.5.1 + riverpod: ^2.5.1 uuid: ^4.3.3 http: ^1.2.1 http_parser: ^4.0.2 @@ -56,7 +56,7 @@ dependencies: json_text_field: ^1.1.0 csv: ^6.0.0 data_table_2: ^2.5.11 - + dependency_overrides: web: ^0.5.0 From c6292cb0839aef990a4a57fd22dfc60ef49a7732 Mon Sep 17 00:00:00 2001 From: DenserMeerkat Date: Sun, 17 Mar 2024 04:20:17 +0530 Subject: [PATCH 5/8] refactor: remove form_data_field --- lib/consts.dart | 2 +- .../request_pane/request_form_data.dart | 223 +++++++++--------- .../request_pane/request_headers.dart | 157 ++++++------ .../request_pane/request_params.dart | 158 ++++++------- lib/widgets/form_data_field.dart | 83 ------- lib/widgets/widgets.dart | 1 - test/widgets/form_data_field_test.dart | 21 -- 7 files changed, 266 insertions(+), 379 deletions(-) delete mode 100644 lib/widgets/form_data_field.dart delete mode 100644 test/widgets/form_data_field_test.dart diff --git a/lib/consts.dart b/lib/consts.dart index 866f7de1..25778b2f 100644 --- a/lib/consts.dart +++ b/lib/consts.dart @@ -118,7 +118,7 @@ const kDataTableScrollbarTheme = ScrollbarThemeData( crossAxisMargin: -4, ); const kDataTableBottomPadding = 80.0; -const kDataRowHeight = 36.0; +const kDataTableRowHeight = 36.0; const kIconRemoveDark = Icon( Icons.remove_circle, diff --git a/lib/screens/home_page/editor_pane/details_card/request_pane/request_form_data.dart b/lib/screens/home_page/editor_pane/details_card/request_pane/request_form_data.dart index b83666a6..a0018b73 100644 --- a/lib/screens/home_page/editor_pane/details_card/request_pane/request_form_data.dart +++ b/lib/screens/home_page/editor_pane/details_card/request_pane/request_form_data.dart @@ -54,6 +54,112 @@ class _FormDataBodyState extends ConsumerState { ), ]; + List dataRows = List.generate( + rows.length, + (index) { + return DataRow( + key: ValueKey("$selectedId-$index-form-row-$seed"), + cells: [ + DataCell( + CellField( + keyId: "$selectedId-$index-form-k-$seed", + initialValue: rows[index].name, + hintText: " Add Key", + onChanged: (value) { + rows[index] = rows[index].copyWith(name: value); + _onFieldChange(selectedId!); + }, + colorScheme: Theme.of(context).colorScheme, + ), + ), + DataCell( + Text( + "=", + style: kCodeStyle, + ), + ), + DataCell( + DropdownButtonFormData( + formDataType: rows[index].type, + onChanged: (value) { + rows[index] = rows[index].copyWith( + type: value ?? FormDataType.text, + ); + rows[index] = rows[index].copyWith(value: ""); + setState(() {}); + _onFieldChange(selectedId!); + }, + ), + ), + DataCell( + rows[index].type == FormDataType.file + ? ElevatedButton.icon( + icon: const Icon( + Icons.snippet_folder_rounded, + size: 20, + ), + style: ElevatedButton.styleFrom( + minimumSize: const Size.fromHeight(kDataTableRowHeight), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(6), + ), + ), + onPressed: () async { + var pickedResult = await pickFile(); + if (pickedResult != null && + pickedResult.files.isNotEmpty && + pickedResult.files.first.path != null) { + rows[index] = rows[index].copyWith( + value: pickedResult.files.first.path!, + ); + setState(() {}); + _onFieldChange(selectedId!); + } + }, + label: Text( + (rows[index].type == FormDataType.file && + rows[index].value.isNotEmpty) + ? rows[index].value.toString() + : "Select File", + overflow: TextOverflow.ellipsis, + style: kFormDataButtonLabelTextStyle, + ), + ) + : CellField( + keyId: "$selectedId-$index-form-v-$seed", + initialValue: rows[index].value, + hintText: " Add Value", + onChanged: (value) { + rows[index] = rows[index].copyWith(value: value); + _onFieldChange(selectedId!); + }, + colorScheme: Theme.of(context).colorScheme, + ), + ), + DataCell( + InkWell( + child: Theme.of(context).brightness == Brightness.dark + ? kIconRemoveDark + : kIconRemoveLight, + onTap: () { + seed = random.nextInt(kRandMax); + if (rows.length == 1) { + setState(() { + rows = [kFormDataEmptyModel]; + }); + } else { + rows.removeAt(index); + } + _onFieldChange(selectedId!); + setState(() {}); + }, + ), + ), + ], + ); + }, + ); + return Stack( children: [ Container( @@ -73,124 +179,11 @@ class _FormDataBodyState extends ConsumerState { dividerThickness: 0, horizontalMargin: 0, headingRowHeight: 0, - dataRowHeight: kDataRowHeight, + dataRowHeight: kDataTableRowHeight, bottomMargin: kDataTableBottomPadding, isVerticalScrollBarVisible: true, columns: columns, - rows: List.generate( - rows.length, - (index) { - return DataRow( - key: ValueKey("$selectedId-$index-form-row-$seed"), - cells: [ - DataCell( - CellField( - keyId: "$selectedId-$index-form-k-$seed", - initialValue: rows[index].name, - hintText: " Add Key", - onChanged: (value) { - rows[index] = - rows[index].copyWith(name: value); - _onFieldChange(selectedId!); - }, - colorScheme: Theme.of(context).colorScheme, - ), - ), - DataCell( - Text( - "=", - style: kCodeStyle, - ), - ), - DataCell( - DropdownButtonFormData( - formDataType: rows[index].type, - onChanged: (value) { - rows[index] = rows[index].copyWith( - type: value ?? FormDataType.text, - ); - rows[index] = rows[index].copyWith(value: ""); - setState(() {}); - _onFieldChange(selectedId!); - }, - ), - ), - DataCell( - rows[index].type == FormDataType.file - ? ElevatedButton.icon( - icon: const Icon( - Icons.snippet_folder_rounded, - size: 20, - ), - style: ElevatedButton.styleFrom( - minimumSize: const Size.fromHeight( - kDataRowHeight), - shape: RoundedRectangleBorder( - borderRadius: - BorderRadius.circular(6), - ), - ), - onPressed: () async { - var pickedResult = await pickFile(); - if (pickedResult != null && - pickedResult.files.isNotEmpty && - pickedResult.files.first.path != - null) { - rows[index] = rows[index].copyWith( - value: - pickedResult.files.first.path!, - ); - setState(() {}); - _onFieldChange(selectedId!); - } - }, - label: Text( - (rows[index].type == - FormDataType.file && - rows[index].value.isNotEmpty) - ? rows[index].value.toString() - : "Select File", - overflow: TextOverflow.ellipsis, - style: kFormDataButtonLabelTextStyle, - ), - ) - : CellField( - keyId: "$selectedId-$index-form-v-$seed", - initialValue: rows[index].value, - hintText: " Add Value", - onChanged: (value) { - rows[index] = - rows[index].copyWith(value: value); - _onFieldChange(selectedId!); - }, - colorScheme: - Theme.of(context).colorScheme, - ), - ), - DataCell( - InkWell( - child: Theme.of(context).brightness == - Brightness.dark - ? kIconRemoveDark - : kIconRemoveLight, - onTap: () { - seed = random.nextInt(kRandMax); - if (rows.length == 1) { - setState(() { - rows = [kFormDataEmptyModel]; - }); - } else { - rows.removeAt(index); - } - _onFieldChange(selectedId!); - setState(() {}); - }, - ), - ), - ], - ); - }, - ), + rows: dataRows, ), ), ), 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 2fde22ab..dde0020b 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 @@ -70,6 +70,82 @@ class EditRequestHeadersState extends ConsumerState { ), ]; + List dataRows = List.generate( + rows.length, + (index) { + return DataRow( + key: ValueKey("$selectedId-$index-headers-row-$seed"), + cells: [ + DataCell( + CheckBox( + keyId: "$selectedId-$index-headers-c-$seed", + value: isRowEnabledList[index], + onChanged: (value) { + setState(() { + isRowEnabledList[index] = value!; + }); + _onFieldChange(selectedId!); + }, + colorScheme: Theme.of(context).colorScheme, + ), + ), + DataCell( + HeaderField( + keyId: "$selectedId-$index-headers-k-$seed", + initialValue: rows[index].name, + hintText: "Add Header Name", + onChanged: (value) { + rows[index] = rows[index].copyWith(name: value); + _onFieldChange(selectedId!); + }, + colorScheme: Theme.of(context).colorScheme, + ), + ), + DataCell( + Text( + "=", + style: kCodeStyle, + ), + ), + DataCell( + CellField( + keyId: "$selectedId-$index-headers-v-$seed", + initialValue: rows[index].value, + hintText: " Add Header Value", + onChanged: (value) { + rows[index] = rows[index].copyWith(value: value); + _onFieldChange(selectedId!); + }, + colorScheme: Theme.of(context).colorScheme, + ), + ), + DataCell( + InkWell( + child: Theme.of(context).brightness == Brightness.dark + ? kIconRemoveDark + : kIconRemoveLight, + onTap: () { + seed = random.nextInt(kRandMax); + if (rows.length == 1) { + setState(() { + rows = [ + kNameValueEmptyModel, + ]; + isRowEnabledList = [true]; + }); + } else { + rows.removeAt(index); + isRowEnabledList.removeAt(index); + } + _onFieldChange(selectedId!); + }, + ), + ), + ], + ); + }, + ); + return Stack( children: [ Container( @@ -89,88 +165,11 @@ class EditRequestHeadersState extends ConsumerState { dividerThickness: 0, horizontalMargin: 0, headingRowHeight: 0, - dataRowHeight: kDataRowHeight, + dataRowHeight: kDataTableRowHeight, bottomMargin: kDataTableBottomPadding, isVerticalScrollBarVisible: true, columns: columns, - rows: List.generate( - rows.length, - (index) { - return DataRow( - key: ValueKey("$selectedId-$index-headers-row-$seed"), - cells: [ - DataCell( - CheckBox( - keyId: "$selectedId-$index-headers-c-$seed", - value: isRowEnabledList[index], - onChanged: (value) { - setState(() { - isRowEnabledList[index] = value!; - }); - _onFieldChange(selectedId!); - }, - colorScheme: Theme.of(context).colorScheme, - ), - ), - DataCell( - HeaderField( - keyId: "$selectedId-$index-headers-k-$seed", - initialValue: rows[index].name, - hintText: "Add Header Name", - onChanged: (value) { - rows[index] = - rows[index].copyWith(name: value); - _onFieldChange(selectedId!); - }, - colorScheme: Theme.of(context).colorScheme, - ), - ), - DataCell( - Text( - "=", - style: kCodeStyle, - ), - ), - DataCell( - CellField( - keyId: "$selectedId-$index-headers-v-$seed", - initialValue: rows[index].value, - hintText: " Add Header Value", - onChanged: (value) { - rows[index] = - rows[index].copyWith(value: value); - _onFieldChange(selectedId!); - }, - colorScheme: Theme.of(context).colorScheme, - ), - ), - DataCell( - InkWell( - child: Theme.of(context).brightness == - Brightness.dark - ? kIconRemoveDark - : kIconRemoveLight, - onTap: () { - seed = random.nextInt(kRandMax); - if (rows.length == 1) { - setState(() { - rows = [ - kNameValueEmptyModel, - ]; - isRowEnabledList = [true]; - }); - } else { - rows.removeAt(index); - isRowEnabledList.removeAt(index); - } - _onFieldChange(selectedId!); - }, - ), - ), - ], - ); - }, - ), + rows: dataRows, ), ), ), 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 4f122798..d0552e44 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 @@ -70,6 +70,83 @@ class EditRequestURLParamsState extends ConsumerState { fixedWidth: 32, ), ]; + + List dataRows = List.generate( + rows.length, + (index) { + return DataRow( + key: ValueKey("$selectedId-$index-params-row-$seed"), + cells: [ + DataCell( + CheckBox( + keyId: "$selectedId-$index-params-c-$seed", + value: isRowEnabledList[index], + onChanged: (value) { + setState(() { + isRowEnabledList[index] = value!; + }); + _onFieldChange(selectedId!); + }, + colorScheme: Theme.of(context).colorScheme, + ), + ), + DataCell( + CellField( + keyId: "$selectedId-$index-params-k-$seed", + initialValue: rows[index].name, + hintText: "Add URL Parameter", + onChanged: (value) { + rows[index] = rows[index].copyWith(name: value); + _onFieldChange(selectedId!); + }, + colorScheme: Theme.of(context).colorScheme, + ), + ), + DataCell( + Text( + "=", + style: kCodeStyle, + ), + ), + DataCell( + CellField( + keyId: "$selectedId-$index-params-v-$seed", + initialValue: rows[index].value, + hintText: "Add Value", + onChanged: (value) { + rows[index] = rows[index].copyWith(value: value); + _onFieldChange(selectedId!); + }, + colorScheme: Theme.of(context).colorScheme, + ), + ), + DataCell( + InkWell( + child: Theme.of(context).brightness == Brightness.dark + ? kIconRemoveDark + : kIconRemoveLight, + onTap: () { + seed = random.nextInt(kRandMax); + if (rows.length == 1) { + setState(() { + rows = [ + kNameValueEmptyModel, + ]; + isRowEnabledList = [true]; + }); + } else { + rows.removeAt(index); + isRowEnabledList.removeAt(index); + } + _onFieldChange(selectedId!); + }, + ), + ), + ], + ); + }, + ); + return Stack( children: [ Container( @@ -90,88 +167,11 @@ class EditRequestURLParamsState extends ConsumerState { dividerThickness: 0, horizontalMargin: 0, headingRowHeight: 0, - dataRowHeight: kDataRowHeight, + dataRowHeight: kDataTableRowHeight, bottomMargin: kDataTableBottomPadding, isVerticalScrollBarVisible: true, columns: columns, - rows: List.generate( - rows.length, - (index) { - return DataRow( - key: ValueKey("$selectedId-$index-params-row-$seed"), - cells: [ - DataCell( - CheckBox( - keyId: "$selectedId-$index-params-c-$seed", - value: isRowEnabledList[index], - onChanged: (value) { - setState(() { - isRowEnabledList[index] = value!; - }); - _onFieldChange(selectedId!); - }, - colorScheme: Theme.of(context).colorScheme, - ), - ), - DataCell( - CellField( - keyId: "$selectedId-$index-params-k-$seed", - initialValue: rows[index].name, - hintText: "Add URL Parameter", - onChanged: (value) { - rows[index] = - rows[index].copyWith(name: value); - _onFieldChange(selectedId!); - }, - colorScheme: Theme.of(context).colorScheme, - ), - ), - DataCell( - Text( - "=", - style: kCodeStyle, - ), - ), - DataCell( - CellField( - keyId: "$selectedId-$index-params-v-$seed", - initialValue: rows[index].value, - hintText: "Add Value", - onChanged: (value) { - rows[index] = - rows[index].copyWith(value: value); - _onFieldChange(selectedId!); - }, - colorScheme: Theme.of(context).colorScheme, - ), - ), - DataCell( - InkWell( - child: Theme.of(context).brightness == - Brightness.dark - ? kIconRemoveDark - : kIconRemoveLight, - onTap: () { - seed = random.nextInt(kRandMax); - if (rows.length == 1) { - setState(() { - rows = [ - kNameValueEmptyModel, - ]; - isRowEnabledList = [true]; - }); - } else { - rows.removeAt(index); - isRowEnabledList.removeAt(index); - } - _onFieldChange(selectedId!); - }, - ), - ), - ], - ); - }, - ), + rows: dataRows, ), ), ), diff --git a/lib/widgets/form_data_field.dart b/lib/widgets/form_data_field.dart deleted file mode 100644 index 7b7751fb..00000000 --- a/lib/widgets/form_data_field.dart +++ /dev/null @@ -1,83 +0,0 @@ -import 'package:apidash/consts.dart'; -import 'package:flutter/material.dart'; -import 'dropdowns.dart'; - -class FormDataField extends StatefulWidget { - const FormDataField({ - super.key, - required this.keyId, - this.initialValue, - this.hintText, - this.onChanged, - this.colorScheme, - this.formDataType, - this.onFormDataTypeChanged, - }); - - final String keyId; - final String? initialValue; - final String? hintText; - final void Function(String)? onChanged; - final ColorScheme? colorScheme; - final FormDataType? formDataType; - final void Function(FormDataType?)? onFormDataTypeChanged; - - @override - State createState() => _FormDataFieldState(); -} - -class _FormDataFieldState extends State { - @override - void initState() { - super.initState(); - } - - @override - Widget build(BuildContext context) { - var colorScheme = widget.colorScheme ?? Theme.of(context).colorScheme; - return Row( - children: [ - Expanded( - flex: 1, - child: TextFormField( - initialValue: widget.initialValue, - key: Key(widget.keyId), - style: kCodeStyle.copyWith( - color: colorScheme.onSurface, - ), - decoration: InputDecoration( - hintStyle: kCodeStyle.copyWith( - color: colorScheme.outline.withOpacity( - kHintOpacity, - ), - ), - hintText: widget.hintText, - contentPadding: const EdgeInsets.only(bottom: 12), - focusedBorder: UnderlineInputBorder( - borderSide: BorderSide( - color: colorScheme.primary.withOpacity( - kHintOpacity, - ), - ), - ), - enabledBorder: UnderlineInputBorder( - borderSide: BorderSide( - color: colorScheme.surfaceVariant, - ), - ), - suffixIcon: DropdownButtonFormData( - formDataType: widget.formDataType, - onChanged: (p0) { - if (widget.onFormDataTypeChanged != null) { - widget.onFormDataTypeChanged!(p0); - } - }, - ), - ), - onChanged: widget.onChanged, - ), - ), - ], - ); - } -} diff --git a/lib/widgets/widgets.dart b/lib/widgets/widgets.dart index bb54b3ff..0a4c8eaa 100644 --- a/lib/widgets/widgets.dart +++ b/lib/widgets/widgets.dart @@ -7,7 +7,6 @@ export 'dropdowns.dart'; export 'editor_json.dart'; export 'editor.dart'; export 'error_message.dart'; -export 'form_data_field.dart'; export 'headerfield.dart'; export 'intro_message.dart'; export 'json_previewer.dart'; diff --git a/test/widgets/form_data_field_test.dart b/test/widgets/form_data_field_test.dart deleted file mode 100644 index b5748370..00000000 --- a/test/widgets/form_data_field_test.dart +++ /dev/null @@ -1,21 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_test/flutter_test.dart'; -import 'package:apidash/widgets/form_data_field.dart'; - -void main() { - testWidgets('Testing for Form Data Widget', (tester) async { - await tester.pumpWidget( - const MaterialApp( - title: 'Form Data Field Widget', - home: Scaffold( - body: FormDataField( - keyId: "1", - initialValue: "Test Field", - ), - ), - ), - ); - - expect(find.text("Test Field"), findsOneWidget); - }); -} From dbc4aec6fd62826a0733e55025c6450cb89ad69c Mon Sep 17 00:00:00 2001 From: DenserMeerkat Date: Sat, 23 Mar 2024 21:52:06 +0530 Subject: [PATCH 6/8] fix: added missing setState --- .../editor_pane/details_card/request_pane/request_form_data.dart | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/screens/home_page/editor_pane/details_card/request_pane/request_form_data.dart b/lib/screens/home_page/editor_pane/details_card/request_pane/request_form_data.dart index 3f8d52d5..554f582a 100644 --- a/lib/screens/home_page/editor_pane/details_card/request_pane/request_form_data.dart +++ b/lib/screens/home_page/editor_pane/details_card/request_pane/request_form_data.dart @@ -114,6 +114,7 @@ class _FormDataBodyState extends ConsumerState { if (isLast && hasChanged) { formRows.add(kFormDataEmptyModel); } + setState(() {}); _onFieldChange(selectedId!); }, ), From 2ef3a82cc99a73d1169ebc5ddf29f947f842b442 Mon Sep 17 00:00:00 2001 From: DenserMeerkat Date: Sat, 23 Mar 2024 23:39:57 +0530 Subject: [PATCH 7/8] fix: resolve conflict errors --- lib/consts.dart | 2 +- .../request_pane/request_form_data.dart | 27 ++++++++++--------- .../request_pane/request_headers.dart | 27 ++++++++++--------- .../request_pane/request_params.dart | 27 ++++++++++--------- 4 files changed, 46 insertions(+), 37 deletions(-) diff --git a/lib/consts.dart b/lib/consts.dart index 8947da81..58a1b757 100644 --- a/lib/consts.dart +++ b/lib/consts.dart @@ -132,7 +132,7 @@ const kRandMax = 100000; const kDataTableScrollbarTheme = ScrollbarThemeData( crossAxisMargin: -4, ); -const kDataTableBottomPadding = 80.0; +const kDataTableBottomPadding = 12.0; const kDataTableRowHeight = 36.0; const kIconRemoveDark = Icon( diff --git a/lib/screens/home_page/editor_pane/details_card/request_pane/request_form_data.dart b/lib/screens/home_page/editor_pane/details_card/request_pane/request_form_data.dart index 554f582a..fb9c40dd 100644 --- a/lib/screens/home_page/editor_pane/details_card/request_pane/request_form_data.dart +++ b/lib/screens/home_page/editor_pane/details_card/request_pane/request_form_data.dart @@ -52,7 +52,7 @@ class _FormDataBodyState extends ConsumerState { List columns = const [ DataColumn2( - label: Text('Key'), + label: Text(kNameField), size: ColumnSize.M, ), DataColumn2( @@ -60,15 +60,15 @@ class _FormDataBodyState extends ConsumerState { fixedWidth: 20, ), DataColumn2( - label: Text('Type'), + label: Text(''), fixedWidth: 70, ), DataColumn2( - label: Text('Value'), + label: Text(kNameValue), size: ColumnSize.L, ), DataColumn2( - label: Text('Remove'), + label: Text(''), fixedWidth: 32, ), ]; @@ -84,7 +84,7 @@ class _FormDataBodyState extends ConsumerState { CellField( keyId: "$selectedId-$index-form-k-$seed", initialValue: formRows[index].name, - hintText: " Add Key", + hintText: kHintAddFieldName, onChanged: (value) { formRows[index] = formRows[index].copyWith(name: value); if (isLast && !isAddingRow) { @@ -97,9 +97,11 @@ class _FormDataBodyState extends ConsumerState { ), ), DataCell( - Text( - "=", - style: kCodeStyle, + Center( + child: Text( + "=", + style: kCodeStyle, + ), ), ), DataCell( @@ -148,7 +150,7 @@ class _FormDataBodyState extends ConsumerState { (formRows[index].type == FormDataType.file && formRows[index].value.isNotEmpty) ? formRows[index].value.toString() - : "Select File", + : kLabelSelectFile, overflow: TextOverflow.ellipsis, style: kFormDataButtonLabelTextStyle, ), @@ -156,7 +158,7 @@ class _FormDataBodyState extends ConsumerState { : CellField( keyId: "$selectedId-$index-form-v-$seed", initialValue: formRows[index].value, - hintText: " Add Value", + hintText: kHintAddValue, onChanged: (value) { formRows[index] = formRows[index].copyWith(value: value); @@ -223,13 +225,14 @@ class _FormDataBodyState extends ConsumerState { ), ), ), + kVSpacer20, ], ), ), Align( alignment: Alignment.bottomCenter, child: Padding( - padding: const EdgeInsets.only(bottom: 30), + padding: const EdgeInsets.only(bottom: 5), child: ElevatedButton.icon( onPressed: () { formRows.add(kFormDataEmptyModel); @@ -237,7 +240,7 @@ class _FormDataBodyState extends ConsumerState { }, icon: const Icon(Icons.add), label: const Text( - "Add Form Data", + kLabelAddFormField, style: kTextStyleButton, ), ), 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 686e9535..ab8efec3 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 @@ -56,21 +56,21 @@ class EditRequestHeadersState extends ConsumerState { List columns = const [ DataColumn2( - label: Text('Checkbox'), + label: Text(kNameCheckbox), fixedWidth: 30, ), DataColumn2( - label: Text('Header Name'), + label: Text(kNameHeader), ), DataColumn2( label: Text('='), - fixedWidth: 22, + fixedWidth: 30, ), DataColumn2( - label: Text('Header Value'), + label: Text(kNameValue), ), DataColumn2( - label: Text('Remove'), + label: Text(''), fixedWidth: 32, ), ]; @@ -101,7 +101,7 @@ class EditRequestHeadersState extends ConsumerState { HeaderField( keyId: "$selectedId-$index-headers-k-$seed", initialValue: headerRows[index].name, - hintText: "Add Header Name", + hintText: kHintAddName, onChanged: (value) { headerRows[index] = headerRows[index].copyWith(name: value); if (isLast && !isAddingRow) { @@ -116,16 +116,18 @@ class EditRequestHeadersState extends ConsumerState { ), ), DataCell( - Text( - "=", - style: kCodeStyle, + Center( + child: Text( + "=", + style: kCodeStyle, + ), ), ), DataCell( CellField( keyId: "$selectedId-$index-headers-v-$seed", initialValue: headerRows[index].value, - hintText: " Add Header Value", + hintText: kHintAddValue, onChanged: (value) { headerRows[index] = headerRows[index].copyWith(value: value); if (isLast && !isAddingRow) { @@ -195,13 +197,14 @@ class EditRequestHeadersState extends ConsumerState { ), ), ), + kVSpacer40, ], ), ), Align( alignment: Alignment.bottomCenter, child: Padding( - padding: const EdgeInsets.only(bottom: 30), + padding: kPb15, child: ElevatedButton.icon( onPressed: () { headerRows.add(kNameValueEmptyModel); @@ -210,7 +213,7 @@ class EditRequestHeadersState extends ConsumerState { }, icon: const Icon(Icons.add), label: const Text( - "Add Header", + kLabelAddHeader, style: kTextStyleButton, ), ), 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 4836937d..4b048c0a 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 @@ -56,21 +56,21 @@ class EditRequestURLParamsState extends ConsumerState { List columns = const [ DataColumn2( - label: Text('Checkbox'), + label: Text(kNameCheckbox), fixedWidth: 30, ), DataColumn2( - label: Text('URL Parameter'), + label: Text(kNameURLParam), ), DataColumn2( label: Text('='), - fixedWidth: 22, + fixedWidth: 30, ), DataColumn2( - label: Text('Parameter Value'), + label: Text(kNameValue), ), DataColumn2( - label: Text('Remove'), + label: Text(''), fixedWidth: 32, ), ]; @@ -101,7 +101,7 @@ class EditRequestURLParamsState extends ConsumerState { CellField( keyId: "$selectedId-$index-params-k-$seed", initialValue: paramRows[index].name, - hintText: "Add URL Parameter", + hintText: kHintAddURLParam, onChanged: (value) { paramRows[index] = paramRows[index].copyWith(name: value); if (isLast && !isAddingRow) { @@ -116,16 +116,18 @@ class EditRequestURLParamsState extends ConsumerState { ), ), DataCell( - Text( - "=", - style: kCodeStyle, + Center( + child: Text( + "=", + style: kCodeStyle, + ), ), ), DataCell( CellField( keyId: "$selectedId-$index-params-v-$seed", initialValue: paramRows[index].value, - hintText: "Add Value", + hintText: kHintAddValue, onChanged: (value) { paramRows[index] = paramRows[index].copyWith(value: value); if (isLast && !isAddingRow) { @@ -196,13 +198,14 @@ class EditRequestURLParamsState extends ConsumerState { ), ), ), + kVSpacer40, ], ), ), Align( alignment: Alignment.bottomCenter, child: Padding( - padding: const EdgeInsets.only(bottom: 30), + padding: kPb15, child: ElevatedButton.icon( onPressed: () { paramRows.add(kNameValueEmptyModel); @@ -211,7 +214,7 @@ class EditRequestURLParamsState extends ConsumerState { }, icon: const Icon(Icons.add), label: const Text( - "Add Param", + kLabelAddParam, style: kTextStyleButton, ), ), From fa0b02d67195bf818391972330a4490cc8317f0f Mon Sep 17 00:00:00 2001 From: DenserMeerkat Date: Sun, 24 Mar 2024 00:02:29 +0530 Subject: [PATCH 8/8] fix: request form data padding --- .../details_card/request_pane/request_form_data.dart | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/screens/home_page/editor_pane/details_card/request_pane/request_form_data.dart b/lib/screens/home_page/editor_pane/details_card/request_pane/request_form_data.dart index fb9c40dd..a0388612 100644 --- a/lib/screens/home_page/editor_pane/details_card/request_pane/request_form_data.dart +++ b/lib/screens/home_page/editor_pane/details_card/request_pane/request_form_data.dart @@ -225,14 +225,14 @@ class _FormDataBodyState extends ConsumerState { ), ), ), - kVSpacer20, + kVSpacer40, ], ), ), Align( alignment: Alignment.bottomCenter, child: Padding( - padding: const EdgeInsets.only(bottom: 5), + padding: kPb15, child: ElevatedButton.icon( onPressed: () { formRows.add(kFormDataEmptyModel);