From 1d9f7f052d573cbde7ee17763a42e59bc31109b2 Mon Sep 17 00:00:00 2001 From: bggRGjQaUbCoE Date: Thu, 19 Dec 2024 19:06:36 +0800 Subject: [PATCH] feat: custom rcmd filter duration Closes #41 Signed-off-by: bggRGjQaUbCoE --- lib/pages/setting/recommend_setting.dart | 82 ++++++++++++++++++++++-- 1 file changed, 77 insertions(+), 5 deletions(-) diff --git a/lib/pages/setting/recommend_setting.dart b/lib/pages/setting/recommend_setting.dart index 04cbfecc4..dcd936322 100644 --- a/lib/pages/setting/recommend_setting.dart +++ b/lib/pages/setting/recommend_setting.dart @@ -1,5 +1,7 @@ import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; +import 'package:get/get.dart'; import 'package:hive/hive.dart'; import 'package:PiliPalaX/models/common/rcmd_type.dart'; import 'package:PiliPalaX/pages/setting/widgets/select_dialog.dart'; @@ -212,16 +214,86 @@ class _RecommendSettingState extends State { return SelectDialog( title: '选择时长(0即不过滤)', value: minDurationForRcmd, - values: [0, 30, 60, 90, 120].map((e) { + values: [ + ...[ + 0, + 30, + 60, + 90, + 120, + if (![ + 0, + 30, + 60, + 90, + 120, + ].contains(minDurationForRcmd)) + minDurationForRcmd, + ]..sort(), + -1 + ].map((e) { + if (e == -1) { + return {'title': '自定义', 'value': e}; + } return {'title': '$e 秒', 'value': e}; }).toList()); }, ); if (result != null) { - minDurationForRcmd = result; - setting.put(SettingBoxKey.minDurationForRcmd, result); - RecommendFilter.update(); - setState(() {}); + if (result == -1 && context.mounted) { + showDialog( + context: context, + builder: (context) { + String initialValue = + result == -1 ? '' : minDurationForRcmd.toString(); + return AlertDialog( + title: Text( + '自定义时长', + style: TextStyle(fontSize: 18), + ), + content: TextFormField( + autofocus: true, + initialValue: initialValue, + onChanged: (value) => initialValue = value, + keyboardType: TextInputType.number, + inputFormatters: [ + FilteringTextInputFormatter.allow(RegExp(r'\d+')), + ], + decoration: const InputDecoration(suffixText: 's'), + ), + actions: [ + TextButton( + onPressed: Get.back, + child: Text( + '取消', + style: TextStyle( + color: Theme.of(context).colorScheme.outline), + ), + ), + TextButton( + onPressed: () { + Get.back(); + int result = int.tryParse(initialValue) ?? 0; + minDurationForRcmd = result; + setting.put( + SettingBoxKey.minDurationForRcmd, result); + RecommendFilter.update(); + setState(() {}); + }, + child: Text( + '确定', + ), + ), + ], + ); + }, + ); + } else { + minDurationForRcmd = result; + setting.put(SettingBoxKey.minDurationForRcmd, result); + RecommendFilter.update(); + setState(() {}); + } } }, ),