fix(mobile-next): 按 B-91 收口 Android 通话视觉打回项

呼出/通话中按钮、计时器、底色、60s 未接与进出场动效对齐视觉规范。

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: multica-agent <github@multica.ai>
This commit is contained in:
编码工程师
2026-08-20 09:58:28 +08:00
co-authored by Cursor multica-agent
parent 714794f7fe
commit 9bde926c81
20 changed files with 640 additions and 210 deletions
@@ -425,18 +425,23 @@ const Map<String, String> en_US = {
"outgoingCall": "Outgoing",
"microphone": "Microphone",
"speaker": "Speaker",
"callMute": "Mute",
"callHandsFree": "Speaker",
"callEnded": "Call ended",
"callNetworkInterrupted": "Network error, call interrupted",
"unansweredCall": "Missed call",
"hangUp": "Hang Up",
"pickUp": "Pick Up",
"waitingCallHint": "Calling...",
"waitingVoiceCallHint": "Waiting for the other party to pick up...",
"invitedVoiceCallHint": "Inviting you for a voice call...",
"waitingVoiceCallHint": "Waiting for the other party to accept the invitation...",
"invitedVoiceCallHint": "Inviting you to a voice call",
"waitingVideoCallHint": "Waiting for the other party to accept the invitation",
"invitedVideoCallHint": "Inviting you for a video call...",
"waitingToAnswer": "Waiting to answer",
"invitedYouToCall": "Invited you to a call",
"calling": "Calling...",
"nPeopleCalling": "%s people on the call",
'busyVideoCallHint': 'A user is busy and cannot receive your invitation',
'busyVideoCallHint': 'The other party is busy and cannot receive the invitation',
'inviterBusyVideoCallHint': 'You are in another call and cannot send an invitation',
"whoInvitedVoiceCallHint": "%s invited you for a voice call",
"whoInvitedVideoCallHint": "%s invited you for a video call",
@@ -427,18 +427,23 @@ const Map<String, String> zh_CN = {
"outgoingCall": "呼出",
"microphone": "麦克风",
"speaker": "扬声器",
"callMute": "静音",
"callHandsFree": "免提",
"callEnded": "通话已结束",
"callNetworkInterrupted": "网络异常,通话中断",
"unansweredCall": "未接通话",
"hangUp": "挂断",
"pickUp": "接听",
"waitingCallHint": "正在呼叫中…",
"waitingVoiceCallHint": "正在等待对方接",
"invitedVoiceCallHint": "邀请你进行语音通话",
"waitingVoiceCallHint": "正在等待对方接受邀请",
"invitedVoiceCallHint": "邀请你语音通话",
"waitingVideoCallHint": "正在等待对方接受邀请",
"invitedVideoCallHint": "邀请你进行视频通话…",
"waitingToAnswer": "等待接听",
"invitedYouToCall": "邀请你通话",
"calling": "通话中",
"nPeopleCalling": "%s人正在通话中",
'busyVideoCallHint': '有用户正忙,无法接收到你的邀请',
'busyVideoCallHint': '对方正忙,无法接收邀请',
'inviterBusyVideoCallHint': '你在其它通话中,无法发起邀请',
"whoInvitedVoiceCallHint": "%s邀请你进行语音通话",
"whoInvitedVideoCallHint": "%s邀请你进行视频通话",
@@ -874,6 +874,16 @@ class StrRes {
static String get speaker => 'speaker'.tr;
static String get callMute => 'callMute'.tr;
static String get callHandsFree => 'callHandsFree'.tr;
static String get callEnded => 'callEnded'.tr;
static String get callNetworkInterrupted => 'callNetworkInterrupted'.tr;
static String get unansweredCall => 'unansweredCall'.tr;
static String get hangUp => 'hangUp'.tr;
static String get pickUp => 'pickUp'.tr;
@@ -1,3 +1,5 @@
import 'dart:ui' show FontFeature;
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
@@ -17,6 +19,35 @@ class Styles {
static Duration durationOverlay = const Duration(milliseconds: 150);
static Duration durationOverlaySwitch = const Duration(milliseconds: 100);
static Duration callPageMotion = const Duration(milliseconds: 250);
static Duration callEndHold = const Duration(milliseconds: 1500);
static Duration callInviteTimeout = const Duration(seconds: 60);
static Duration callVibrate = const Duration(seconds: 1);
static Color c_callBg = const Color(0xFF1D2129);
static Color c_callSecondaryBg = c_FFFFFF.withOpacity(.12);
static double callNameTop = 96;
static double callAvatar = 96;
static double callPrimaryBtn = 64;
static double callSecondaryBtn = 48;
static double callIncomingGap = 96;
static double callMinimizeHit = 48;
static double callIconSize = 24;
static TextStyle ts_callName = TextStyle(
color: c_FFFFFF,
fontSize: 18.sp,
fontWeight: FontWeight.w500,
);
static TextStyle ts_callStatus = TextStyle(
color: c_FFFFFF.withOpacity(.6),
fontSize: 14.sp,
);
static TextStyle ts_callTimer = TextStyle(
color: c_FFFFFF,
fontSize: 32.sp,
fontFeatures: const [FontFeature.tabularFigures()],
);
static bool Function(BuildContext) reduceMotion =
(BuildContext context) => MediaQuery.maybeOf(context)?.disableAnimations ?? false;
@@ -939,7 +939,7 @@ class IMUtils {
content = StrRes.rejectedByCaller;
break;
case 'timeout':
content = StrRes.callTimeout;
content = StrRes.unansweredCall;
break;
case 'networkError':
content = StrRes.networkAnomaly;