From 0826ba8fc6df140f641516eae7b8bf7b02bf1c69 Mon Sep 17 00:00:00 2001 From: lifegpc Date: Fri, 8 Sep 2023 16:29:04 +0800 Subject: [PATCH] Update settings --- lib/components/gallery_info.dart | 2 +- lib/components/tags.dart | 8 +++- lib/l10n/app_en.arb | 3 +- lib/l10n/app_zh.arb | 3 +- lib/settings.dart | 69 ++++++++++++++++++++++++++++++++ 5 files changed, 80 insertions(+), 5 deletions(-) diff --git a/lib/components/gallery_info.dart b/lib/components/gallery_info.dart index 4f6844b..9e09454 100644 --- a/lib/components/gallery_info.dart +++ b/lib/components/gallery_info.dart @@ -68,7 +68,7 @@ class _GalleryInfo extends State with ThemeModeWidget { ]), ), ThumbnailGridView(widget.gData.pages, - const SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 5), + SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: useMobile ? 2 : 5), files: widget.files), ], ); diff --git a/lib/components/tags.dart b/lib/components/tags.dart index 81417b7..a690f5f 100644 --- a/lib/components/tags.dart +++ b/lib/components/tags.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import '../api/gallery.dart'; import '../globals.dart'; +import '../main.dart'; import 'scroll_parent.dart'; class TagsPanel extends StatefulWidget { @@ -53,6 +54,8 @@ class _TagsPanel extends State { @override Widget build(BuildContext context) { final cs = Theme.of(context).colorScheme; + final stt = prefs.getBool("showTranslatedTag") ?? + MainApp.of(context).lang.toLocale().languageCode == "zh"; final re = ListView.builder( padding: const EdgeInsets.all(8), itemCount: data!.length, @@ -60,7 +63,7 @@ class _TagsPanel extends State { final t = data![index].$1; final ta = data![index].$2; final namespace = - "${tags.getTagTranslate(t) ?? t}${AppLocalizations.of(context)!.colon}"; + "${stt ? (tags.getTagTranslate(t) ?? t) : t}${AppLocalizations.of(context)!.colon}"; return Wrap( children: List.generate(ta.length + 1, (index) { if (index == 0) { @@ -74,7 +77,8 @@ class _TagsPanel extends State { borderRadius: const BorderRadius.all(Radius.circular(4.0)), border: Border.all(width: 1, color: cs.primary), ), - child: SelectableText(_getTag(ta[index - 1]!))); + child: SelectableText( + stt ? _getTag(ta[index - 1]!) : ta[index - 1]!.tag)); } })); }); diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index 186635d..4336235 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -30,5 +30,6 @@ "copyImage": "Copy image to clipboard", "copyImgUrl": "Copy image URL to clipboard", "retry": "Retry", - "displayAd": "Display Ad pages" + "displayAd": "Display Ad pages", + "showTranslatedTag": "Show translated tag (Chinese only)" } diff --git a/lib/l10n/app_zh.arb b/lib/l10n/app_zh.arb index 13de168..7ecb011 100644 --- a/lib/l10n/app_zh.arb +++ b/lib/l10n/app_zh.arb @@ -30,5 +30,6 @@ "copyImage": "复制图片到剪贴板", "copyImgUrl": "复制图片链接到剪贴板", "retry": "重试", - "displayAd": "显示广告页面" + "displayAd": "显示广告页面", + "showTranslatedTag": "显示标签翻译(仅限中文)" } diff --git a/lib/settings.dart b/lib/settings.dart index 51d9181..e2796be 100644 --- a/lib/settings.dart +++ b/lib/settings.dart @@ -17,11 +17,15 @@ class SettingsPage extends StatefulWidget { } class _SettingsPage extends State with ThemeModeWidget { + bool _oriDisplayAd = false; Lang _oriLang = Lang.system; bool _oriShowNsfw = false; + bool _oriShowTranslatedTag = false; bool _oriUseTitleJpn = false; + bool _displayAd = false; Lang _lang = Lang.system; bool _showNsfw = false; + bool _showTranslatedTag = false; bool _useTitleJpn = false; @override void initState() { @@ -50,6 +54,23 @@ class _SettingsPage extends State with ThemeModeWidget { _oriShowNsfw = false; _showNsfw = false; } + try { + _oriDisplayAd = prefs.getBool("displayAd") ?? false; + _displayAd = _oriDisplayAd; + } catch (e) { + _log.warning("Failed to get displayAd:", e); + _oriDisplayAd = false; + _displayAd = false; + } + try { + _oriShowTranslatedTag = prefs.getBool("showTranslatedTag") ?? + _oriLang.toLocale().languageCode == "zh"; + _showTranslatedTag = _oriShowTranslatedTag; + } catch (e) { + _log.warning("Failed to get showTranslatedTag:", e); + _oriShowTranslatedTag = false; + _showTranslatedTag = false; + } } void fallback(BuildContext context) { @@ -64,6 +85,8 @@ class _SettingsPage extends State with ThemeModeWidget { _lang = Lang.system; _useTitleJpn = false; _showNsfw = false; + _displayAd = false; + _showTranslatedTag = _oriLang.toLocale().languageCode == "zh"; }); } @@ -91,6 +114,22 @@ class _SettingsPage extends State with ThemeModeWidget { _oriShowNsfw = _showNsfw; } } + if (_oriDisplayAd != _displayAd) { + if (!await prefs.setBool("displayAd", _displayAd)) { + re = false; + _log.warning("Failed to save displayAd."); + } else { + _oriDisplayAd = _displayAd; + } + } + if (_oriShowTranslatedTag != _showTranslatedTag) { + if (!await prefs.setBool("showTranslatedTag", _showTranslatedTag)) { + re = false; + _log.warning("Failed to save showTranslatedTag."); + } else { + _oriShowTranslatedTag = _showTranslatedTag; + } + } return re; } @@ -179,6 +218,36 @@ class _SettingsPage extends State with ThemeModeWidget { AppLocalizations.of(context)!.showNsfw), ), ), + Container( + padding: const EdgeInsets.symmetric(vertical: 8), + child: CheckboxMenuButton( + value: _displayAd, + onChanged: (bool? value) { + if (value != null) { + setState(() { + _displayAd = value; + }); + } + }, + child: Text( + AppLocalizations.of(context)!.displayAd), + ), + ), + Container( + padding: const EdgeInsets.symmetric(vertical: 8), + child: CheckboxMenuButton( + value: _showTranslatedTag, + onChanged: (bool? value) { + if (value != null) { + setState(() { + _showTranslatedTag = value; + }); + } + }, + child: Text(AppLocalizations.of(context)! + .showTranslatedTag), + ), + ), Row( mainAxisAlignment: MainAxisAlignment.center, children: [