mirror of
https://github.com/foss42/apidash.git
synced 2025-05-31 06:08:09 +08:00
Language Dropdown added.
This commit is contained in:
@ -228,6 +228,14 @@ const kMethodsWithBody = [
|
|||||||
const kDefaultHttpMethod = HTTPVerb.get;
|
const kDefaultHttpMethod = HTTPVerb.get;
|
||||||
const kDefaultContentType = ContentType.json;
|
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 JsonEncoder kEncoder = JsonEncoder.withIndent(' ');
|
||||||
const LineSplitter kSplitter = LineSplitter();
|
const LineSplitter kSplitter = LineSplitter();
|
||||||
|
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
import 'package:apidash/consts.dart';
|
||||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||||
|
|
||||||
final navRailIndexStateProvider = StateProvider<int?>((ref) => 0);
|
final navRailIndexStateProvider = StateProvider<int?>((ref) => 0);
|
||||||
@ -7,3 +8,4 @@ final sentRequestIdStateProvider = StateProvider<String?>((ref) => null);
|
|||||||
final codePaneVisibleStateProvider = StateProvider<bool>((ref) => false);
|
final codePaneVisibleStateProvider = StateProvider<bool>((ref) => false);
|
||||||
final saveDataStateProvider = StateProvider<bool>((ref) => false);
|
final saveDataStateProvider = StateProvider<bool>((ref) => false);
|
||||||
final clearDataStateProvider = StateProvider<bool>((ref) => false);
|
final clearDataStateProvider = StateProvider<bool>((ref) => false);
|
||||||
|
final codegenLanguageStateProvider = StateProvider<CodegenLanguage>((ref) => CodegenLanguage.dartHttp);
|
@ -1,7 +1,10 @@
|
|||||||
|
import 'package:apidash/widgets/dropdowns.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||||
import 'package:highlighter/highlighter.dart' show highlight;
|
import 'package:highlighter/highlighter.dart' show highlight;
|
||||||
import 'package:apidash/consts.dart';
|
import 'package:apidash/consts.dart';
|
||||||
import 'package:apidash/utils/utils.dart';
|
import 'package:apidash/utils/utils.dart';
|
||||||
|
import '../providers/ui_providers.dart';
|
||||||
import 'code_previewer.dart' show convert;
|
import 'code_previewer.dart' show convert;
|
||||||
import 'buttons.dart';
|
import 'buttons.dart';
|
||||||
|
|
||||||
@ -144,6 +147,7 @@ class _ViewCodePaneState extends State<ViewCodePane> {
|
|||||||
style: Theme.of(context).textTheme.titleMedium,
|
style: Theme.of(context).textTheme.titleMedium,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
const DropdownButtonCodeCodegenLanguage(),
|
||||||
CopyButton(toCopy: widget.code),
|
CopyButton(toCopy: widget.code),
|
||||||
SaveInDownloadsButton(
|
SaveInDownloadsButton(
|
||||||
content: stringToBytes(widget.code),
|
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!;
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
@ -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(),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user