Resorted settings, toggle's text can change value

This commit is contained in:
JHubi1 2024-06-08 18:13:31 +02:00
parent 2e1f8c1935
commit ec55ccde3e
No known key found for this signature in database
GPG Key ID: 7BF82570CBBBD050
6 changed files with 244 additions and 214 deletions

View File

@ -222,6 +222,46 @@
"description": "Text displayed when behavior settings are not updated for older chats",
"context": "Visible in the settings view"
},
"settingsShowModelTags": "Model-Tags anzeigen",
"@settingsShowModelTags": {
"description": "Text displayed as description for show model tags toggle",
"context": "Visible in the settings view"
},
"settingsResetOnModelChange": "Zurücksetzen bei Modelländerung",
"@settingsResetOnModelChange": {
"description": "Text displayed as description for reset on model change toggle",
"context": "Visible in the settings view"
},
"settingsGenerateTitles": "Titel generieren",
"@settingsGenerateTitles": {
"description": "Text displayed as description for generate titles toggle",
"context": "Visible in the settings view"
},
"settingsEnableEditing": "Nachrichtenbearbeitung aktivieren",
"@settingsEnableEditing": {
"description": "Text displayed as description for enable editing toggle",
"context": "Visible in the settings view"
},
"settingsAskBeforeDelete": "Vor Löschung des Chats fragen",
"@settingsAskBeforeDelete": {
"description": "Text displayed as description for ask before deletion toggle",
"context": "Visible in the settings view"
},
"settingsShowTips": "Tipps in der Seitenleiste anzeigen",
"@settingsShowTips": {
"description": "Text displayed as description for show tips toggle",
"context": "Visible in the settings view"
},
"settingsRequestTypeStream": "Stream",
"@settingsRequestTypeStream": {
"description": "Text displayed as description for stream request type. Do not translate if not required!",
"context": "Visible in the settings view"
},
"settingsRequestTypeRequest": "Request",
"@settingsRequestTypeRequest": {
"description": "Text displayed as description for request request type. Do not translate if not required!",
"context": "Visible in the settings view"
},
"settingsBrightnessSystem": "System",
"@settingsBrightnessSystem": {
"description": "Text displayed as description for system brightness option",
@ -257,46 +297,6 @@
"description": "Text displayed for cancel button, should be capitalized",
"context": "Visible in the settings view"
},
"settingsGenerateTitles": "Titel generieren",
"@settingsGenerateTitles": {
"description": "Text displayed as description for generate titles toggle",
"context": "Visible in the settings view"
},
"settingsAskBeforeDelete": "Vor Löschung des Chats fragen",
"@settingsAskBeforeDelete": {
"description": "Text displayed as description for ask before deletion toggle",
"context": "Visible in the settings view"
},
"settingsResetOnModelChange": "Zurücksetzen bei Modelländerung",
"@settingsResetOnModelChange": {
"description": "Text displayed as description for reset on model change toggle",
"context": "Visible in the settings view"
},
"settingsEnableEditing": "Nachrichtenbearbeitung aktivieren",
"@settingsEnableEditing": {
"description": "Text displayed as description for enable editing toggle",
"context": "Visible in the settings view"
},
"settingsShowTips": "Tipps in der Seitenleiste anzeigen",
"@settingsShowTips": {
"description": "Text displayed as description for show tips toggle",
"context": "Visible in the settings view"
},
"settingsShowModelTags": "Model-Tags anzeigen",
"@settingsShowModelTags": {
"description": "Text displayed as description for show model tags toggle",
"context": "Visible in the settings view"
},
"settingsRequestTypeStream": "Stream",
"@settingsRequestTypeStream": {
"description": "Text displayed as description for stream request type. Do not translate if not required!",
"context": "Visible in the settings view"
},
"settingsRequestTypeRequest": "Request",
"@settingsRequestTypeRequest": {
"description": "Text displayed as description for request request type. Do not translate if not required!",
"context": "Visible in the settings view"
},
"settingsExportChats": "Chats exportieren",
"@settingsExportChats": {
"description": "Text displayed as description for export chats button",
@ -342,6 +342,11 @@
"description": "Warning displayed for export and import options",
"context": "Visible in the settings view"
},
"settingsCheckForUpdates": "Beim Öffnen nach Updates suchen",
"@settingsCheckForUpdates": {
"description": "Text displayed as description for check for updates toggle",
"context": "Visible in the settings view"
},
"settingsUpdateCheck": "Nach Updates suchen",
"@settingsUpdateCheck": {
"description": "Text displayed as description for check for updates button",
@ -403,11 +408,6 @@
"description": "Text displayed for cancel button, should be capitalized",
"context": "Visible in the settings view"
},
"settingsCheckForUpdates": "Nach Updates suchen",
"@settingsCheckForUpdates": {
"description": "Text displayed as description for check for updates toggle",
"context": "Visible in the settings view"
},
"settingsGithub": "GitHub",
"@settingsGithub": {
"description": "Text displayed as description for GitHub button",
@ -422,5 +422,16 @@
"@settingsMainDeveloper": {
"description": "Text displayed as description for main developer button",
"context": "Visible in the settings view"
},
"settingsVersion": "Ollama App v{version}",
"@settingsVersion": {
"description": "Text displayed as description for version",
"context": "Visible in the settings view",
"placeholders": {
"version": {
"type": "String",
"description": "Version number of the app"
}
}
}
}

