fix: default avatar url

This commit is contained in:
xkeyC 2025-11-25 19:39:50 +08:00
parent 825b399ab1
commit 3c07d12ee9
4 changed files with 24 additions and 7 deletions

View File

@ -1,5 +1,6 @@
import 'package:fixnum/fixnum.dart';
import 'package:intl/intl.dart';
import 'package:starcitizen_doctor/common/conf/url_conf.dart';
class PartyRoomUtils {
static final DateFormat dateTimeFormatter = DateFormat('yyyy-MM-dd HH:mm:ss');
@ -19,4 +20,20 @@ class PartyRoomUtils {
}
return dateTimeFormatter.format(dateTime);
}
/// avatarUrl
/// http/https 使
static String? getAvatarUrl(String? avatarUrl) {
if (avatarUrl == null || avatarUrl.isEmpty) {
return null;
}
// URL
if (avatarUrl.startsWith('http://') || avatarUrl.startsWith('https://')) {
return avatarUrl;
}
// 使 RSI URL
return '${URLConf.rsiAvatarBaseUrl}$avatarUrl';
}
}

View File

@ -1,9 +1,9 @@
import 'package:fluent_ui/fluent_ui.dart';
import 'package:flutter/services.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:starcitizen_doctor/common/conf/url_conf.dart';
import 'package:starcitizen_doctor/generated/proto/partroom/partroom.pb.dart';
import 'package:starcitizen_doctor/provider/party_room.dart';
import 'package:starcitizen_doctor/ui/party_room/utils/party_room_utils.dart';
import 'package:starcitizen_doctor/widgets/src/cache_image.dart';
///
@ -43,7 +43,7 @@ class PartyRoomMemberItem extends ConsumerWidget {
@override
Widget build(BuildContext context, WidgetRef ref) {
final avatarUrl = member.avatarUrl.isNotEmpty ? '${URLConf.rsiAvatarBaseUrl}${member.avatarUrl}' : null;
final avatarUrl = PartyRoomUtils.getAvatarUrl(member.avatarUrl);
final partyRoomState = ref.watch(partyRoomProvider);
final currentUserId = partyRoomState.auth.userInfo?.gameUserId ?? '';
final isSelf = member.gameUserId == currentUserId;

View File

@ -1,9 +1,9 @@
import 'package:fluent_ui/fluent_ui.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:starcitizen_doctor/common/conf/url_conf.dart';
import 'package:starcitizen_doctor/generated/proto/partroom/partroom.pb.dart' as partroom;
import 'package:starcitizen_doctor/provider/party_room.dart';
import 'package:starcitizen_doctor/ui/party_room/utils/party_room_utils.dart';
import 'package:starcitizen_doctor/widgets/src/cache_image.dart';
import 'package:url_launcher/url_launcher_string.dart';
import 'package:flutter/services.dart';
@ -388,7 +388,7 @@ class _MessageItem extends ConsumerWidget {
event.type == partroom.RoomEventType.MEMBER_KICKED ||
event.type == partroom.RoomEventType.OWNER_CHANGED) {
if (event.hasMember() && event.member.avatarUrl.isNotEmpty) {
return '${URLConf.rsiAvatarBaseUrl}${event.member.avatarUrl}';
return PartyRoomUtils.getAvatarUrl(event.member.avatarUrl);
}
}
return null;

View File

@ -8,10 +8,10 @@ import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart';
import 'package:flutter_tilt/flutter_tilt.dart';
import 'package:hexcolor/hexcolor.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:starcitizen_doctor/common/conf/url_conf.dart';
import 'package:starcitizen_doctor/generated/proto/partroom/partroom.pb.dart';
import 'package:starcitizen_doctor/provider/party_room.dart';
import 'package:starcitizen_doctor/ui/party_room/party_room_ui_model.dart';
import 'package:starcitizen_doctor/ui/party_room/utils/party_room_utils.dart';
import 'package:starcitizen_doctor/ui/party_room/widgets/create_room_dialog.dart';
import 'package:starcitizen_doctor/widgets/widgets.dart';
@ -132,7 +132,7 @@ class PartyRoomListPage extends HookConsumerWidget {
(m) => m.gameUserId == currentRoom.ownerGameId,
orElse: () => RoomMember(),
);
final avatarUrl = owner.avatarUrl.isNotEmpty ? '${URLConf.rsiAvatarBaseUrl}${owner.avatarUrl}' : '';
final avatarUrl = PartyRoomUtils.getAvatarUrl(owner.avatarUrl) ?? '';
return Bounce(
duration: Duration(milliseconds: 230),
@ -276,7 +276,7 @@ class PartyRoomListPage extends HookConsumerWidget {
}
Widget _buildRoomCard(BuildContext context, WidgetRef ref, PartyRoom partyRoom, RoomListItem room, int index) {
final avatarUrl = room.ownerAvatar.isNotEmpty ? '${URLConf.rsiAvatarBaseUrl}${room.ownerAvatar}' : '';
final avatarUrl = PartyRoomUtils.getAvatarUrl(room.ownerAvatar) ?? '';
final partyRoomState = ref.watch(partyRoomProvider);
final isCurrentRoom = partyRoomState.room.isInRoom && partyRoomState.room.roomUuid == room.roomUuid;
return GridItemAnimator(