feat(mobile-next): 通讯录按部门分组并补齐职务行与申请窄屏
Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: multica-agent <github@multica.ai>
This commit is contained in:
co-authored by
Cursor
multica-agent
parent
7f131457f7
commit
49b346d375
@@ -34,19 +34,111 @@ class FriendRequestsPage extends StatelessWidget {
|
||||
return ListView.builder(
|
||||
itemCount: logic.applicationList.length,
|
||||
itemBuilder: (_, index) =>
|
||||
_buildItemView(logic.applicationList[index]),
|
||||
_buildItemView(context, logic.applicationList[index]),
|
||||
);
|
||||
}),
|
||||
);
|
||||
}
|
||||
|
||||
Widget _buildItemView(FriendApplicationInfo info) {
|
||||
Widget _buildItemView(BuildContext context, FriendApplicationInfo info) {
|
||||
final isISendRequest = info.fromUserID == OpenIM.iMManager.userID;
|
||||
final name = isISendRequest ? info.toNickname : info.fromNickname;
|
||||
final faceURL = isISendRequest ? info.toFaceURL : info.fromFaceURL;
|
||||
final waiting = info.isWaitingHandle;
|
||||
final rejected = info.isRejected;
|
||||
final agreed = info.isAgreed;
|
||||
final narrow = MediaQuery.sizeOf(context).width < 360;
|
||||
final pendingActions = waiting && !isISendRequest;
|
||||
final stacked = narrow && pendingActions;
|
||||
|
||||
Widget status;
|
||||
if (waiting && isISendRequest) {
|
||||
status = const Text('等待对方通过',
|
||||
style: TextStyle(
|
||||
fontSize: AppFont.sub, color: AppColors.textSecondary));
|
||||
} else if (pendingActions) {
|
||||
status = SizedBox(
|
||||
width: 132,
|
||||
child: Row(
|
||||
children: [
|
||||
Expanded(
|
||||
child: OutlinedButton(
|
||||
onPressed: () => logic.refuseFriendApplication(info),
|
||||
style: OutlinedButton.styleFrom(
|
||||
minimumSize: const Size(0, 32),
|
||||
padding: EdgeInsets.zero,
|
||||
side: const BorderSide(
|
||||
color: AppColors.textSecondary, width: 0.5),
|
||||
foregroundColor: AppColors.textPrimary,
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius:
|
||||
BorderRadius.circular(AppRadius.control)),
|
||||
),
|
||||
child: const Text('拒绝',
|
||||
style: TextStyle(fontSize: AppFont.sub)),
|
||||
),
|
||||
),
|
||||
const SizedBox(width: AppGap.x2),
|
||||
Expanded(
|
||||
child: FilledButton(
|
||||
onPressed: () => logic.acceptFriendApplication(info),
|
||||
style: FilledButton.styleFrom(
|
||||
minimumSize: const Size(0, 32),
|
||||
padding: EdgeInsets.zero,
|
||||
backgroundColor: AppColors.primary,
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius:
|
||||
BorderRadius.circular(AppRadius.control)),
|
||||
),
|
||||
child: const Text('接受',
|
||||
style: TextStyle(
|
||||
fontSize: AppFont.sub, color: Colors.white)),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
} else if (agreed) {
|
||||
status = const Text('已添加',
|
||||
style: TextStyle(
|
||||
fontSize: AppFont.sub, color: AppColors.textSecondary));
|
||||
} else if (rejected) {
|
||||
status = const Text('已拒绝',
|
||||
style: TextStyle(
|
||||
fontSize: AppFont.sub, color: AppColors.textSecondary));
|
||||
} else {
|
||||
status = const SizedBox.shrink();
|
||||
}
|
||||
|
||||
final identity = Row(
|
||||
children: [
|
||||
AvatarView(url: faceURL, text: name, width: 48, height: 48),
|
||||
const SizedBox(width: AppGap.x3),
|
||||
Expanded(
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
Text(
|
||||
name ?? '',
|
||||
maxLines: 1,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
style: const TextStyle(
|
||||
fontSize: AppFont.body, color: AppColors.textPrimary),
|
||||
),
|
||||
if (IMUtils.isNotNullEmptyStr(info.reqMsg))
|
||||
Text(
|
||||
info.reqMsg ?? '',
|
||||
maxLines: 1,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
style: const TextStyle(
|
||||
fontSize: AppFont.sub, color: AppColors.textSecondary),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
);
|
||||
|
||||
return Container(
|
||||
constraints: const BoxConstraints(minHeight: 72),
|
||||
@@ -57,90 +149,22 @@ class FriendRequestsPage extends StatelessWidget {
|
||||
border:
|
||||
Border(bottom: BorderSide(color: AppColors.divider, width: 0.5)),
|
||||
),
|
||||
child: Row(
|
||||
children: [
|
||||
AvatarView(url: faceURL, text: name, width: 48, height: 48),
|
||||
const SizedBox(width: AppGap.x3),
|
||||
Expanded(
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
child: stacked
|
||||
? Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.stretch,
|
||||
children: [
|
||||
Text(
|
||||
name ?? '',
|
||||
maxLines: 1,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
style: const TextStyle(
|
||||
fontSize: AppFont.body, color: AppColors.textPrimary),
|
||||
),
|
||||
if (IMUtils.isNotNullEmptyStr(info.reqMsg))
|
||||
Text(
|
||||
info.reqMsg ?? '',
|
||||
maxLines: 1,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
style: const TextStyle(
|
||||
fontSize: AppFont.sub, color: AppColors.textSecondary),
|
||||
),
|
||||
identity,
|
||||
const SizedBox(height: AppGap.x2),
|
||||
Align(alignment: Alignment.centerRight, child: status),
|
||||
],
|
||||
)
|
||||
: Row(
|
||||
children: [
|
||||
Expanded(child: identity),
|
||||
const SizedBox(width: AppGap.x2),
|
||||
status,
|
||||
],
|
||||
),
|
||||
),
|
||||
const SizedBox(width: AppGap.x2),
|
||||
if (waiting && isISendRequest)
|
||||
const Text('等待对方通过',
|
||||
style: TextStyle(
|
||||
fontSize: AppFont.sub, color: AppColors.textSecondary)),
|
||||
if (waiting && !isISendRequest)
|
||||
SizedBox(
|
||||
width: 132,
|
||||
child: Row(
|
||||
children: [
|
||||
Expanded(
|
||||
child: OutlinedButton(
|
||||
onPressed: () => logic.refuseFriendApplication(info),
|
||||
style: OutlinedButton.styleFrom(
|
||||
minimumSize: const Size(0, 32),
|
||||
padding: EdgeInsets.zero,
|
||||
side: const BorderSide(
|
||||
color: AppColors.textSecondary, width: 0.5),
|
||||
foregroundColor: AppColors.textPrimary,
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius:
|
||||
BorderRadius.circular(AppRadius.control)),
|
||||
),
|
||||
child: const Text('拒绝',
|
||||
style: TextStyle(fontSize: AppFont.sub)),
|
||||
),
|
||||
),
|
||||
const SizedBox(width: AppGap.x2),
|
||||
Expanded(
|
||||
child: FilledButton(
|
||||
onPressed: () => logic.acceptFriendApplication(info),
|
||||
style: FilledButton.styleFrom(
|
||||
minimumSize: const Size(0, 32),
|
||||
padding: EdgeInsets.zero,
|
||||
backgroundColor: AppColors.primary,
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius:
|
||||
BorderRadius.circular(AppRadius.control)),
|
||||
),
|
||||
child: const Text('接受',
|
||||
style: TextStyle(
|
||||
fontSize: AppFont.sub, color: Colors.white)),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
if (agreed)
|
||||
const Text('已添加',
|
||||
style: TextStyle(
|
||||
fontSize: AppFont.sub, color: AppColors.textSecondary)),
|
||||
if (rejected)
|
||||
const Text('已拒绝',
|
||||
style: TextStyle(
|
||||
fontSize: AppFont.sub, color: AppColors.textSecondary)),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user