View File

@ -222,6 +222,46 @@
"description": "Text displayed when behavior settings are not updated for older chats",
"context": "Visible in the settings view"
},
"settingsShowModelTags": "Show model tags",
"@settingsShowModelTags": {
"description": "Text displayed as description for show model tags toggle",
"context": "Visible in the settings view"
},
"settingsResetOnModelChange": "Reset on model change",
"@settingsResetOnModelChange": {
"description": "Text displayed as description for reset on model change toggle",
"context": "Visible in the settings view"
},
"settingsGenerateTitles": "Generate titles",
"@settingsGenerateTitles": {
"description": "Text displayed as description for generate titles toggle",
"context": "Visible in the settings view"
},
"settingsEnableEditing": "Enable editing of messages",
"@settingsEnableEditing": {
"description": "Text displayed as description for enable editing toggle",
"context": "Visible in the settings view"
},
"settingsAskBeforeDelete": "Ask before chat deletion",
"@settingsAskBeforeDelete": {
"description": "Text displayed as description for ask before deletion toggle",
"context": "Visible in the settings view"
},
"settingsShowTips": "Show tips in sidebar",
"@settingsShowTips": {
"description": "Text displayed as description for show tips toggle",
"context": "Visible in the settings view"
},
"settingsRequestTypeStream": "Stream",
"@settingsRequestTypeStream": {
"description": "Text displayed as description for stream request type. Do not translate if not required!",
"context": "Visible in the settings view"
},
"settingsRequestTypeRequest": "Request",
"@settingsRequestTypeRequest": {
"description": "Text displayed as description for request request type. Do not translate if not required!",
"context": "Visible in the settings view"
},
"settingsBrightnessSystem": "System",
"@settingsBrightnessSystem": {
"description": "Text displayed as description for system brightness option",
@ -257,46 +297,6 @@
"description": "Text displayed for cancel button, should be capitalized",
"context": "Visible in the settings view"
},
"settingsGenerateTitles": "Generate titles",
"@settingsGenerateTitles": {
"description": "Text displayed as description for generate titles toggle",
"context": "Visible in the settings view"
},
"settingsAskBeforeDelete": "Ask before chat deletion",
"@settingsAskBeforeDelete": {
"description": "Text displayed as description for ask before deletion toggle",
"context": "Visible in the settings view"
},
"settingsResetOnModelChange": "Reset on model change",
"@settingsResetOnModelChange": {
"description": "Text displayed as description for reset on model change toggle",
"context": "Visible in the settings view"
},
"settingsEnableEditing": "Enable editing of messages",
"@settingsEnableEditing": {
"description": "Text displayed as description for enable editing toggle",
"context": "Visible in the settings view"
},
"settingsShowTips": "Show tips in sidebar",
"@settingsShowTips": {
"description": "Text displayed as description for show tips toggle",
"context": "Visible in the settings view"
},
"settingsShowModelTags": "Show model tags",
"@settingsShowModelTags": {
"description": "Text displayed as description for show model tags toggle",
"context": "Visible in the settings view"
},
"settingsRequestTypeStream": "Stream",
"@settingsRequestTypeStream": {
"description": "Text displayed as description for stream request type. Do not translate if not required!",
"context": "Visible in the settings view"
},
"settingsRequestTypeRequest": "Request",
"@settingsRequestTypeRequest": {
"description": "Text displayed as description for request request type. Do not translate if not required!",
"context": "Visible in the settings view"
},
"settingsExportChats": "Export chats",
"@settingsExportChats": {
"description": "Text displayed as description for export chats button",
@ -342,6 +342,11 @@
"description": "Warning displayed for export and import options",
"context": "Visible in the settings view"
},
"settingsCheckForUpdates": "Check for updates on open",
"@settingsCheckForUpdates": {
"description": "Text displayed as description for check for updates toggle",
"context": "Visible in the settings view"
},
"settingsUpdateCheck": "Check for updates",
"@settingsUpdateCheck": {
"description": "Text displayed as description for check for updates button",
@ -403,11 +408,6 @@
"description": "Text displayed for cancel button, should be capitalized",
"context": "Visible in the settings view"
},
"settingsCheckForUpdates": "Check for updates",
"@settingsCheckForUpdates": {
"description": "Text displayed as description for check for updates toggle",
"context": "Visible in the settings view"
},
"settingsGithub": "GitHub",
"@settingsGithub": {
"description": "Text displayed as description for GitHub button",

View File

@ -21,8 +21,15 @@ Widget toggle(BuildContext context, String text, bool value,
Function(bool value) onChanged) {
var space = ""; // Invisible character: U+2063
var spacePlus = " $space";
return Padding(
padding: const EdgeInsets.only(top: 4, bottom: 4),
return InkWell(
splashFactory: NoSplash.splashFactory,
highlightColor: Colors.transparent,
hoverColor: Colors.transparent,
onTap: () {
onChanged(!value);
},
child: Padding(
padding: const EdgeInsets.only(top: 8, bottom: 8),
child: Stack(children: [
Padding(
padding: const EdgeInsets.only(left: 16, right: 16, top: 12),
@ -48,9 +55,11 @@ Widget toggle(BuildContext context, String text, bool value,
? (theme ?? ThemeData()).colorScheme.surface
: (themeDark ?? ThemeData.dark()).colorScheme.surface,
child: SizedBox(
height: 40, child: Switch(value: value, onChanged: onChanged)))
height: 40,
child: Switch(value: value, onChanged: onChanged)))
]),
]),
),
);
}
@ -66,6 +75,17 @@ Widget title(String text, {double top = 16, double bottom = 16}) {
]));
}
Widget titleDivider({double top = 16, double bottom = 16}) {
return Padding(
padding: EdgeInsets.only(left: 8, right: 8, top: top, bottom: bottom),
child: const Row(
mainAxisSize: MainAxisSize.max,
children: [
Expanded(child: Divider()),
],
));
}
Widget button(String text, IconData icon, void Function()? onPressed,
{Color? color}) {
return InkWell(
@ -346,10 +366,7 @@ class _ScreenSettingsState extends State<ScreenSettings> {
"monospace"))
],
)))),
const Padding(
padding: EdgeInsets.only(
left: 8, right: 8, top: 16, bottom: 4),
child: Divider()),
titleDivider(bottom: 4),
button(
AppLocalizations.of(context)!
.settingsTitleBehavior,

View File

@ -89,6 +89,18 @@ class _ScreenSettingsAboutState extends State<ScreenSettingsAbout> {
.settingsVersion(currentVersion ?? "0.0.1"),
Icons.verified_rounded,
null),
(updateStatus == "notAvailable")
? const SizedBox.shrink()
: toggle(
context,
AppLocalizations.of(context)!
.settingsCheckForUpdates,
(prefs!.getBool("checkUpdateOnSettingsOpen") ??
false), (value) {
HapticFeedback.selectionClick();
prefs!.setBool("checkUpdateOnSettingsOpen", value);
setState(() {});
}),
(updateStatus == "notAvailable")
? const SizedBox.shrink()
: button(
@ -132,18 +144,7 @@ class _ScreenSettingsAboutState extends State<ScreenSettingsAbout> {
return;
}
}),
(updateStatus == "notAvailable")
? const SizedBox.shrink()
: toggle(
context,
AppLocalizations.of(context)!
.settingsCheckForUpdates,
(prefs!.getBool("checkUpdateOnSettingsOpen") ??
false), (value) {
HapticFeedback.selectionClick();
prefs!.setBool("checkUpdateOnSettingsOpen", value);
setState(() {});
}),
titleDivider(),
button(AppLocalizations.of(context)!.settingsGithub,
SimpleIcons.github, () {
HapticFeedback.selectionClick();

View File

@ -72,7 +72,7 @@ class _ScreenSettingsExportState extends State<ScreenSettingsExport> {
child: Column(children: [
Expanded(
child: ListView(children: [
const SizedBox(height: 16),
// const SizedBox(height: 16),
button(AppLocalizations.of(context)!.settingsExportChats,
Icons.upload_rounded, () async {
HapticFeedback.selectionClick();

View File

@ -71,6 +71,82 @@ class _ScreenSettingsInterfaceState extends State<ScreenSettingsInterface> {
child: Column(children: [
Expanded(
child: ListView(children: [
// const SizedBox(height: 16),
toggle(
context,
AppLocalizations.of(context)!.settingsShowModelTags,
(prefs!.getBool("modelTags") ?? false), (value) {
HapticFeedback.selectionClick();
prefs!.setBool("modelTags", value);
setState(() {});
}),
toggle(
context,
AppLocalizations.of(context)!
.settingsResetOnModelChange,
(prefs!.getBool("resetOnModelSelect") ?? true),
(value) {
HapticFeedback.selectionClick();
prefs!.setBool("resetOnModelSelect", value);
setState(() {});
}),
titleDivider(),
toggle(
context,
AppLocalizations.of(context)!.settingsGenerateTitles,
(prefs!.getBool("generateTitles") ?? true), (value) {
HapticFeedback.selectionClick();
prefs!.setBool("generateTitles", value);
setState(() {});
}),
toggle(
context,
AppLocalizations.of(context)!.settingsEnableEditing,
(prefs!.getBool("enableEditing") ?? true), (value) {
HapticFeedback.selectionClick();
prefs!.setBool("enableEditing", value);
setState(() {});
}),
toggle(
context,
AppLocalizations.of(context)!.settingsAskBeforeDelete,
(prefs!.getBool("askBeforeDeletion") ?? false),
(value) {
HapticFeedback.selectionClick();
prefs!.setBool("askBeforeDeletion", value);
setState(() {});
}),
toggle(
context,
AppLocalizations.of(context)!.settingsShowTips,
(prefs!.getBool("tips") ?? true), (value) {
HapticFeedback.selectionClick();
prefs!.setBool("tips", value);
setState(() {});
}),
titleDivider(bottom: 20),
SegmentedButton(
segments: [
ButtonSegment(
value: "stream",
label: Text(AppLocalizations.of(context)!
.settingsRequestTypeStream),
icon: const Icon(Icons.stream_rounded)),
ButtonSegment(
value: "request",
label: Text(AppLocalizations.of(context)!
.settingsRequestTypeRequest),
icon: const Icon(Icons.send_rounded))
],
selected: {
prefs!.getString("requestType") ?? "stream"
},
onSelectionChanged: (p0) {
HapticFeedback.selectionClick();
setState(() {
prefs!.setString("requestType", p0.elementAt(0));
});
}),
const SizedBox(height: 16),
SegmentedButton(
segments: [
@ -151,81 +227,6 @@ class _ScreenSettingsInterfaceState extends State<ScreenSettingsInterface> {
});
});
}),
const SizedBox(height: 16),
toggle(
context,
AppLocalizations.of(context)!.settingsGenerateTitles,
(prefs!.getBool("generateTitles") ?? true), (value) {
HapticFeedback.selectionClick();
prefs!.setBool("generateTitles", value);
setState(() {});
}),
toggle(
context,
AppLocalizations.of(context)!.settingsAskBeforeDelete,
(prefs!.getBool("askBeforeDeletion") ?? false),
(value) {
HapticFeedback.selectionClick();
prefs!.setBool("askBeforeDeletion", value);
setState(() {});
}),
toggle(
context,
AppLocalizations.of(context)!
.settingsResetOnModelChange,
(prefs!.getBool("resetOnModelSelect") ?? true),
(value) {
HapticFeedback.selectionClick();
prefs!.setBool("resetOnModelSelect", value);
setState(() {});
}),
toggle(
context,
AppLocalizations.of(context)!.settingsEnableEditing,
(prefs!.getBool("enableEditing") ?? true), (value) {
HapticFeedback.selectionClick();
prefs!.setBool("enableEditing", value);
setState(() {});
}),
toggle(
context,
AppLocalizations.of(context)!.settingsShowTips,
(prefs!.getBool("tips") ?? true), (value) {
HapticFeedback.selectionClick();
prefs!.setBool("tips", value);
setState(() {});
}),
toggle(
context,
AppLocalizations.of(context)!.settingsShowModelTags,
(prefs!.getBool("modelTags") ?? false), (value) {
HapticFeedback.selectionClick();
prefs!.setBool("modelTags", value);
setState(() {});
}),
const SizedBox(height: 16),
SegmentedButton(
segments: [
ButtonSegment(
value: "stream",
label: Text(AppLocalizations.of(context)!
.settingsRequestTypeStream),
icon: const Icon(Icons.stream_rounded)),
ButtonSegment(
value: "request",
label: Text(AppLocalizations.of(context)!
.settingsRequestTypeRequest),
icon: const Icon(Icons.send_rounded))
],
selected: {
prefs!.getString("requestType") ?? "stream"
},
onSelectionChanged: (p0) {
HapticFeedback.selectionClick();
setState(() {
prefs!.setString("requestType", p0.elementAt(0));
});
})
]),
),
const SizedBox(height: 16)