mirror of
https://github.com/bggRGjQaUbCoE/PiliPlus.git
synced 2026-04-22 03:31:09 +08:00
@@ -43,18 +43,29 @@ class _WhisperLinkSettingPageState extends State<WhisperLinkSettingPage> {
|
||||
return Scaffold(
|
||||
appBar: AppBar(title: const Text('聊天设置')),
|
||||
body: ListView(
|
||||
padding:
|
||||
EdgeInsets.only(bottom: MediaQuery.paddingOf(context).bottom + 80),
|
||||
padding: EdgeInsets.only(
|
||||
bottom: MediaQuery.paddingOf(context).bottom + 80,
|
||||
),
|
||||
children: [
|
||||
divider,
|
||||
Obx(() =>
|
||||
_buildUserInfo(theme, divider, _controller.userState.value)),
|
||||
Obx(() => _buildSessionSs(
|
||||
theme, divider, divider2, _controller.sessionSs.value)),
|
||||
Obx(() => _controller.sessionSs.value.isSuccess
|
||||
? _buildBlockItem(
|
||||
_controller.sessionSs.value.data.followStatus == 128)
|
||||
: const SizedBox.shrink()),
|
||||
Obx(
|
||||
() => _buildUserInfo(theme, divider, _controller.userState.value),
|
||||
),
|
||||
Obx(
|
||||
() => _buildSessionSs(
|
||||
theme,
|
||||
divider,
|
||||
divider2,
|
||||
_controller.sessionSs.value,
|
||||
),
|
||||
),
|
||||
Obx(
|
||||
() => _controller.sessionSs.value.isSuccess
|
||||
? _buildBlockItem(
|
||||
_controller.sessionSs.value.data.followStatus == 128,
|
||||
)
|
||||
: const SizedBox.shrink(),
|
||||
),
|
||||
divider2,
|
||||
ListTile(
|
||||
dense: true,
|
||||
@@ -80,8 +91,9 @@ class _WhisperLinkSettingPageState extends State<WhisperLinkSettingPage> {
|
||||
alignment: Alignment.centerRight,
|
||||
scale: 0.8,
|
||||
child: Switch(
|
||||
thumbIcon:
|
||||
WidgetStateProperty.resolveWith<Icon?>((Set<WidgetState> states) {
|
||||
thumbIcon: WidgetStateProperty.resolveWith<Icon?>((
|
||||
Set<WidgetState> states,
|
||||
) {
|
||||
if (states.isNotEmpty && states.first == WidgetState.selected) {
|
||||
return const Icon(Icons.done);
|
||||
}
|
||||
@@ -101,56 +113,59 @@ class _WhisperLinkSettingPageState extends State<WhisperLinkSettingPage> {
|
||||
) {
|
||||
return switch (loadingState) {
|
||||
Loading() => const SizedBox.shrink(),
|
||||
Success(:var response) => response?.isNotEmpty == true
|
||||
? Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Builder(
|
||||
builder: (context) {
|
||||
final ImUserInfosData item = response!.first;
|
||||
return ListTile(
|
||||
onTap: () => Get.toNamed('/member?mid=${item.mid}'),
|
||||
leading: PendantAvatar(
|
||||
avatar: item.face,
|
||||
size: 42,
|
||||
badgeSize: 14,
|
||||
isVip: item.vip?.status != null && item.vip!.status > 0,
|
||||
garbPendantImage: item.pendant?.image,
|
||||
officialType: item.official?.type,
|
||||
),
|
||||
title: Text(
|
||||
item.name!,
|
||||
style: TextStyle(
|
||||
fontSize: 14,
|
||||
color: item.vip?.status != null &&
|
||||
item.vip!.status > 0 &&
|
||||
item.vip?.type == 2
|
||||
? context.vipColor
|
||||
: null,
|
||||
Success(:var response) =>
|
||||
response?.isNotEmpty == true
|
||||
? Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Builder(
|
||||
builder: (context) {
|
||||
final ImUserInfosData item = response!.first;
|
||||
return ListTile(
|
||||
onTap: () => Get.toNamed('/member?mid=${item.mid}'),
|
||||
leading: PendantAvatar(
|
||||
avatar: item.face,
|
||||
size: 42,
|
||||
badgeSize: 14,
|
||||
isVip:
|
||||
item.vip?.status != null && item.vip!.status > 0,
|
||||
garbPendantImage: item.pendant?.image,
|
||||
officialType: item.official?.type,
|
||||
),
|
||||
),
|
||||
subtitle: Text(
|
||||
'UID: ${item.mid}${item.sign?.isNotEmpty == true ? '\n${item.sign}' : ''}',
|
||||
maxLines: 2,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
style: TextStyle(
|
||||
fontSize: 13,
|
||||
title: Text(
|
||||
item.name!,
|
||||
style: TextStyle(
|
||||
fontSize: 14,
|
||||
color:
|
||||
item.vip?.status != null &&
|
||||
item.vip!.status > 0 &&
|
||||
item.vip?.type == 2
|
||||
? context.vipColor
|
||||
: null,
|
||||
),
|
||||
),
|
||||
subtitle: Text(
|
||||
'UID: ${item.mid}${item.sign?.isNotEmpty == true ? '\n${item.sign}' : ''}',
|
||||
maxLines: 2,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
style: TextStyle(
|
||||
fontSize: 13,
|
||||
color: theme.colorScheme.outline,
|
||||
),
|
||||
),
|
||||
trailing: Icon(
|
||||
size: 22,
|
||||
Icons.keyboard_arrow_right,
|
||||
color: theme.colorScheme.outline,
|
||||
),
|
||||
),
|
||||
trailing: Icon(
|
||||
size: 22,
|
||||
Icons.keyboard_arrow_right,
|
||||
color: theme.colorScheme.outline,
|
||||
),
|
||||
);
|
||||
},
|
||||
),
|
||||
divider,
|
||||
],
|
||||
)
|
||||
: const SizedBox.shrink(),
|
||||
);
|
||||
},
|
||||
),
|
||||
divider,
|
||||
],
|
||||
)
|
||||
: const SizedBox.shrink(),
|
||||
Error(:var errMsg) => _errWidget(errMsg, _controller.getUserInfo),
|
||||
};
|
||||
}
|
||||
@@ -164,71 +179,75 @@ class _WhisperLinkSettingPageState extends State<WhisperLinkSettingPage> {
|
||||
return switch (loadingState) {
|
||||
Loading() => const SizedBox.shrink(),
|
||||
Success(:var response) => Builder(
|
||||
builder: (context) {
|
||||
late final subTitleS =
|
||||
TextStyle(fontSize: 13, color: theme.colorScheme.outline);
|
||||
return Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
if (response.showPushSetting == 1)
|
||||
ListTile(
|
||||
dense: true,
|
||||
onTap: () => _controller.setPush(response.pushSetting == 0),
|
||||
title: const Text('接收消息推送', style: TextStyle(fontSize: 14)),
|
||||
subtitle: Text(
|
||||
'若关闭此开关,你将不再收到该账号的图文消息与稿件推送,但通知类消息不受影响',
|
||||
style: subTitleS,
|
||||
),
|
||||
trailing: Transform.scale(
|
||||
alignment: Alignment.centerRight,
|
||||
scale: 0.8,
|
||||
child: Switch(
|
||||
thumbIcon: WidgetStateProperty.resolveWith<Icon?>(
|
||||
(Set<WidgetState> states) {
|
||||
if (states.isNotEmpty &&
|
||||
states.first == WidgetState.selected) {
|
||||
return const Icon(Icons.done);
|
||||
}
|
||||
return null;
|
||||
}),
|
||||
value: response.pushSetting == 0,
|
||||
onChanged: (value) =>
|
||||
_controller.setPush(response.pushSetting == 0),
|
||||
),
|
||||
),
|
||||
builder: (context) {
|
||||
late final subTitleS = TextStyle(
|
||||
fontSize: 13,
|
||||
color: theme.colorScheme.outline,
|
||||
);
|
||||
return Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
if (response.showPushSetting == 1)
|
||||
ListTile(
|
||||
dense: true,
|
||||
onTap: () => _controller.setPush(response.pushSetting == 0),
|
||||
title: const Text('接收消息推送', style: TextStyle(fontSize: 14)),
|
||||
subtitle: Text(
|
||||
'若关闭此开关,你将不再收到该账号的图文消息与稿件推送,但通知类消息不受影响',
|
||||
style: subTitleS,
|
||||
),
|
||||
divider2,
|
||||
Obx(
|
||||
() => ListTile(
|
||||
dense: true,
|
||||
onTap: _controller.setPin,
|
||||
title: const Text('置顶聊天', style: TextStyle(fontSize: 14)),
|
||||
trailing: Transform.scale(
|
||||
alignment: Alignment.centerRight,
|
||||
scale: 0.8,
|
||||
child: Switch(
|
||||
thumbIcon: WidgetStateProperty.resolveWith<Icon?>(
|
||||
(Set<WidgetState> states) {
|
||||
if (states.isNotEmpty &&
|
||||
states.first == WidgetState.selected) {
|
||||
return const Icon(Icons.done);
|
||||
}
|
||||
return null;
|
||||
}),
|
||||
value: _controller.isPinned.value,
|
||||
onChanged: (value) => _controller.setPin(),
|
||||
),
|
||||
trailing: Transform.scale(
|
||||
alignment: Alignment.centerRight,
|
||||
scale: 0.8,
|
||||
child: Switch(
|
||||
thumbIcon: WidgetStateProperty.resolveWith<Icon?>((
|
||||
Set<WidgetState> states,
|
||||
) {
|
||||
if (states.isNotEmpty &&
|
||||
states.first == WidgetState.selected) {
|
||||
return const Icon(Icons.done);
|
||||
}
|
||||
return null;
|
||||
}),
|
||||
value: response.pushSetting == 0,
|
||||
onChanged: (value) =>
|
||||
_controller.setPush(response.pushSetting == 0),
|
||||
),
|
||||
),
|
||||
),
|
||||
divider2,
|
||||
Obx(() => _buildMuteItem(_controller.msgDnd.value)),
|
||||
divider,
|
||||
],
|
||||
);
|
||||
},
|
||||
),
|
||||
divider2,
|
||||
Obx(
|
||||
() => ListTile(
|
||||
dense: true,
|
||||
onTap: _controller.setPin,
|
||||
title: const Text('置顶聊天', style: TextStyle(fontSize: 14)),
|
||||
trailing: Transform.scale(
|
||||
alignment: Alignment.centerRight,
|
||||
scale: 0.8,
|
||||
child: Switch(
|
||||
thumbIcon: WidgetStateProperty.resolveWith<Icon?>((
|
||||
Set<WidgetState> states,
|
||||
) {
|
||||
if (states.isNotEmpty &&
|
||||
states.first == WidgetState.selected) {
|
||||
return const Icon(Icons.done);
|
||||
}
|
||||
return null;
|
||||
}),
|
||||
value: _controller.isPinned.value,
|
||||
onChanged: (value) => _controller.setPin(),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
divider2,
|
||||
Obx(() => _buildMuteItem(_controller.msgDnd.value)),
|
||||
divider,
|
||||
],
|
||||
);
|
||||
},
|
||||
),
|
||||
Error(:var errMsg) => _errWidget(errMsg, _controller.getSessionSs),
|
||||
};
|
||||
}
|
||||
@@ -236,30 +255,32 @@ class _WhisperLinkSettingPageState extends State<WhisperLinkSettingPage> {
|
||||
Widget _buildMuteItem(LoadingState<List<UidSetting>?> loadingState) {
|
||||
return switch (loadingState) {
|
||||
Loading() => const SizedBox.shrink(),
|
||||
Success(:var response) => response?.isNotEmpty == true
|
||||
? ListTile(
|
||||
dense: true,
|
||||
onTap: () => _controller.setMute(response.first.setting == 1),
|
||||
title: const Text('消息免打扰', style: TextStyle(fontSize: 14)),
|
||||
trailing: Transform.scale(
|
||||
alignment: Alignment.centerRight,
|
||||
scale: 0.8,
|
||||
child: Switch(
|
||||
thumbIcon: WidgetStateProperty.resolveWith<Icon?>(
|
||||
(Set<WidgetState> states) {
|
||||
if (states.isNotEmpty &&
|
||||
states.first == WidgetState.selected) {
|
||||
return const Icon(Icons.done);
|
||||
}
|
||||
return null;
|
||||
}),
|
||||
value: response!.first.setting == 1,
|
||||
onChanged: (value) =>
|
||||
_controller.setMute(response.first.setting == 1),
|
||||
Success(:var response) =>
|
||||
response?.isNotEmpty == true
|
||||
? ListTile(
|
||||
dense: true,
|
||||
onTap: () => _controller.setMute(response.first.setting == 1),
|
||||
title: const Text('消息免打扰', style: TextStyle(fontSize: 14)),
|
||||
trailing: Transform.scale(
|
||||
alignment: Alignment.centerRight,
|
||||
scale: 0.8,
|
||||
child: Switch(
|
||||
thumbIcon: WidgetStateProperty.resolveWith<Icon?>((
|
||||
Set<WidgetState> states,
|
||||
) {
|
||||
if (states.isNotEmpty &&
|
||||
states.first == WidgetState.selected) {
|
||||
return const Icon(Icons.done);
|
||||
}
|
||||
return null;
|
||||
}),
|
||||
value: response!.first.setting == 1,
|
||||
onChanged: (value) =>
|
||||
_controller.setMute(response.first.setting == 1),
|
||||
),
|
||||
),
|
||||
),
|
||||
)
|
||||
: const SizedBox.shrink(),
|
||||
)
|
||||
: const SizedBox.shrink(),
|
||||
Error(:var errMsg) => _errWidget(errMsg, _controller.getMsgDnd),
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user