From 9e50a195a4d9948b88112d58e539fe34b6ab9295 Mon Sep 17 00:00:00 2001 From: bggRGjQaUbCoE Date: Wed, 30 Apr 2025 21:36:06 +0800 Subject: [PATCH] opt: search settings Signed-off-by: bggRGjQaUbCoE --- lib/pages/setting/search_page.dart | 46 ++++++++++++++++-------------- lib/pages/setting/view.dart | 6 +++- 2 files changed, 29 insertions(+), 23 deletions(-) diff --git a/lib/pages/setting/search_page.dart b/lib/pages/setting/search_page.dart index 7c11bec47..a5db69be1 100644 --- a/lib/pages/setting/search_page.dart +++ b/lib/pages/setting/search_page.dart @@ -1,6 +1,7 @@ import 'package:PiliPlus/common/widgets/http_error.dart'; import 'package:PiliPlus/pages/setting/widgets/model.dart'; import 'package:PiliPlus/utils/grid.dart'; +import 'package:easy_debounce/easy_throttle.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:waterfall_flow/waterfall_flow.dart'; @@ -15,6 +16,14 @@ class SettingsSearchPage extends StatefulWidget { class _SettingsSearchPageState extends State { final _textEditingController = TextEditingController(); final RxList _list = [].obs; + late final _settings = [ + ...extraSettings, + ...privacySettings, + ...recommendSettings, + ...videoSettings, + ...playSettings, + ...styleSettings, + ]..removeWhere((item) => item.settingsType == SettingsType.divider); @override void dispose() { @@ -45,28 +54,21 @@ class _SettingsSearchPageState extends State { controller: _textEditingController, textAlignVertical: TextAlignVertical.center, onChanged: (value) { - if (value.isEmpty) { - _list.value = []; - } else { - _list.value = [ - ...extraSettings, - ...privacySettings, - ...recommendSettings, - ...videoSettings, - ...playSettings, - ...styleSettings, - ] - .where((item) => - item.settingsType != SettingsType.divider && - (item.title ?? item.getTitle?.call()) - ?.toLowerCase() - .contains(value.toLowerCase()) || - item.subtitle - ?.toLowerCase() - .contains(value.toLowerCase()) == - true) - .toList(); - } + EasyThrottle.throttle( + 'searchSettings', const Duration(milliseconds: 200), () { + if (value.isEmpty) { + _list.clear(); + } else { + value = value.toLowerCase(); + _list.value = _settings + .where((item) => + (item.title ?? item.getTitle?.call()) + ?.toLowerCase() + .contains(value) || + item.subtitle?.toLowerCase().contains(value) == true) + .toList(); + } + }); }, decoration: InputDecoration( isDense: true, diff --git a/lib/pages/setting/view.dart b/lib/pages/setting/view.dart index 0bf0c200c..646ac9d28 100644 --- a/lib/pages/setting/view.dart +++ b/lib/pages/setting/view.dart @@ -280,7 +280,11 @@ class _SettingPageState extends State { } Widget _buildSearchItem(ThemeData theme) => Padding( - padding: const EdgeInsets.only(left: 16, right: 16, bottom: 5), + padding: EdgeInsets.only( + left: 16 + MediaQuery.paddingOf(context).left, + right: 16, + bottom: 8, + ), child: InkWell( onTap: () => Get.toNamed('/settingsSearch'), borderRadius: BorderRadius.circular(50),