mirror of
https://github.com/StarCitizenToolBox/app.git
synced 2026-02-11 17:50:23 +00:00
feat: update UI
This commit is contained in:
@@ -33,8 +33,8 @@ sealed class PartyRoomState with _$PartyRoomState {
|
||||
const factory PartyRoomState({
|
||||
partroom.RoomInfo? currentRoom,
|
||||
@Default([]) List<partroom.RoomMember> members,
|
||||
@Default([]) List<common.Tag> tags,
|
||||
@Default([]) List<common.SignalType> signalTypes,
|
||||
@Default({}) Map<String, common.Tag> tags,
|
||||
@Default({}) Map<String, common.SignalType> signalTypes,
|
||||
@Default(false) bool isInRoom,
|
||||
@Default(false) bool isOwner,
|
||||
String? roomUuid,
|
||||
@@ -249,10 +249,9 @@ class PartyRoom extends _$PartyRoom {
|
||||
// 清除本地认证信息
|
||||
await _confBox?.delete(_secretKeyKey);
|
||||
|
||||
state = state.copyWith(
|
||||
auth: state.auth.copyWith(secretKey: '', isLoggedIn: false, userInfo: null),
|
||||
room: const PartyRoomState(),
|
||||
);
|
||||
_dismissRoom();
|
||||
|
||||
state = state.copyWith(auth: state.auth.copyWith(secretKey: '', isLoggedIn: false, userInfo: null));
|
||||
|
||||
dPrint('[PartyRoom] Unregistered successfully');
|
||||
} catch (e) {
|
||||
@@ -273,13 +272,15 @@ class PartyRoom extends _$PartyRoom {
|
||||
final response = await commonClient.getTags(common.GetTagsRequest());
|
||||
final signalTypesResponse = await commonClient.getSignalTypes(common.GetSignalTypesRequest());
|
||||
|
||||
// 转换为 Map
|
||||
final tagsMap = {for (var tag in response.tags) tag.id: tag};
|
||||
final signalTypesMap = {for (var signal in signalTypesResponse.signals) signal.id: signal};
|
||||
|
||||
state = state.copyWith(
|
||||
room: state.room.copyWith(tags: response.tags, signalTypes: signalTypesResponse.signals),
|
||||
room: state.room.copyWith(tags: tagsMap, signalTypes: signalTypesMap),
|
||||
);
|
||||
|
||||
dPrint(
|
||||
'[PartyRoom] Tags and SignalTypes loaded: ${response.tags.length} tags, ${signalTypesResponse.signals.length} signal types',
|
||||
);
|
||||
dPrint('[PartyRoom] Tags and SignalTypes loaded: ${tagsMap.length} tags, ${signalTypesMap.length} signal types');
|
||||
} catch (e) {
|
||||
dPrint('[PartyRoom] LoadTags error: $e');
|
||||
rethrow;
|
||||
@@ -397,7 +398,7 @@ class PartyRoom extends _$PartyRoom {
|
||||
await _stopHeartbeat();
|
||||
await _stopEventStream();
|
||||
|
||||
state = state.copyWith(room: const PartyRoomState());
|
||||
_dismissRoom();
|
||||
|
||||
dPrint('[PartyRoom] Left room: $roomUuid');
|
||||
} catch (e) {
|
||||
@@ -420,7 +421,7 @@ class PartyRoom extends _$PartyRoom {
|
||||
await _stopHeartbeat();
|
||||
await _stopEventStream();
|
||||
|
||||
state = state.copyWith(room: const PartyRoomState());
|
||||
_dismissRoom();
|
||||
|
||||
dPrint('[PartyRoom] Dismissed room: $roomUuid');
|
||||
} catch (e) {
|
||||
@@ -616,9 +617,8 @@ class PartyRoom extends _$PartyRoom {
|
||||
if (roomUuid == null) return;
|
||||
|
||||
// 验证信号类型是否有效
|
||||
final validSignalIds = state.room.signalTypes.map((s) => s.id).toList();
|
||||
if (validSignalIds.isNotEmpty && !validSignalIds.contains(signalId)) {
|
||||
throw Exception('Invalid signal ID: $signalId. Valid IDs: ${validSignalIds.join(", ")}');
|
||||
if (state.room.signalTypes.isNotEmpty && !state.room.signalTypes.containsKey(signalId)) {
|
||||
throw Exception('Invalid signal ID: $signalId. Valid IDs: ${state.room.signalTypes.keys.join(", ")}');
|
||||
}
|
||||
|
||||
final request = partroom.SendSignalRequest(roomUuid: roomUuid, signalId: signalId);
|
||||
@@ -822,7 +822,7 @@ class PartyRoom extends _$PartyRoom {
|
||||
// 房间被解散
|
||||
_stopHeartbeat();
|
||||
_stopEventStream();
|
||||
state = state.copyWith(room: const PartyRoomState());
|
||||
_dismissRoom();
|
||||
break;
|
||||
|
||||
case partroom.RoomEventType.SIGNAL_BROADCAST:
|
||||
@@ -877,6 +877,13 @@ class PartyRoom extends _$PartyRoom {
|
||||
|
||||
// ========== 清理 ==========
|
||||
|
||||
/// 重置房间状态(保留 tags 和 signalTypes)
|
||||
void _dismissRoom() {
|
||||
state = state.copyWith(
|
||||
room: PartyRoomState(tags: state.room.tags, signalTypes: state.room.signalTypes),
|
||||
);
|
||||
}
|
||||
|
||||
void _cleanup() {
|
||||
_stopHeartbeat();
|
||||
_stopEventStream();
|
||||
|
||||
@@ -277,7 +277,7 @@ as DateTime?,
|
||||
/// @nodoc
|
||||
mixin _$PartyRoomState {
|
||||
|
||||
partroom.RoomInfo? get currentRoom; List<partroom.RoomMember> get members; List<common.Tag> get tags; List<common.SignalType> get signalTypes; bool get isInRoom; bool get isOwner; String? get roomUuid; List<partroom.RoomEvent> get recentEvents;
|
||||
partroom.RoomInfo? get currentRoom; List<partroom.RoomMember> get members; Map<String, common.Tag> get tags; Map<String, common.SignalType> get signalTypes; bool get isInRoom; bool get isOwner; String? get roomUuid; List<partroom.RoomEvent> get recentEvents;
|
||||
/// Create a copy of PartyRoomState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@@ -308,7 +308,7 @@ abstract mixin class $PartyRoomStateCopyWith<$Res> {
|
||||
factory $PartyRoomStateCopyWith(PartyRoomState value, $Res Function(PartyRoomState) _then) = _$PartyRoomStateCopyWithImpl;
|
||||
@useResult
|
||||
$Res call({
|
||||
partroom.RoomInfo? currentRoom, List<partroom.RoomMember> members, List<common.Tag> tags, List<common.SignalType> signalTypes, bool isInRoom, bool isOwner, String? roomUuid, List<partroom.RoomEvent> recentEvents
|
||||
partroom.RoomInfo? currentRoom, List<partroom.RoomMember> members, Map<String, common.Tag> tags, Map<String, common.SignalType> signalTypes, bool isInRoom, bool isOwner, String? roomUuid, List<partroom.RoomEvent> recentEvents
|
||||
});
|
||||
|
||||
|
||||
@@ -330,8 +330,8 @@ class _$PartyRoomStateCopyWithImpl<$Res>
|
||||
currentRoom: freezed == currentRoom ? _self.currentRoom : currentRoom // ignore: cast_nullable_to_non_nullable
|
||||
as partroom.RoomInfo?,members: null == members ? _self.members : members // ignore: cast_nullable_to_non_nullable
|
||||
as List<partroom.RoomMember>,tags: null == tags ? _self.tags : tags // ignore: cast_nullable_to_non_nullable
|
||||
as List<common.Tag>,signalTypes: null == signalTypes ? _self.signalTypes : signalTypes // ignore: cast_nullable_to_non_nullable
|
||||
as List<common.SignalType>,isInRoom: null == isInRoom ? _self.isInRoom : isInRoom // ignore: cast_nullable_to_non_nullable
|
||||
as Map<String, common.Tag>,signalTypes: null == signalTypes ? _self.signalTypes : signalTypes // ignore: cast_nullable_to_non_nullable
|
||||
as Map<String, common.SignalType>,isInRoom: null == isInRoom ? _self.isInRoom : isInRoom // ignore: cast_nullable_to_non_nullable
|
||||
as bool,isOwner: null == isOwner ? _self.isOwner : isOwner // ignore: cast_nullable_to_non_nullable
|
||||
as bool,roomUuid: freezed == roomUuid ? _self.roomUuid : roomUuid // ignore: cast_nullable_to_non_nullable
|
||||
as String?,recentEvents: null == recentEvents ? _self.recentEvents : recentEvents // ignore: cast_nullable_to_non_nullable
|
||||
@@ -417,7 +417,7 @@ return $default(_that);case _:
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( partroom.RoomInfo? currentRoom, List<partroom.RoomMember> members, List<common.Tag> tags, List<common.SignalType> signalTypes, bool isInRoom, bool isOwner, String? roomUuid, List<partroom.RoomEvent> recentEvents)? $default,{required TResult orElse(),}) {final _that = this;
|
||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( partroom.RoomInfo? currentRoom, List<partroom.RoomMember> members, Map<String, common.Tag> tags, Map<String, common.SignalType> signalTypes, bool isInRoom, bool isOwner, String? roomUuid, List<partroom.RoomEvent> recentEvents)? $default,{required TResult orElse(),}) {final _that = this;
|
||||
switch (_that) {
|
||||
case _PartyRoomState() when $default != null:
|
||||
return $default(_that.currentRoom,_that.members,_that.tags,_that.signalTypes,_that.isInRoom,_that.isOwner,_that.roomUuid,_that.recentEvents);case _:
|
||||
@@ -438,7 +438,7 @@ return $default(_that.currentRoom,_that.members,_that.tags,_that.signalTypes,_th
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( partroom.RoomInfo? currentRoom, List<partroom.RoomMember> members, List<common.Tag> tags, List<common.SignalType> signalTypes, bool isInRoom, bool isOwner, String? roomUuid, List<partroom.RoomEvent> recentEvents) $default,) {final _that = this;
|
||||
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( partroom.RoomInfo? currentRoom, List<partroom.RoomMember> members, Map<String, common.Tag> tags, Map<String, common.SignalType> signalTypes, bool isInRoom, bool isOwner, String? roomUuid, List<partroom.RoomEvent> recentEvents) $default,) {final _that = this;
|
||||
switch (_that) {
|
||||
case _PartyRoomState():
|
||||
return $default(_that.currentRoom,_that.members,_that.tags,_that.signalTypes,_that.isInRoom,_that.isOwner,_that.roomUuid,_that.recentEvents);}
|
||||
@@ -455,7 +455,7 @@ return $default(_that.currentRoom,_that.members,_that.tags,_that.signalTypes,_th
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( partroom.RoomInfo? currentRoom, List<partroom.RoomMember> members, List<common.Tag> tags, List<common.SignalType> signalTypes, bool isInRoom, bool isOwner, String? roomUuid, List<partroom.RoomEvent> recentEvents)? $default,) {final _that = this;
|
||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( partroom.RoomInfo? currentRoom, List<partroom.RoomMember> members, Map<String, common.Tag> tags, Map<String, common.SignalType> signalTypes, bool isInRoom, bool isOwner, String? roomUuid, List<partroom.RoomEvent> recentEvents)? $default,) {final _that = this;
|
||||
switch (_that) {
|
||||
case _PartyRoomState() when $default != null:
|
||||
return $default(_that.currentRoom,_that.members,_that.tags,_that.signalTypes,_that.isInRoom,_that.isOwner,_that.roomUuid,_that.recentEvents);case _:
|
||||
@@ -470,7 +470,7 @@ return $default(_that.currentRoom,_that.members,_that.tags,_that.signalTypes,_th
|
||||
|
||||
|
||||
class _PartyRoomState implements PartyRoomState {
|
||||
const _PartyRoomState({this.currentRoom, final List<partroom.RoomMember> members = const [], final List<common.Tag> tags = const [], final List<common.SignalType> signalTypes = const [], this.isInRoom = false, this.isOwner = false, this.roomUuid, final List<partroom.RoomEvent> recentEvents = const []}): _members = members,_tags = tags,_signalTypes = signalTypes,_recentEvents = recentEvents;
|
||||
const _PartyRoomState({this.currentRoom, final List<partroom.RoomMember> members = const [], final Map<String, common.Tag> tags = const {}, final Map<String, common.SignalType> signalTypes = const {}, this.isInRoom = false, this.isOwner = false, this.roomUuid, final List<partroom.RoomEvent> recentEvents = const []}): _members = members,_tags = tags,_signalTypes = signalTypes,_recentEvents = recentEvents;
|
||||
|
||||
|
||||
@override final partroom.RoomInfo? currentRoom;
|
||||
@@ -481,18 +481,18 @@ class _PartyRoomState implements PartyRoomState {
|
||||
return EqualUnmodifiableListView(_members);
|
||||
}
|
||||
|
||||
final List<common.Tag> _tags;
|
||||
@override@JsonKey() List<common.Tag> get tags {
|
||||
if (_tags is EqualUnmodifiableListView) return _tags;
|
||||
final Map<String, common.Tag> _tags;
|
||||
@override@JsonKey() Map<String, common.Tag> get tags {
|
||||
if (_tags is EqualUnmodifiableMapView) return _tags;
|
||||
// ignore: implicit_dynamic_type
|
||||
return EqualUnmodifiableListView(_tags);
|
||||
return EqualUnmodifiableMapView(_tags);
|
||||
}
|
||||
|
||||
final List<common.SignalType> _signalTypes;
|
||||
@override@JsonKey() List<common.SignalType> get signalTypes {
|
||||
if (_signalTypes is EqualUnmodifiableListView) return _signalTypes;
|
||||
final Map<String, common.SignalType> _signalTypes;
|
||||
@override@JsonKey() Map<String, common.SignalType> get signalTypes {
|
||||
if (_signalTypes is EqualUnmodifiableMapView) return _signalTypes;
|
||||
// ignore: implicit_dynamic_type
|
||||
return EqualUnmodifiableListView(_signalTypes);
|
||||
return EqualUnmodifiableMapView(_signalTypes);
|
||||
}
|
||||
|
||||
@override@JsonKey() final bool isInRoom;
|
||||
@@ -536,7 +536,7 @@ abstract mixin class _$PartyRoomStateCopyWith<$Res> implements $PartyRoomStateCo
|
||||
factory _$PartyRoomStateCopyWith(_PartyRoomState value, $Res Function(_PartyRoomState) _then) = __$PartyRoomStateCopyWithImpl;
|
||||
@override @useResult
|
||||
$Res call({
|
||||
partroom.RoomInfo? currentRoom, List<partroom.RoomMember> members, List<common.Tag> tags, List<common.SignalType> signalTypes, bool isInRoom, bool isOwner, String? roomUuid, List<partroom.RoomEvent> recentEvents
|
||||
partroom.RoomInfo? currentRoom, List<partroom.RoomMember> members, Map<String, common.Tag> tags, Map<String, common.SignalType> signalTypes, bool isInRoom, bool isOwner, String? roomUuid, List<partroom.RoomEvent> recentEvents
|
||||
});
|
||||
|
||||
|
||||
@@ -558,8 +558,8 @@ class __$PartyRoomStateCopyWithImpl<$Res>
|
||||
currentRoom: freezed == currentRoom ? _self.currentRoom : currentRoom // ignore: cast_nullable_to_non_nullable
|
||||
as partroom.RoomInfo?,members: null == members ? _self._members : members // ignore: cast_nullable_to_non_nullable
|
||||
as List<partroom.RoomMember>,tags: null == tags ? _self._tags : tags // ignore: cast_nullable_to_non_nullable
|
||||
as List<common.Tag>,signalTypes: null == signalTypes ? _self._signalTypes : signalTypes // ignore: cast_nullable_to_non_nullable
|
||||
as List<common.SignalType>,isInRoom: null == isInRoom ? _self.isInRoom : isInRoom // ignore: cast_nullable_to_non_nullable
|
||||
as Map<String, common.Tag>,signalTypes: null == signalTypes ? _self._signalTypes : signalTypes // ignore: cast_nullable_to_non_nullable
|
||||
as Map<String, common.SignalType>,isInRoom: null == isInRoom ? _self.isInRoom : isInRoom // ignore: cast_nullable_to_non_nullable
|
||||
as bool,isOwner: null == isOwner ? _self.isOwner : isOwner // ignore: cast_nullable_to_non_nullable
|
||||
as bool,roomUuid: freezed == roomUuid ? _self.roomUuid : roomUuid // ignore: cast_nullable_to_non_nullable
|
||||
as String?,recentEvents: null == recentEvents ? _self._recentEvents : recentEvents // ignore: cast_nullable_to_non_nullable
|
||||
|
||||
@@ -44,7 +44,7 @@ final class PartyRoomProvider
|
||||
}
|
||||
}
|
||||
|
||||
String _$partyRoomHash() => r'2c521709721292458d5459359cac376f123ec226';
|
||||
String _$partyRoomHash() => r'f427838c330942d59faf614f420236dc5a699381';
|
||||
|
||||
/// PartyRoom Provider
|
||||
|
||||
|
||||
Reference in New Issue
Block a user