mirror of
https://github.com/bggRGjQaUbCoE/PiliPlus.git
synced 2026-05-31 16:18:22 +08:00
@@ -19,6 +19,7 @@ Future<void> autoWrapReportDialog(
|
|||||||
context: context,
|
context: context,
|
||||||
builder: (context) {
|
builder: (context) {
|
||||||
return AlertDialog(
|
return AlertDialog(
|
||||||
|
constraints: const BoxConstraints(minWidth: 280, maxWidth: 420),
|
||||||
title: const Text('举报'),
|
title: const Text('举报'),
|
||||||
titlePadding: const EdgeInsets.only(left: 22, top: 16, right: 22),
|
titlePadding: const EdgeInsets.only(left: 22, top: 16, right: 22),
|
||||||
contentPadding: const EdgeInsets.symmetric(vertical: 5),
|
contentPadding: const EdgeInsets.symmetric(vertical: 5),
|
||||||
|
|||||||
@@ -3,6 +3,10 @@ import 'package:flutter/material.dart';
|
|||||||
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
|
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
|
|
||||||
|
const _reason = ['头像违规', '昵称违规', '签名违规'];
|
||||||
|
|
||||||
|
const _reasonV2 = ['色情低俗', '不实信息', '违禁', '人身攻击', '赌博诈骗', '违规引流外链'];
|
||||||
|
|
||||||
Future<void> showMemberReportDialog(
|
Future<void> showMemberReportDialog(
|
||||||
BuildContext context, {
|
BuildContext context, {
|
||||||
required Object? name,
|
required Object? name,
|
||||||
@@ -17,13 +21,11 @@ Future<void> showMemberReportDialog(
|
|||||||
final theme = Theme.of(context);
|
final theme = Theme.of(context);
|
||||||
return AlertDialog(
|
return AlertDialog(
|
||||||
clipBehavior: Clip.hardEdge,
|
clipBehavior: Clip.hardEdge,
|
||||||
contentPadding: const EdgeInsets.symmetric(
|
contentPadding: const EdgeInsets.symmetric(vertical: 16),
|
||||||
horizontal: 20,
|
|
||||||
vertical: 16,
|
|
||||||
),
|
|
||||||
titleTextStyle: theme.textTheme.bodyMedium,
|
titleTextStyle: theme.textTheme.bodyMedium,
|
||||||
title: Column(
|
title: Column(
|
||||||
spacing: 4,
|
spacing: 4,
|
||||||
|
crossAxisAlignment: .start,
|
||||||
children: [
|
children: [
|
||||||
Text(
|
Text(
|
||||||
'举报: $name',
|
'举报: $name',
|
||||||
@@ -34,53 +36,101 @@ Future<void> showMemberReportDialog(
|
|||||||
),
|
),
|
||||||
content: SingleChildScrollView(
|
content: SingleChildScrollView(
|
||||||
child: Column(
|
child: Column(
|
||||||
mainAxisSize: MainAxisSize.min,
|
mainAxisSize: .min,
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
crossAxisAlignment: .start,
|
||||||
children: [
|
children: [
|
||||||
const Text('举报内容(必选,可多选)'),
|
const Padding(
|
||||||
|
padding: .only(left: 18),
|
||||||
|
child: Text('举报内容(必选,可多选)'),
|
||||||
|
),
|
||||||
...List.generate(
|
...List.generate(
|
||||||
3,
|
3,
|
||||||
(index) => Builder(
|
(index) => Builder(
|
||||||
builder: (context) => CheckboxListTile(
|
builder: (context) {
|
||||||
dense: true,
|
final checked = reason.contains(index + 1);
|
||||||
value: reason.contains(index + 1),
|
return ListTile(
|
||||||
controlAffinity: ListTileControlAffinity.leading,
|
dense: true,
|
||||||
contentPadding: EdgeInsets.zero,
|
minTileHeight: 40,
|
||||||
onChanged: (value) {
|
onTap: () {
|
||||||
if (value!) {
|
if (!checked) {
|
||||||
reason.add(index + 1);
|
reason.add(index + 1);
|
||||||
} else {
|
} else {
|
||||||
reason.remove(index + 1);
|
reason.remove(index + 1);
|
||||||
}
|
}
|
||||||
(context as Element).markNeedsBuild();
|
(context as Element).markNeedsBuild();
|
||||||
},
|
},
|
||||||
title: Text(const ['头像违规', '昵称违规', '签名违规'][index]),
|
title: Row(
|
||||||
),
|
spacing: 8,
|
||||||
|
children: [
|
||||||
|
checked
|
||||||
|
? Icon(
|
||||||
|
size: 22,
|
||||||
|
Icons.check_box,
|
||||||
|
color: theme.colorScheme.primary,
|
||||||
|
)
|
||||||
|
: Icon(
|
||||||
|
size: 22,
|
||||||
|
Icons.check_box_outline_blank,
|
||||||
|
color: theme.colorScheme.onSurfaceVariant,
|
||||||
|
),
|
||||||
|
Expanded(
|
||||||
|
child: Text(
|
||||||
|
_reason[index],
|
||||||
|
style: const TextStyle(fontSize: 14),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
const Text('举报理由(单选,非必选)'),
|
const Padding(
|
||||||
|
padding: .only(left: 18),
|
||||||
|
child: Text('举报理由(单选,非必选)'),
|
||||||
|
),
|
||||||
Builder(
|
Builder(
|
||||||
builder: (context) => RadioGroup<int>(
|
builder: (context) => Column(
|
||||||
onChanged: (v) {
|
crossAxisAlignment: .start,
|
||||||
reasonV2 = v;
|
children: List.generate(
|
||||||
(context as Element).markNeedsBuild();
|
_reasonV2.length,
|
||||||
},
|
(index) {
|
||||||
groupValue: reasonV2,
|
final checked = index == reasonV2;
|
||||||
child: Column(
|
return ListTile(
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
|
||||||
children: List.generate(
|
|
||||||
5,
|
|
||||||
(index) => RadioListTile<int>(
|
|
||||||
toggleable: true,
|
|
||||||
controlAffinity: ListTileControlAffinity.leading,
|
|
||||||
contentPadding: const EdgeInsets.only(left: 4),
|
|
||||||
dense: true,
|
dense: true,
|
||||||
value: index,
|
minTileHeight: 40,
|
||||||
title: Text(
|
onTap: () {
|
||||||
const ['色情低俗', '不实信息', '违禁', '人身攻击', '赌博诈骗'][index],
|
if (checked) {
|
||||||
|
reasonV2 = null;
|
||||||
|
} else {
|
||||||
|
reasonV2 = index;
|
||||||
|
}
|
||||||
|
(context as Element).markNeedsBuild();
|
||||||
|
},
|
||||||
|
title: Row(
|
||||||
|
spacing: 8,
|
||||||
|
children: [
|
||||||
|
checked
|
||||||
|
? Icon(
|
||||||
|
size: 22,
|
||||||
|
Icons.radio_button_checked,
|
||||||
|
color: theme.colorScheme.primary,
|
||||||
|
)
|
||||||
|
: Icon(
|
||||||
|
size: 22,
|
||||||
|
Icons.radio_button_off,
|
||||||
|
color: theme.colorScheme.onSurfaceVariant,
|
||||||
|
),
|
||||||
|
Expanded(
|
||||||
|
child: Text(
|
||||||
|
_reasonV2[index],
|
||||||
|
style: const TextStyle(fontSize: 14),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
),
|
),
|
||||||
),
|
);
|
||||||
),
|
},
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -191,11 +191,8 @@ class _CreateFavPageState extends State<CreateFavPage> {
|
|||||||
builder: (_) {
|
builder: (_) {
|
||||||
return AlertDialog(
|
return AlertDialog(
|
||||||
clipBehavior: Clip.hardEdge,
|
clipBehavior: Clip.hardEdge,
|
||||||
contentPadding: const EdgeInsets.fromLTRB(
|
contentPadding: const EdgeInsets.symmetric(
|
||||||
0,
|
vertical: 12,
|
||||||
12,
|
|
||||||
0,
|
|
||||||
12,
|
|
||||||
),
|
),
|
||||||
content: Column(
|
content: Column(
|
||||||
mainAxisSize: MainAxisSize.min,
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
|||||||
Reference in New Issue
Block a user