From 158f8f67bff92d3b331ae1764e74aac3fae2fd31 Mon Sep 17 00:00:00 2001
From: Ankit Mahato <ankmahato@gmail.com>
Date: Thu, 16 Mar 2023 21:12:41 +0530
Subject: [PATCH] Adding a code pane

---
 lib/providers/providers.dart                   |  1 +
 .../details_card/code_pane/code_pane.dart      | 15 +++++++++++++++
 .../editor_pane/details_card/details_card.dart | 16 ++++++++++------
 .../request_pane/request_pane.dart             | 18 ++++++++++++++----
 4 files changed, 40 insertions(+), 10 deletions(-)
 create mode 100644 lib/screens/home_page/editor_pane/details_card/code_pane/code_pane.dart

diff --git a/lib/providers/providers.dart b/lib/providers/providers.dart
index 4163f7b9..579a8aa4 100644
--- a/lib/providers/providers.dart
+++ b/lib/providers/providers.dart
@@ -8,6 +8,7 @@ const _uuid = Uuid();
 
 final activeIdStateProvider = StateProvider<String?>((ref) => null);
 final sentRequestIdStateProvider = StateProvider<String?>((ref) => null);
+final codePaneVisibleStateProvider = StateProvider<bool>((ref) => false);
 
 final StateNotifierProvider<CollectionStateNotifier, List<RequestModel>>
     collectionStateNotifierProvider =
diff --git a/lib/screens/home_page/editor_pane/details_card/code_pane/code_pane.dart b/lib/screens/home_page/editor_pane/details_card/code_pane/code_pane.dart
new file mode 100644
index 00000000..d0ea6a6f
--- /dev/null
+++ b/lib/screens/home_page/editor_pane/details_card/code_pane/code_pane.dart
@@ -0,0 +1,15 @@
+import 'package:flutter/material.dart';
+
+class CodePane extends StatefulWidget {
+  const CodePane({super.key});
+
+  @override
+  State<CodePane> createState() => _CodePaneState();
+}
+
+class _CodePaneState extends State<CodePane> {
+  @override
+  Widget build(BuildContext context) {
+    return Container();
+  }
+}
diff --git a/lib/screens/home_page/editor_pane/details_card/details_card.dart b/lib/screens/home_page/editor_pane/details_card/details_card.dart
index a44e5e6a..047d41e1 100644
--- a/lib/screens/home_page/editor_pane/details_card/details_card.dart
+++ b/lib/screens/home_page/editor_pane/details_card/details_card.dart
@@ -1,19 +1,22 @@
 import 'package:flutter/material.dart';
 import 'package:multi_split_view/multi_split_view.dart';
+import 'package:flutter_riverpod/flutter_riverpod.dart';
+import 'package:apidash/providers/providers.dart';
 import 'package:apidash/consts.dart';
 import 'request_pane/request_pane.dart';
 import 'response_pane/response_pane.dart';
+import 'code_pane/code_pane.dart';
 
-class EditorPaneRequestDetailsCard extends StatefulWidget {
+class EditorPaneRequestDetailsCard extends ConsumerStatefulWidget {
   const EditorPaneRequestDetailsCard({super.key});
 
   @override
-  State<EditorPaneRequestDetailsCard> createState() =>
+  ConsumerState<EditorPaneRequestDetailsCard> createState() =>
       _EditorPaneRequestDetailsCardState();
 }
 
 class _EditorPaneRequestDetailsCardState
-    extends State<EditorPaneRequestDetailsCard> {
+    extends ConsumerState<EditorPaneRequestDetailsCard> {
   final MultiSplitViewController _controller = MultiSplitViewController(
     areas: [
       Area(minimalSize: 300),
@@ -23,6 +26,7 @@ class _EditorPaneRequestDetailsCardState
 
   @override
   Widget build(BuildContext context) {
+    final codePaneVisible = ref.watch(codePaneVisibleStateProvider);
     return Card(
       shape: RoundedRectangleBorder(
         side: BorderSide(
@@ -44,9 +48,9 @@ class _EditorPaneRequestDetailsCardState
         ),
         child: MultiSplitView(
           controller: _controller,
-          children: const [
-            EditRequestPane(),
-            ResponsePane(),
+          children: [
+            const EditRequestPane(),
+            codePaneVisible ? const CodePane() : const ResponsePane(),
           ],
         ),
       ),
diff --git a/lib/screens/home_page/editor_pane/details_card/request_pane/request_pane.dart b/lib/screens/home_page/editor_pane/details_card/request_pane/request_pane.dart
index 2e681862..7785d5ae 100644
--- a/lib/screens/home_page/editor_pane/details_card/request_pane/request_pane.dart
+++ b/lib/screens/home_page/editor_pane/details_card/request_pane/request_pane.dart
@@ -30,6 +30,7 @@ class _EditRequestPaneState extends ConsumerState<EditRequestPane>
   @override
   Widget build(BuildContext context) {
     final activeId = ref.watch(activeIdStateProvider);
+    final codePaneVisible = ref.watch(codePaneVisibleStateProvider);
     _controller.index = ref
         .read(collectionStateNotifierProvider.notifier)
         .getRequestModel(activeId!)
@@ -48,11 +49,20 @@ class _EditRequestPaneState extends ConsumerState<EditRequestPane>
                   style: Theme.of(context).textTheme.titleMedium,
                 ),
                 FilledButton.tonalIcon(
-                  onPressed: () {},
-                  icon: const Icon(
-                    Icons.code_rounded,
+                  onPressed: () {
+                    ref
+                        .read(codePaneVisibleStateProvider.notifier)
+                        .update((state) => !codePaneVisible);
+                  },
+                  icon: Icon(
+                    codePaneVisible
+                        ? Icons.code_off_rounded
+                        : Icons.code_rounded,
+                  ),
+                  label: SizedBox(
+                    width: 75,
+                    child: Text(codePaneVisible ? "Hide Code" : "Show Code"),
                   ),
-                  label: const Text("Generate Code"),
                 ),
               ],
             ),