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.size,
this.offset, this.offset,
this.defaultUriScheme = kDefaultUriScheme, this.defaultUriScheme = kDefaultUriScheme,
this.defaultCodeGenLang = CodegenLanguage.curl,
this.saveResponses = true}); this.saveResponses = true});
final bool isDark; final bool isDark;
@ -16,6 +17,7 @@ class SettingsModel {
final Size? size; final Size? size;
final Offset? offset; final Offset? offset;
final String defaultUriScheme; final String defaultUriScheme;
final CodegenLanguage defaultCodeGenLang;
final bool saveResponses; final bool saveResponses;
SettingsModel copyWith({ SettingsModel copyWith({
@ -24,6 +26,7 @@ class SettingsModel {
Size? size, Size? size,
Offset? offset, Offset? offset,
String? defaultUriScheme, String? defaultUriScheme,
CodegenLanguage? defaultCodeGenLang,
bool? saveResponses, bool? saveResponses,
}) { }) {
return SettingsModel( return SettingsModel(
@ -32,6 +35,7 @@ class SettingsModel {
this.alwaysShowCollectionPaneScrollbar, this.alwaysShowCollectionPaneScrollbar,
size: size ?? this.size, size: size ?? this.size,
defaultUriScheme: defaultUriScheme ?? this.defaultUriScheme, defaultUriScheme: defaultUriScheme ?? this.defaultUriScheme,
defaultCodeGenLang: defaultCodeGenLang ?? this.defaultCodeGenLang,
offset: offset ?? this.offset, offset: offset ?? this.offset,
saveResponses: saveResponses ?? this.saveResponses, saveResponses: saveResponses ?? this.saveResponses,
); );
@ -54,6 +58,16 @@ class SettingsModel {
offset = Offset(dx, dy); offset = Offset(dx, dy);
} }
final defaultUriScheme = data["defaultUriScheme"] as String?; 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?; final saveResponses = data["saveResponses"] as bool?;
const sm = SettingsModel(); const sm = SettingsModel();
@ -64,6 +78,7 @@ class SettingsModel {
size: size, size: size,
offset: offset, offset: offset,
defaultUriScheme: defaultUriScheme, defaultUriScheme: defaultUriScheme,
defaultCodeGenLang: defaultCodeGenLang,
saveResponses: saveResponses, saveResponses: saveResponses,
); );
} }
@ -77,6 +92,7 @@ class SettingsModel {
"dx": offset?.dx, "dx": offset?.dx,
"dy": offset?.dy, "dy": offset?.dy,
"defaultUriScheme": defaultUriScheme, "defaultUriScheme": defaultUriScheme,
"defaultCodeGenLang": defaultCodeGenLang.name,
"saveResponses": saveResponses, "saveResponses": saveResponses,
}; };
} }

View File

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

View File

@ -1,4 +1,3 @@
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);
@ -8,5 +7,3 @@ 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.curl);

View File

@ -75,6 +75,25 @@ class _SettingsPageState extends ConsumerState<SettingsPage> {
); );
}).toList()), }).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( CheckboxListTile(
contentPadding: EdgeInsets.zero, contentPadding: EdgeInsets.zero,
title: const Text("Save Responses"), title: const Text("Save Responses"),