mirror of
https://github.com/bggRGjQaUbCoE/PiliPlus.git
synced 2026-04-20 11:08:03 +08:00
committed by
GitHub
parent
e2639b6951
commit
170b2aa6d9
@@ -2,18 +2,19 @@ import 'package:PiliPlus/common/widgets/loading_widget/loading_widget.dart';
|
||||
import 'package:PiliPlus/http/loading_state.dart';
|
||||
import 'package:PiliPlus/http/member.dart';
|
||||
import 'package:PiliPlus/models/member/tags.dart';
|
||||
import 'package:PiliPlus/utils/extension.dart';
|
||||
import 'package:PiliPlus/utils/feed_back.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
class GroupPanel extends StatefulWidget {
|
||||
final int? mid;
|
||||
final int mid;
|
||||
final List? tags;
|
||||
final ScrollController? scrollController;
|
||||
const GroupPanel({
|
||||
super.key,
|
||||
this.mid,
|
||||
required this.mid,
|
||||
this.tags,
|
||||
this.scrollController,
|
||||
});
|
||||
@@ -23,9 +24,9 @@ class GroupPanel extends StatefulWidget {
|
||||
}
|
||||
|
||||
class _GroupPanelState extends State<GroupPanel> {
|
||||
LoadingState<List<MemberTagItemModel>> loadingState =
|
||||
LoadingState<List<MemberTagItemModel>>.loading();
|
||||
LoadingState<List<MemberTagItemModel>> loadingState = LoadingState.loading();
|
||||
RxBool showDefaultBtn = true.obs;
|
||||
late final Set<int> tags = widget.tags?.cast<int>().toSet() ?? {};
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
@@ -36,19 +37,8 @@ class _GroupPanelState extends State<GroupPanel> {
|
||||
void _query() {
|
||||
MemberHttp.followUpTags().then((res) {
|
||||
if (mounted) {
|
||||
if (res['status']) {
|
||||
List<MemberTagItemModel> tagsList =
|
||||
(res['data'] as List<MemberTagItemModel>)
|
||||
..removeWhere((item) => item.tagid == 0)
|
||||
..map((item) {
|
||||
return item.checked =
|
||||
widget.tags?.contains(item.tagid) == true;
|
||||
}).toList();
|
||||
showDefaultBtn.value = !tagsList.any((e) => e.checked == true);
|
||||
loadingState = Success(tagsList);
|
||||
} else {
|
||||
loadingState = Error(res['msg']);
|
||||
}
|
||||
loadingState = res..dataOrNull.removeFirstWhere((e) => e.tagid == 0);
|
||||
showDefaultBtn.value = tags.isEmpty;
|
||||
setState(() {});
|
||||
}
|
||||
});
|
||||
@@ -60,28 +50,14 @@ class _GroupPanelState extends State<GroupPanel> {
|
||||
return;
|
||||
}
|
||||
feedBack();
|
||||
// 是否有选中的 有选中的带id,没选使用默认0
|
||||
List<MemberTagItemModel> tagsList = loadingState.data;
|
||||
final bool anyHasChecked = tagsList.any(
|
||||
(MemberTagItemModel e) => e.checked == true,
|
||||
);
|
||||
late List<int> tagidList;
|
||||
if (anyHasChecked) {
|
||||
final List<MemberTagItemModel> checkedList = tagsList
|
||||
.where((MemberTagItemModel e) => e.checked == true)
|
||||
.toList();
|
||||
tagidList = checkedList.map<int>((e) => e.tagid!).toList();
|
||||
} else {
|
||||
tagidList = [0];
|
||||
}
|
||||
// 保存
|
||||
final res = await MemberHttp.addUsers(
|
||||
widget.mid.toString(),
|
||||
tagidList.join(','),
|
||||
tags.isEmpty ? '0' : tags.join(','),
|
||||
);
|
||||
SmartDialog.showToast(res['msg']);
|
||||
if (res['status']) {
|
||||
Get.back(result: tagidList);
|
||||
Get.back(result: tags);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -98,11 +74,16 @@ class _GroupPanelState extends State<GroupPanel> {
|
||||
child: Builder(
|
||||
builder: (context) {
|
||||
void onTap() {
|
||||
item.checked = !item.checked!;
|
||||
final tagid = item.tagid!;
|
||||
if (tags.contains(tagid)) {
|
||||
tags.remove(tagid);
|
||||
item.count--;
|
||||
} else {
|
||||
tags.add(tagid);
|
||||
item.count++;
|
||||
}
|
||||
(context as Element).markNeedsBuild();
|
||||
showDefaultBtn.value = !response.any(
|
||||
(e) => e.checked == true,
|
||||
);
|
||||
showDefaultBtn.value = tags.isEmpty;
|
||||
}
|
||||
|
||||
return ListTile(
|
||||
@@ -110,15 +91,15 @@ class _GroupPanelState extends State<GroupPanel> {
|
||||
dense: true,
|
||||
leading: const Icon(Icons.group_outlined),
|
||||
minLeadingWidth: 0,
|
||||
title: Text(item.name ?? ''),
|
||||
title: Text('${item.name} (${item.count})'),
|
||||
subtitle: item.tip?.isNotEmpty == true
|
||||
? Text(item.tip!)
|
||||
: null,
|
||||
trailing: Transform.scale(
|
||||
scale: 0.9,
|
||||
child: Checkbox(
|
||||
value: item.checked,
|
||||
onChanged: (bool? checkValue) => onTap(),
|
||||
value: tags.contains(item.tagid),
|
||||
onChanged: (_) => onTap(),
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user