Default code generator settings

This commit is contained in:
Ashita Prasad
2023-10-30 18:26:57 +05:30
parent 68fbd7fa5f
commit 82f28d675f
4 changed files with 43 additions and 5 deletions

View File

@ -9,6 +9,7 @@ class SettingsModel {
this.size,
this.offset,
this.defaultUriScheme = kDefaultUriScheme,
this.defaultCodeGenLang = CodegenLanguage.curl,
this.saveResponses = true});
final bool isDark;
@ -16,6 +17,7 @@ class SettingsModel {
final Size? size;
final Offset? offset;
final String defaultUriScheme;
final CodegenLanguage defaultCodeGenLang;
final bool saveResponses;
SettingsModel copyWith({
@ -24,6 +26,7 @@ class SettingsModel {
Size? size,
Offset? offset,
String? defaultUriScheme,
CodegenLanguage? defaultCodeGenLang,
bool? saveResponses,
}) {
return SettingsModel(
@ -32,6 +35,7 @@ class SettingsModel {
this.alwaysShowCollectionPaneScrollbar,
size: size ?? this.size,
defaultUriScheme: defaultUriScheme ?? this.defaultUriScheme,
defaultCodeGenLang: defaultCodeGenLang ?? this.defaultCodeGenLang,
offset: offset ?? this.offset,
saveResponses: saveResponses ?? this.saveResponses,
);
@ -54,6 +58,16 @@ class SettingsModel {
offset = Offset(dx, dy);
}
final defaultUriScheme = data["defaultUriScheme"] as String?;
final defaultCodeGenLangStr = data["defaultCodeGenLang"] as String?;
CodegenLanguage? defaultCodeGenLang;
if (defaultCodeGenLangStr != null) {
try {
defaultCodeGenLang =
CodegenLanguage.values.byName(defaultCodeGenLangStr);
} catch (e) {
// pass
}
}
final saveResponses = data["saveResponses"] as bool?;
const sm = SettingsModel();
@ -64,6 +78,7 @@ class SettingsModel {
size: size,
offset: offset,
defaultUriScheme: defaultUriScheme,
defaultCodeGenLang: defaultCodeGenLang,
saveResponses: saveResponses,
);
}
@ -77,6 +92,7 @@ class SettingsModel {
"dx": offset?.dx,
"dy": offset?.dy,
"defaultUriScheme": defaultUriScheme,
"defaultCodeGenLang": defaultCodeGenLang.name,
"saveResponses": saveResponses,
};
}

View File

@ -1,7 +1,11 @@
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:apidash/models/models.dart' show SettingsModel;
import 'package:apidash/services/services.dart' show hiveHandler, HiveHandler;
import '../models/models.dart' show SettingsModel;
import '../services/services.dart' show hiveHandler, HiveHandler;
import '../consts.dart';
final codegenLanguageStateProvider = StateProvider<CodegenLanguage>((ref) =>
ref.watch(settingsProvider.select((value) => value.defaultCodeGenLang)));
final StateNotifierProvider<ThemeStateNotifier, SettingsModel>
settingsProvider =
@ -19,6 +23,7 @@ class ThemeStateNotifier extends StateNotifier<SettingsModel> {
Size? size,
Offset? offset,
String? defaultUriScheme,
CodegenLanguage? defaultCodeGenLang,
bool? saveResponses,
}) async {
state = state.copyWith(
@ -27,6 +32,7 @@ class ThemeStateNotifier extends StateNotifier<SettingsModel> {
size: size,
offset: offset,
defaultUriScheme: defaultUriScheme,
defaultCodeGenLang: defaultCodeGenLang,
saveResponses: saveResponses,
);
await hiveHandler.saveSettings(state.toJson());

View File

@ -1,4 +1,3 @@
import 'package:apidash/consts.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
final navRailIndexStateProvider = StateProvider<int>((ref) => 0);
@ -8,5 +7,3 @@ 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.curl);

View File

@ -75,6 +75,25 @@ class _SettingsPageState extends ConsumerState<SettingsPage> {
);
}).toList()),
),
ListTile(
contentPadding: EdgeInsets.zero,
hoverColor: kColorTransparent,
title: const Text('Default Code Generator'),
trailing: DropdownMenu(
onSelected: (value) {
ref
.read(settingsProvider.notifier)
.update(defaultCodeGenLang: value);
},
initialSelection: settings.defaultCodeGenLang,
dropdownMenuEntries: CodegenLanguage.values
.map<DropdownMenuEntry<CodegenLanguage>>((value) {
return DropdownMenuEntry<CodegenLanguage>(
value: value,
label: value.label,
);
}).toList()),
),
CheckboxListTile(
contentPadding: EdgeInsets.zero,
title: const Text("Save Responses"),