From 8e9c2046abda9af107647a7b65ad68a83aeb0db3 Mon Sep 17 00:00:00 2001 From: mmjsmohit Date: Sun, 28 May 2023 18:45:05 +0530 Subject: [PATCH] Language Dropdown added. --- lib/consts.dart | 8 +++++ lib/providers/ui_providers.dart | 2 ++ lib/widgets/codegen_previewer.dart | 27 ++++++++++++++++ lib/widgets/dropdowns.dart | 52 ++++++++++++++++++++++++++++++ 4 files changed, 89 insertions(+) diff --git a/lib/consts.dart b/lib/consts.dart index c3c0a12c..ecdc8515 100644 --- a/lib/consts.dart +++ b/lib/consts.dart @@ -228,6 +228,14 @@ const kMethodsWithBody = [ const kDefaultHttpMethod = HTTPVerb.get; const kDefaultContentType = ContentType.json; +enum CodegenLanguage { + dartHttp("Dart - http"), + kotlinOkHttp("Kotlin - OkHttp"); + + const CodegenLanguage(this.label); + final String label; +} + const JsonEncoder kEncoder = JsonEncoder.withIndent(' '); const LineSplitter kSplitter = LineSplitter(); diff --git a/lib/providers/ui_providers.dart b/lib/providers/ui_providers.dart index da817bb9..a9732df8 100644 --- a/lib/providers/ui_providers.dart +++ b/lib/providers/ui_providers.dart @@ -1,3 +1,4 @@ +import 'package:apidash/consts.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; final navRailIndexStateProvider = StateProvider((ref) => 0); @@ -7,3 +8,4 @@ final sentRequestIdStateProvider = StateProvider((ref) => null); final codePaneVisibleStateProvider = StateProvider((ref) => false); final saveDataStateProvider = StateProvider((ref) => false); final clearDataStateProvider = StateProvider((ref) => false); +final codegenLanguageStateProvider = StateProvider((ref) => CodegenLanguage.dartHttp); \ No newline at end of file diff --git a/lib/widgets/codegen_previewer.dart b/lib/widgets/codegen_previewer.dart index 8edd624c..ef392586 100644 --- a/lib/widgets/codegen_previewer.dart +++ b/lib/widgets/codegen_previewer.dart @@ -1,7 +1,10 @@ +import 'package:apidash/widgets/dropdowns.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:highlighter/highlighter.dart' show highlight; import 'package:apidash/consts.dart'; import 'package:apidash/utils/utils.dart'; +import '../providers/ui_providers.dart'; import 'code_previewer.dart' show convert; import 'buttons.dart'; @@ -144,6 +147,7 @@ class _ViewCodePaneState extends State { style: Theme.of(context).textTheme.titleMedium, ), ), + const DropdownButtonCodeCodegenLanguage(), CopyButton(toCopy: widget.code), SaveInDownloadsButton( content: stringToBytes(widget.code), @@ -171,3 +175,26 @@ class _ViewCodePaneState extends State { ); } } + +class DropdownButtonCodeCodegenLanguage extends ConsumerStatefulWidget { + const DropdownButtonCodeCodegenLanguage({ + super.key, + }); + + @override + ConsumerState createState() => _DropdownButtonCodeCodegenLanguageState(); +} + +class _DropdownButtonCodeCodegenLanguageState + extends ConsumerState { + @override + Widget build(BuildContext context) { + final requestCodeLanguage = ref.watch(codegenLanguageStateProvider); + return DropdownButtonCodegenLanguage( + codegenLanguage: requestCodeLanguage, + onChanged: (CodegenLanguage? value) { + ref.read(codegenLanguageStateProvider.notifier).state = value!; + }, + ); + } +} \ No newline at end of file diff --git a/lib/widgets/dropdowns.dart b/lib/widgets/dropdowns.dart index 92c7dcfb..20e4a078 100644 --- a/lib/widgets/dropdowns.dart +++ b/lib/widgets/dropdowns.dart @@ -109,3 +109,55 @@ class _DropdownButtonContentTypeState extends State { ); } } + +class DropdownButtonCodegenLanguage extends StatefulWidget { + const DropdownButtonCodegenLanguage({ + Key? key, + this.codegenLanguage, + this.onChanged, + }) : super(key: key); + + @override + State createState() => + _DropdownButtonCodegenLanguageState(); + final CodegenLanguage? codegenLanguage; + final void Function(CodegenLanguage?)? onChanged; +} + +class _DropdownButtonCodegenLanguageState + extends State { + @override + Widget build(BuildContext context) { + final surfaceColor = Theme.of(context).colorScheme.surface; + return DropdownButton( + focusColor: surfaceColor, + value: widget.codegenLanguage, + icon: const Icon( + Icons.unfold_more_rounded, + size: 16, + ), + elevation: 4, + style: kCodeStyle.copyWith( + color: Theme.of(context).colorScheme.primary, + ), + underline: Container( + height: 0, + ), + onChanged: widget.onChanged, + borderRadius: kBorderRadius12, + items: CodegenLanguage.values + .map>((CodegenLanguage value) { + return DropdownMenuItem( + value: value, + child: Padding( + padding: kPs8, + child: Text( + value.label, + style: kTextStyleButton, + ), + ), + ); + }).toList(), + ); + } +} \ No newline at end of file