Language Dropdown added.

This commit is contained in:
mmjsmohit
2023-05-28 18:45:05 +05:30
parent 3b403495da
commit 8e9c2046ab
4 changed files with 89 additions and 0 deletions

View File

@ -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();

View File

@ -1,3 +1,4 @@
import 'package:apidash/consts.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
final navRailIndexStateProvider = StateProvider<int?>((ref) => 0);
@ -7,3 +8,4 @@ final sentRequestIdStateProvider = StateProvider<String?>((ref) => null);
final codePaneVisibleStateProvider = StateProvider<bool>((ref) => false);
final saveDataStateProvider = StateProvider<bool>((ref) => false);
final clearDataStateProvider = StateProvider<bool>((ref) => false);
final codegenLanguageStateProvider = StateProvider<CodegenLanguage>((ref) => CodegenLanguage.dartHttp);

View File

@ -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<ViewCodePane> {
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<ViewCodePane> {
);
}
}
class DropdownButtonCodeCodegenLanguage extends ConsumerStatefulWidget {
const DropdownButtonCodeCodegenLanguage({
super.key,
});
@override
ConsumerState createState() => _DropdownButtonCodeCodegenLanguageState();
}
class _DropdownButtonCodeCodegenLanguageState
extends ConsumerState<DropdownButtonCodeCodegenLanguage> {
@override
Widget build(BuildContext context) {
final requestCodeLanguage = ref.watch(codegenLanguageStateProvider);
return DropdownButtonCodegenLanguage(
codegenLanguage: requestCodeLanguage,
onChanged: (CodegenLanguage? value) {
ref.read(codegenLanguageStateProvider.notifier).state = value!;
},
);
}
}

View File

@ -109,3 +109,55 @@ class _DropdownButtonContentTypeState extends State<DropdownButtonContentType> {
);
}
}
class DropdownButtonCodegenLanguage extends StatefulWidget {
const DropdownButtonCodegenLanguage({
Key? key,
this.codegenLanguage,
this.onChanged,
}) : super(key: key);
@override
State<DropdownButtonCodegenLanguage> createState() =>
_DropdownButtonCodegenLanguageState();
final CodegenLanguage? codegenLanguage;
final void Function(CodegenLanguage?)? onChanged;
}
class _DropdownButtonCodegenLanguageState
extends State<DropdownButtonCodegenLanguage> {
@override
Widget build(BuildContext context) {
final surfaceColor = Theme.of(context).colorScheme.surface;
return DropdownButton<CodegenLanguage>(
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<DropdownMenuItem<CodegenLanguage>>((CodegenLanguage value) {
return DropdownMenuItem<CodegenLanguage>(
value: value,
child: Padding(
padding: kPs8,
child: Text(
value.label,
style: kTextStyleButton,
),
),
);
}).toList(),
);
}
}