diff --git a/lib/components/editor_pane/body_editor.dart b/lib/components/editor_pane/request_body.dart similarity index 100% rename from lib/components/editor_pane/body_editor.dart rename to lib/components/editor_pane/request_body.dart diff --git a/lib/components/editor_pane/request_headers.dart b/lib/components/editor_pane/request_headers.dart new file mode 100644 index 00000000..be28c380 --- /dev/null +++ b/lib/components/editor_pane/request_headers.dart @@ -0,0 +1,124 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:davi/davi.dart'; +import '../../models/models.dart'; +import '../../providers/providers.dart'; +import '../styles.dart'; + +class EditRequestHeaders extends ConsumerStatefulWidget { + const EditRequestHeaders({Key? key}) : super(key: key); + + @override + ConsumerState createState() => EditRequestHeadersState(); +} + +class EditRequestHeadersState extends ConsumerState { + late List rows; + + @override + void initState() { + super.initState(); + } + + Widget _buildHeaderField(BuildContext context, DaviRow row) { + String? activeId = ref.read(activeItemIdStateProvider); + int idx = row.index; + return TextFormField( + key: Key("$activeId-$idx-headers-k"), + initialValue: rows[idx].k, + style: codeStyle, + decoration: InputDecoration( + hintStyle: codeStyle, + hintText: "Add Header Name", + ), + onChanged: (value) { + rows[idx] = rows[idx].copyWith(k: value); + _onFieldChange(activeId!); + }); + } + + Widget _buildValueField(BuildContext context, DaviRow row) { + String? activeId = ref.read(activeItemIdStateProvider); + int idx = row.index; + return TextFormField( + key: Key("$activeId-$idx-headers-v"), + initialValue: rows[idx].v, + style: codeStyle, + decoration: InputDecoration( + hintStyle: codeStyle, + hintText: "Add Header Value", + ), + onChanged: (value) { + rows[idx] = rows[idx].copyWith(v: value); + _onFieldChange(activeId!); + }); + } + + void _onFieldChange(String activeId) { + ref + .read(collectionStateNotifierProvider.notifier) + .update(activeId, requestHeaders: rows); + } + + @override + Widget build(BuildContext context) { + final activeId = ref.watch(activeItemIdStateProvider); + rows = ref + .read(collectionStateNotifierProvider.notifier) + .getRequestModel(activeId!) + .requestHeaders ?? + []; + DaviModel model = DaviModel( + rows: rows, + columns: [ + DaviColumn( + name: 'Header Name', + grow: 1, + cellBuilder: _buildHeaderField, + sortable: false, + ), + DaviColumn( + name: 'Header Value', + grow: 1, + cellBuilder: _buildValueField, + sortable: false, + ), + ], + ); + return Stack( + children: [ + Container( + decoration: tableContainerDecoration, + margin: p5, + child: Column( + children: [ + Expanded( + child: DaviTheme( + data: tableThemeData, + child: Davi(model), + ), + ), + ], + ), + ), + Align( + alignment: Alignment.bottomCenter, + child: Padding( + padding: const EdgeInsets.only(bottom: 30), + child: ElevatedButton.icon( + onPressed: () { + rows.add(const KVRow("", "")); + model.addRow(const KVRow("", "")); + }, + icon: const Icon(Icons.add), + label: const Text( + "Add Header", + style: textStyleButton, + ), + ), + ), + ), + ], + ); + } +} diff --git a/lib/components/editor_pane/request_pane.dart b/lib/components/editor_pane/request_pane.dart index 6088ce99..f50040a3 100644 --- a/lib/components/editor_pane/request_pane.dart +++ b/lib/components/editor_pane/request_pane.dart @@ -2,8 +2,9 @@ import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../../providers/providers.dart'; import '../styles.dart'; -import 'tables.dart'; -import 'body_editor.dart'; +import 'request_headers.dart'; +import 'request_params.dart'; +import 'request_body.dart'; class EditRequestPane extends ConsumerStatefulWidget { const EditRequestPane({super.key}); diff --git a/lib/components/editor_pane/tables.dart b/lib/components/editor_pane/request_params.dart similarity index 54% rename from lib/components/editor_pane/tables.dart rename to lib/components/editor_pane/request_params.dart index 34818de1..ebd09cfe 100644 --- a/lib/components/editor_pane/tables.dart +++ b/lib/components/editor_pane/request_params.dart @@ -133,121 +133,3 @@ class EditRequestURLParamsState extends ConsumerState { ); } } - -class EditRequestHeaders extends ConsumerStatefulWidget { - const EditRequestHeaders({Key? key}) : super(key: key); - - @override - ConsumerState createState() => EditRequestHeadersState(); -} - -class EditRequestHeadersState extends ConsumerState { - late List rows; - - @override - void initState() { - super.initState(); - } - - Widget _buildHeaderField(BuildContext context, DaviRow row) { - String? activeId = ref.read(activeItemIdStateProvider); - int idx = row.index; - return TextFormField( - key: Key("$activeId-$idx-headers-k"), - initialValue: rows[idx].k, - style: codeStyle, - decoration: InputDecoration( - hintStyle: codeStyle, - hintText: "Add Header Name", - ), - onChanged: (value) { - rows[idx] = rows[idx].copyWith(k: value); - _onFieldChange(activeId!); - }); - } - - Widget _buildValueField(BuildContext context, DaviRow row) { - String? activeId = ref.read(activeItemIdStateProvider); - int idx = row.index; - return TextFormField( - key: Key("$activeId-$idx-headers-v"), - initialValue: rows[idx].v, - style: codeStyle, - decoration: InputDecoration( - hintStyle: codeStyle, - hintText: "Add Header Value", - ), - onChanged: (value) { - rows[idx] = rows[idx].copyWith(v: value); - _onFieldChange(activeId!); - }); - } - - void _onFieldChange(String activeId) { - ref - .read(collectionStateNotifierProvider.notifier) - .update(activeId, requestHeaders: rows); - } - - @override - Widget build(BuildContext context) { - final activeId = ref.watch(activeItemIdStateProvider); - rows = ref - .read(collectionStateNotifierProvider.notifier) - .getRequestModel(activeId!) - .requestHeaders ?? - []; - DaviModel model = DaviModel( - rows: rows, - columns: [ - DaviColumn( - name: 'Header Name', - grow: 1, - cellBuilder: _buildHeaderField, - sortable: false, - ), - DaviColumn( - name: 'Header Value', - grow: 1, - cellBuilder: _buildValueField, - sortable: false, - ), - ], - ); - return Stack( - children: [ - Container( - decoration: tableContainerDecoration, - margin: p5, - child: Column( - children: [ - Expanded( - child: DaviTheme( - data: tableThemeData, - child: Davi(model), - ), - ), - ], - ), - ), - Align( - alignment: Alignment.bottomCenter, - child: Padding( - padding: const EdgeInsets.only(bottom: 30), - child: ElevatedButton.icon( - onPressed: () { - rows.add(const KVRow("", "")); - model.addRow(const KVRow("", "")); - }, - icon: const Icon(Icons.add), - label: const Text( - "Add Header", - style: textStyleButton, - ), - ), - ), - ), - ], - ); - } -}