feat: add to filter (#1903)

This commit is contained in:
My-Responsitories
2026-04-28 07:23:47 +00:00
committed by GitHub
parent f7a2be1923
commit 9ed8b14d1b

View File

@@ -4,6 +4,7 @@ import 'package:PiliPlus/common/assets.dart';
import 'package:PiliPlus/common/constants.dart';
import 'package:PiliPlus/common/style.dart';
import 'package:PiliPlus/common/widgets/badge.dart';
import 'package:PiliPlus/common/widgets/dialog/dialog.dart';
import 'package:PiliPlus/common/widgets/dialog/report.dart';
import 'package:PiliPlus/common/widgets/extra_hit_test_widget.dart';
import 'package:PiliPlus/common/widgets/flutter/text/text.dart' as custom_text;
@@ -38,6 +39,7 @@ import 'package:PiliPlus/utils/image_utils.dart';
import 'package:PiliPlus/utils/page_utils.dart';
import 'package:PiliPlus/utils/platform_utils.dart';
import 'package:PiliPlus/utils/storage.dart';
import 'package:PiliPlus/utils/storage_key.dart';
import 'package:PiliPlus/utils/storage_pref.dart';
import 'package:PiliPlus/utils/url_utils.dart';
import 'package:PiliPlus/utils/utils.dart';
@@ -1162,6 +1164,8 @@ class ReplyItemGrpc extends StatelessWidget {
child: SelectableText(
message,
style: const TextStyle(fontSize: 15, height: 1.7),
contextMenuBuilder: (_, editableTextState) =>
_filterMenuBuilder(context, editableTextState),
),
),
),
@@ -1201,4 +1205,56 @@ class ReplyItemGrpc extends StatelessWidget {
),
);
}
static Widget _filterMenuBuilder(
BuildContext context,
EditableTextState editableTextState,
) {
final items = editableTextState.contextMenuButtonItems;
if (!editableTextState.textEditingValue.selection.isCollapsed) {
items.add(
ContextMenuButtonItem(
onPressed: () {
Navigator.of(context).pop();
final select = editableTextState.textEditingValue;
String text = RegExp.escape(
select.selection.textInside(select.text),
);
if (ReplyGrpc.enableFilter) text = '|$text';
showConfirmDialog(
context: context,
title: const Text('是否确认评论过滤的变更:'),
content: Text.rich(
TextSpan(
text: ReplyGrpc.replyRegExp.pattern,
children: [
TextSpan(
text: text,
style: const TextStyle(
color: Colors.green,
fontWeight: .bold,
),
),
],
),
),
onConfirm: () {
final filter = ReplyGrpc.replyRegExp.pattern + text;
ReplyGrpc.replyRegExp = RegExp(filter, caseSensitive: true);
ReplyGrpc.enableFilter = true;
GStorage.setting.put(SettingBoxKey.banWordForReply, filter);
SmartDialog.showToast('已保存');
},
);
},
label: '加入过滤',
),
);
}
return AdaptiveTextSelectionToolbar.buttonItems(
buttonItems: items,
anchors: editableTextState.contextMenuAnchors,
);
}
}