fix(c2c): 修复 RangeError 崩溃及订单详情灰色页面问题
根因:多处 [0] 访问空列表/空字符串导致 RangeError 崩溃 - api_client.dart: 后端错误 message 为空数组时 ?[0] 崩溃,改为安全检查 - c2c_order_detail_page.dart: nickname 和 phone 均为 null 时 name[0] 崩溃, 添加 isNotEmpty 检查和 '未知用户' 回退 - c2c_market_page.dart: makerNickname 为空字符串时 [0] 崩溃,添加 isNotEmpty 检查 这是 C2C 买方"待付款灰色页面"的根本原因:页面在渲染交易双方信息时 因空用户名 RangeError 崩溃,导致整个页面无法显示 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
8e63547a3e
commit
286b82c63b
|
|
@ -137,7 +137,8 @@ class ApiClient {
|
|||
if (statusCode == 401) {
|
||||
return UnauthorizedException();
|
||||
}
|
||||
final message = e.response?.data?['error']?['message']?[0] ?? '服务器错误';
|
||||
final messages = e.response?.data?['error']?['message'];
|
||||
final message = (messages is List && messages.isNotEmpty) ? messages[0].toString() : '服务器错误';
|
||||
return ServerException(message, statusCode: statusCode);
|
||||
default:
|
||||
return ServerException(e.message ?? '未知错误');
|
||||
|
|
|
|||
|
|
@ -314,7 +314,7 @@ class _C2cMarketPageState extends ConsumerState<C2cMarketPage>
|
|||
),
|
||||
child: Center(
|
||||
child: Text(
|
||||
(order.makerNickname ?? order.makerPhone ?? 'U')[0].toUpperCase(),
|
||||
((order.makerNickname?.isNotEmpty == true ? order.makerNickname : null) ?? (order.makerPhone?.isNotEmpty == true ? order.makerPhone : null) ?? 'U')[0].toUpperCase(),
|
||||
style: TextStyle(
|
||||
fontSize: 18,
|
||||
fontWeight: FontWeight.bold,
|
||||
|
|
|
|||
|
|
@ -754,7 +754,9 @@ class _C2cOrderDetailPageState extends ConsumerState<C2cOrderDetailPage> {
|
|||
// 发布方
|
||||
_buildParticipantRow(
|
||||
label: order.isBuy ? '买方 (发布者)' : '卖方 (发布者)',
|
||||
name: order.makerNickname ?? _maskPhone(order.makerPhone ?? ''),
|
||||
name: order.makerNickname?.isNotEmpty == true
|
||||
? order.makerNickname!
|
||||
: (order.makerPhone?.isNotEmpty == true ? _maskPhone(order.makerPhone!) : '未知用户'),
|
||||
isMe: isMaker,
|
||||
),
|
||||
const Divider(height: 24),
|
||||
|
|
@ -762,7 +764,9 @@ class _C2cOrderDetailPageState extends ConsumerState<C2cOrderDetailPage> {
|
|||
if (order.takerAccountSequence != null)
|
||||
_buildParticipantRow(
|
||||
label: order.isBuy ? '卖方 (接单者)' : '买方 (接单者)',
|
||||
name: order.takerNickname ?? _maskPhone(order.takerPhone ?? ''),
|
||||
name: order.takerNickname?.isNotEmpty == true
|
||||
? order.takerNickname!
|
||||
: (order.takerPhone?.isNotEmpty == true ? _maskPhone(order.takerPhone!) : '未知用户'),
|
||||
isMe: isTaker,
|
||||
)
|
||||
else
|
||||
|
|
@ -791,7 +795,7 @@ class _C2cOrderDetailPageState extends ConsumerState<C2cOrderDetailPage> {
|
|||
),
|
||||
child: Center(
|
||||
child: Text(
|
||||
name[0].toUpperCase(),
|
||||
name.isNotEmpty ? name[0].toUpperCase() : 'U',
|
||||
style: TextStyle(
|
||||
fontSize: 18,
|
||||
fontWeight: FontWeight.bold,
|
||||
|
|
|
|||
Loading…
Reference in New Issue