Разделение навигации и реактивности

This commit is contained in:
Халимов Рустам
2026-05-15 11:00:38 +03:00
parent 40589dbb75
commit 4d4bc8edd1
9 changed files with 541 additions and 96 deletions
@@ -13,6 +13,13 @@ class SignalRService {
SignalRService(this.prefs); SignalRService(this.prefs);
Future<void> init() async { Future<void> init() async {
if (_hubConnection?.state == HubConnectionState.Connected ||
_hubConnection?.state == HubConnectionState.Connecting) {
// ignore: avoid_print
print('[SignalR] Connection already active or connecting. Skipping init.');
return;
}
if (_hubConnection != null) { if (_hubConnection != null) {
await stop(); await stop();
} }
@@ -22,27 +29,48 @@ class SignalRService {
if (token == null) return; if (token == null) return;
final hubUrl = '${apiUrl.replaceAll(RegExp(r'/+$'), '')}/hubs/chat'; final hubUrl = '${apiUrl.replaceAll(RegExp(r'/+$'), '')}/hubs/chat';
// ignore: avoid_print
print('[SignalR] Initializing connection to: $hubUrl');
_hubConnection = HubConnectionBuilder() _hubConnection = HubConnectionBuilder()
.withUrl(hubUrl, options: HttpConnectionOptions( .withUrl(hubUrl, options: HttpConnectionOptions(
accessTokenFactory: () async => token, accessTokenFactory: () async => token,
// logging: (level, message) => print('[SignalR] $level: $message'),
)) ))
.withAutomaticReconnect() .withAutomaticReconnect()
.build(); .build();
_hubConnection?.onclose(({error}) { _hubConnection?.onclose(({error}) {
// print('[SignalR] Connection closed: $error'); // ignore: avoid_print
print('[SignalR] Connection closed. Error: $error');
}); });
_hubConnection?.onreconnecting(({error}) {
// ignore: avoid_print
print('[SignalR] Reconnecting... Error: $error');
});
_hubConnection?.onreconnected(({connectionId}) {
// ignore: avoid_print
print('[SignalR] Reconnected! ID: $connectionId');
});
// Handle multiple possible event names to be safe
_hubConnection?.on('ReceiveMessage', _handleReceiveMessage); _hubConnection?.on('ReceiveMessage', _handleReceiveMessage);
_hubConnection?.on('receiveMessage', _handleReceiveMessage);
_hubConnection?.on('UserTyping', _handleUserTyping);
_hubConnection?.on('user_typing', _handleUserTyping); _hubConnection?.on('user_typing', _handleUserTyping);
_hubConnection?.on('UserStoppedTyping', _handleUserStoppedTyping);
_hubConnection?.on('user_stopped_typing', _handleUserStoppedTyping); _hubConnection?.on('user_stopped_typing', _handleUserStoppedTyping);
try { try {
// ignore: avoid_print
print('[SignalR] Starting connection...');
await _hubConnection?.start(); await _hubConnection?.start();
// ignore: avoid_print
print('[SignalR] Connection started successfully. State: ${_hubConnection?.state}');
} catch (e) { } catch (e) {
// ignore // ignore: avoid_print
print('[SignalR] Connection failed: $e');
} }
} }
@@ -50,6 +78,8 @@ class SignalRService {
Stream<Map<String, dynamic>> get typingUpdates => _typingController.stream; Stream<Map<String, dynamic>> get typingUpdates => _typingController.stream;
void _handleUserTyping(List<dynamic>? arguments) { void _handleUserTyping(List<dynamic>? arguments) {
// ignore: avoid_print
print('[SignalR] _handleUserTyping: $arguments');
if (arguments != null && arguments.isNotEmpty) { if (arguments != null && arguments.isNotEmpty) {
final data = arguments[0] as Map<String, dynamic>; final data = arguments[0] as Map<String, dynamic>;
_typingController.add({'chatId': data['ChatId'] ?? data['chatId'], 'userId': data['UserId'] ?? data['userId'], 'isTyping': true}); _typingController.add({'chatId': data['ChatId'] ?? data['chatId'], 'userId': data['UserId'] ?? data['userId'], 'isTyping': true});
@@ -57,6 +87,8 @@ class SignalRService {
} }
void _handleUserStoppedTyping(List<dynamic>? arguments) { void _handleUserStoppedTyping(List<dynamic>? arguments) {
// ignore: avoid_print
print('[SignalR] _handleUserStoppedTyping: $arguments');
if (arguments != null && arguments.isNotEmpty) { if (arguments != null && arguments.isNotEmpty) {
final data = arguments[0] as Map<String, dynamic>; final data = arguments[0] as Map<String, dynamic>;
_typingController.add({'chatId': data['ChatId'] ?? data['chatId'], 'userId': data['UserId'] ?? data['userId'], 'isTyping': false}); _typingController.add({'chatId': data['ChatId'] ?? data['chatId'], 'userId': data['UserId'] ?? data['userId'], 'isTyping': false});
@@ -72,13 +104,34 @@ class SignalRService {
} }
void _handleReceiveMessage(List<dynamic>? arguments) { void _handleReceiveMessage(List<dynamic>? arguments) {
// ignore: avoid_print
print('[SignalR] _handleReceiveMessage: $arguments');
if (arguments != null && arguments.isNotEmpty) { if (arguments != null && arguments.isNotEmpty) {
final data = arguments[0] as Map<String, dynamic>; final data = arguments[0] as Map<String, dynamic>;
// Map JSON to Message entity and add to stream final message = Message(
// I'll need a Message.fromJson mapper id: data['id'] ?? '',
chatId: data['chatId'] ?? '',
senderId: data['userId'] ?? (data['senderId'] ?? ''),
content: data['content'] ?? '',
messageType: data['type']?.toString().toLowerCase() ?? 'text',
createdAt: _parseDateTime(data['createdAt']),
updatedAt: _parseDateTime(data['updatedAt']),
isRead: data['isRead'] ?? false,
media: data['media'] is Map<String, dynamic> ? data['media'] as Map<String, dynamic> : null,
);
_messageController.add(message);
} }
} }
DateTime? _parseDateTime(String? dateStr) {
if (dateStr == null) return null;
String normalized = dateStr;
if (!normalized.endsWith('Z') && !normalized.contains('+')) {
normalized += 'Z';
}
return DateTime.parse(normalized).toLocal();
}
Future<void> stop() async { Future<void> stop() async {
await _hubConnection?.stop(); await _hubConnection?.stop();
_hubConnection = null; _hubConnection = null;
@@ -121,7 +121,7 @@ class ChatRepositoryImpl implements ChatRepository {
return remote; return remote;
} }
// ignore: avoid_print // ignore: avoid_print
print('[DEBUG] Remote getMessages failed: ${remote.failure?.message}'); print('[DEBUG] Remote getMessages failed: ${remote.error?.message}');
return cached; return cached;
} else { } else {
return remoteDataSource.getMessages(chatId, cursor: cursor); return remoteDataSource.getMessages(chatId, cursor: cursor);
@@ -16,6 +16,7 @@ class ChatBloc extends Bloc<ChatEvent, ChatState> {
on<ChatEventChatsLoaded>(_onChatsLoaded); on<ChatEventChatsLoaded>(_onChatsLoaded);
on<ChatEventChatSelected>(_onChatSelected); on<ChatEventChatSelected>(_onChatSelected);
on<ChatEventMessagesRequested>(_onMessagesRequested); on<ChatEventMessagesRequested>(_onMessagesRequested);
on<ChatEventMessageReceived>(_onMessageReceived);
on<ChatEventMessageSent>(_onMessageSent); on<ChatEventMessageSent>(_onMessageSent);
on<ChatEventFavoritesRequested>(_onFavoritesRequested); on<ChatEventFavoritesRequested>(_onFavoritesRequested);
on<ChatEventTypingUpdated>(_onTypingUpdated); on<ChatEventTypingUpdated>(_onTypingUpdated);
@@ -23,7 +24,7 @@ class ChatBloc extends Bloc<ChatEvent, ChatState> {
on<ChatEventCacheCleared>(_onCacheCleared); on<ChatEventCacheCleared>(_onCacheCleared);
_messageSubscription = chatRepository.messageStream.listen((message) { _messageSubscription = chatRepository.messageStream.listen((message) {
add(ChatEvent.messagesRequested(message.chatId)); add(ChatEvent.messageReceived(message));
}); });
_typingSubscription = chatRepository.typingStream.listen((data) { _typingSubscription = chatRepository.typingStream.listen((data) {
@@ -40,7 +41,6 @@ class ChatBloc extends Bloc<ChatEvent, ChatState> {
}); });
// Immediately trigger chats loading // Immediately trigger chats loading
add(ChatEvent.chatsLoaded(currentUserId: event.userId)); add(ChatEvent.chatsLoaded(currentUserId: event.userId));
add(const ChatEvent.favoritesRequested());
} }
Future<void> _onChatsLoaded(ChatEventChatsLoaded event, Emitter<ChatState> emit) async { Future<void> _onChatsLoaded(ChatEventChatsLoaded event, Emitter<ChatState> emit) async {
@@ -53,42 +53,114 @@ class ChatBloc extends Bloc<ChatEvent, ChatState> {
} }
Future<void> _onChatSelected(ChatEventChatSelected event, Emitter<ChatState> emit) async { Future<void> _onChatSelected(ChatEventChatSelected event, Emitter<ChatState> emit) async {
emit(const ChatState.loading()); final currentChatId = state.maybeMap(
chatSelected: (s) => s.chat.id,
messagesLoaded: (s) => s.chat.id,
orElse: () => null,
);
if (currentChatId == event.chatId) {
// Already in this chat, just refresh messages
final messagesResult = await chatRepository.getMessages(event.chatId);
messagesResult.fold(
(error) => null,
(messages) {
final currentChat = state.maybeMap(
chatSelected: (s) => s.chat,
messagesLoaded: (s) => s.chat,
orElse: () => null,
);
if (currentChat != null) {
emit(ChatState.messagesLoaded(currentChat, messages, typingUsers: state.typingUsers));
}
},
);
return;
}
emit(ChatState.loading(typingUsers: state.typingUsers));
final chatResult = await chatRepository.getChatById(event.chatId); final chatResult = await chatRepository.getChatById(event.chatId);
final messagesResult = await chatRepository.getMessages(event.chatId); final messagesResult = await chatRepository.getMessages(event.chatId);
chatResult.fold( chatResult.fold(
(error) => emit(ChatState.error(error.message ?? 'Failed to load chat')), (error) => emit(ChatState.error(error.message ?? 'Failed to load chat', typingUsers: state.typingUsers)),
(chat) { (chat) {
messagesResult.fold( messagesResult.fold(
(error) => emit(ChatState.chatSelected(chat, [])), (error) => emit(ChatState.chatSelected(chat, [], typingUsers: state.typingUsers)),
(messages) => emit(ChatState.chatSelected(chat, messages)), (messages) => emit(ChatState.chatSelected(chat, messages, typingUsers: state.typingUsers)),
); );
}, },
); );
} }
Future<void> _onMessagesRequested(ChatEventMessagesRequested event, Emitter<ChatState> emit) async { Future<void> _onMessagesRequested(ChatEventMessagesRequested event, Emitter<ChatState> emit) async {
final currentChat = state.maybeMap(
chatSelected: (s) => s.chat,
messagesLoaded: (s) => s.chat,
orElse: () => null,
);
// Only fetch if it's the current chat or we are in chats list
final result = await chatRepository.getMessages(event.chatId); final result = await chatRepository.getMessages(event.chatId);
result.fold( result.fold(
(error) => emit(ChatState.error(error.message ?? 'Failed to load messages')), (error) => null, // Don't emit error state for background updates to avoid UI flickering
(messages) => emit(ChatState.messagesLoaded(messages)), (messages) {
if (currentChat != null && currentChat.id == event.chatId) {
// If we are in the chat, update messages and switch to messagesLoaded (stable state)
emit(ChatState.messagesLoaded(currentChat, messages, typingUsers: state.typingUsers));
}
// If we are in the list, the list will update via local cache anyway or on next fetch
},
);
}
Future<void> _onMessageReceived(ChatEventMessageReceived event, Emitter<ChatState> emit) async {
final message = event.message;
final currentChat = state.maybeMap(
chatSelected: (s) => s.chat,
messagesLoaded: (s) => s.chat,
orElse: () => null,
);
if (currentChat != null && currentChat.id == message.chatId) {
final List<Message> currentMessages = state.maybeMap(
chatSelected: (s) => s.messages,
messagesLoaded: (s) => s.messages,
orElse: () => [],
);
// Check for duplicates
if (currentMessages.any((m) => m.id == message.id)) return;
final updatedMessages = List<Message>.from(currentMessages)..insert(0, message);
// Ensure sorting if needed (usually messages are already in order from stream)
emit(ChatState.messagesLoaded(currentChat, updatedMessages, typingUsers: state.typingUsers));
}
// Also trigger chats refresh if we are in chatsLoaded state to update last message/unread
state.maybeMap(
chatsLoaded: (_) => add(ChatEvent.chatsLoaded(currentUserId: currentChat?.participants?.firstWhere((p) => p.id != '').id)), // userId logic might need to be better
orElse: () => null,
); );
} }
Future<void> _onMessageSent(ChatEventMessageSent event, Emitter<ChatState> emit) async { Future<void> _onMessageSent(ChatEventMessageSent event, Emitter<ChatState> emit) async {
final result = await chatRepository.sendMessage(event.chatId, event.content); final result = await chatRepository.sendMessage(event.chatId, event.content);
result.fold( result.fold(
(error) => emit(ChatState.error(error.message ?? 'Failed to send message')), (error) => emit(ChatState.error(error.message ?? 'Failed to send message', typingUsers: state.typingUsers)),
(_) => add(ChatEvent.messagesRequested(event.chatId)), (_) {
// Optimistically or via refresh
add(ChatEvent.messagesRequested(event.chatId));
},
); );
} }
Future<void> _onFavoritesRequested(ChatEventFavoritesRequested event, Emitter<ChatState> emit) async { Future<void> _onFavoritesRequested(ChatEventFavoritesRequested event, Emitter<ChatState> emit) async {
emit(const ChatState.loading()); emit(ChatState.loading(typingUsers: state.typingUsers));
final result = await chatRepository.getOrCreateFavorites(); final result = await chatRepository.getOrCreateFavorites();
result.fold( result.fold(
(error) => emit(ChatState.error(error.message ?? 'Failed to open Favorites')), (error) => emit(ChatState.error(error.message ?? 'Failed to open Favorites', typingUsers: state.typingUsers)),
(chat) => add(ChatEvent.chatSelected(chat.id)), (chat) => add(ChatEvent.chatSelected(chat.id)),
); );
} }
@@ -109,7 +181,19 @@ class ChatBloc extends Bloc<ChatEvent, ChatState> {
newTypingUsers[event.chatId] = chatTypingUsers; newTypingUsers[event.chatId] = chatTypingUsers;
} }
emit(state.copyWith(typingUsers: newTypingUsers)); state.maybeMap(
chatSelected: (s) {
// If it's the current chat, transition to stable state
if (s.chat.id == event.chatId) {
emit(ChatState.messagesLoaded(s.chat, s.messages, typingUsers: newTypingUsers));
} else {
emit(s.copyWith(typingUsers: newTypingUsers));
}
},
messagesLoaded: (s) => emit(s.copyWith(typingUsers: newTypingUsers)),
chatsLoaded: (s) => emit(s.copyWith(typingUsers: newTypingUsers)),
orElse: () => emit(state.copyWith(typingUsers: newTypingUsers)),
);
} }
Future<void> _onSendTypingStatus(ChatEventSendTypingStatus event, Emitter<ChatState> emit) async { Future<void> _onSendTypingStatus(ChatEventSendTypingStatus event, Emitter<ChatState> emit) async {
@@ -1,4 +1,5 @@
import 'package:freezed_annotation/freezed_annotation.dart'; import 'package:freezed_annotation/freezed_annotation.dart';
import '../../domain/entities/message.dart';
part 'chat_event.freezed.dart'; part 'chat_event.freezed.dart';
@@ -8,6 +9,7 @@ class ChatEvent with _$ChatEvent {
const factory ChatEvent.chatsLoaded({String? currentUserId}) = ChatEventChatsLoaded; const factory ChatEvent.chatsLoaded({String? currentUserId}) = ChatEventChatsLoaded;
const factory ChatEvent.chatSelected(String chatId) = ChatEventChatSelected; const factory ChatEvent.chatSelected(String chatId) = ChatEventChatSelected;
const factory ChatEvent.messagesRequested(String chatId, {String? cursor}) = ChatEventMessagesRequested; const factory ChatEvent.messagesRequested(String chatId, {String? cursor}) = ChatEventMessagesRequested;
const factory ChatEvent.messageReceived(Message message) = ChatEventMessageReceived;
const factory ChatEvent.messageSent(String chatId, String content) = ChatEventMessageSent; const factory ChatEvent.messageSent(String chatId, String content) = ChatEventMessageSent;
const factory ChatEvent.favoritesRequested() = ChatEventFavoritesRequested; const factory ChatEvent.favoritesRequested() = ChatEventFavoritesRequested;
const factory ChatEvent.typingUpdated(String chatId, String userId, bool isTyping) = ChatEventTypingUpdated; const factory ChatEvent.typingUpdated(String chatId, String userId, bool isTyping) = ChatEventTypingUpdated;
@@ -22,6 +22,7 @@ mixin _$ChatEvent {
required TResult Function(String? currentUserId) chatsLoaded, required TResult Function(String? currentUserId) chatsLoaded,
required TResult Function(String chatId) chatSelected, required TResult Function(String chatId) chatSelected,
required TResult Function(String chatId, String? cursor) messagesRequested, required TResult Function(String chatId, String? cursor) messagesRequested,
required TResult Function(Message message) messageReceived,
required TResult Function(String chatId, String content) messageSent, required TResult Function(String chatId, String content) messageSent,
required TResult Function() favoritesRequested, required TResult Function() favoritesRequested,
required TResult Function(String chatId, String userId, bool isTyping) required TResult Function(String chatId, String userId, bool isTyping)
@@ -36,6 +37,7 @@ mixin _$ChatEvent {
TResult? Function(String? currentUserId)? chatsLoaded, TResult? Function(String? currentUserId)? chatsLoaded,
TResult? Function(String chatId)? chatSelected, TResult? Function(String chatId)? chatSelected,
TResult? Function(String chatId, String? cursor)? messagesRequested, TResult? Function(String chatId, String? cursor)? messagesRequested,
TResult? Function(Message message)? messageReceived,
TResult? Function(String chatId, String content)? messageSent, TResult? Function(String chatId, String content)? messageSent,
TResult? Function()? favoritesRequested, TResult? Function()? favoritesRequested,
TResult? Function(String chatId, String userId, bool isTyping)? TResult? Function(String chatId, String userId, bool isTyping)?
@@ -50,6 +52,7 @@ mixin _$ChatEvent {
TResult Function(String? currentUserId)? chatsLoaded, TResult Function(String? currentUserId)? chatsLoaded,
TResult Function(String chatId)? chatSelected, TResult Function(String chatId)? chatSelected,
TResult Function(String chatId, String? cursor)? messagesRequested, TResult Function(String chatId, String? cursor)? messagesRequested,
TResult Function(Message message)? messageReceived,
TResult Function(String chatId, String content)? messageSent, TResult Function(String chatId, String content)? messageSent,
TResult Function()? favoritesRequested, TResult Function()? favoritesRequested,
TResult Function(String chatId, String userId, bool isTyping)? TResult Function(String chatId, String userId, bool isTyping)?
@@ -66,6 +69,7 @@ mixin _$ChatEvent {
required TResult Function(ChatEventChatSelected value) chatSelected, required TResult Function(ChatEventChatSelected value) chatSelected,
required TResult Function(ChatEventMessagesRequested value) required TResult Function(ChatEventMessagesRequested value)
messagesRequested, messagesRequested,
required TResult Function(ChatEventMessageReceived value) messageReceived,
required TResult Function(ChatEventMessageSent value) messageSent, required TResult Function(ChatEventMessageSent value) messageSent,
required TResult Function(ChatEventFavoritesRequested value) required TResult Function(ChatEventFavoritesRequested value)
favoritesRequested, favoritesRequested,
@@ -80,6 +84,7 @@ mixin _$ChatEvent {
TResult? Function(ChatEventChatsLoaded value)? chatsLoaded, TResult? Function(ChatEventChatsLoaded value)? chatsLoaded,
TResult? Function(ChatEventChatSelected value)? chatSelected, TResult? Function(ChatEventChatSelected value)? chatSelected,
TResult? Function(ChatEventMessagesRequested value)? messagesRequested, TResult? Function(ChatEventMessagesRequested value)? messagesRequested,
TResult? Function(ChatEventMessageReceived value)? messageReceived,
TResult? Function(ChatEventMessageSent value)? messageSent, TResult? Function(ChatEventMessageSent value)? messageSent,
TResult? Function(ChatEventFavoritesRequested value)? favoritesRequested, TResult? Function(ChatEventFavoritesRequested value)? favoritesRequested,
TResult? Function(ChatEventTypingUpdated value)? typingUpdated, TResult? Function(ChatEventTypingUpdated value)? typingUpdated,
@@ -93,6 +98,7 @@ mixin _$ChatEvent {
TResult Function(ChatEventChatsLoaded value)? chatsLoaded, TResult Function(ChatEventChatsLoaded value)? chatsLoaded,
TResult Function(ChatEventChatSelected value)? chatSelected, TResult Function(ChatEventChatSelected value)? chatSelected,
TResult Function(ChatEventMessagesRequested value)? messagesRequested, TResult Function(ChatEventMessagesRequested value)? messagesRequested,
TResult Function(ChatEventMessageReceived value)? messageReceived,
TResult Function(ChatEventMessageSent value)? messageSent, TResult Function(ChatEventMessageSent value)? messageSent,
TResult Function(ChatEventFavoritesRequested value)? favoritesRequested, TResult Function(ChatEventFavoritesRequested value)? favoritesRequested,
TResult Function(ChatEventTypingUpdated value)? typingUpdated, TResult Function(ChatEventTypingUpdated value)? typingUpdated,
@@ -189,6 +195,7 @@ class _$ChatEventStartedImpl implements ChatEventStarted {
required TResult Function(String? currentUserId) chatsLoaded, required TResult Function(String? currentUserId) chatsLoaded,
required TResult Function(String chatId) chatSelected, required TResult Function(String chatId) chatSelected,
required TResult Function(String chatId, String? cursor) messagesRequested, required TResult Function(String chatId, String? cursor) messagesRequested,
required TResult Function(Message message) messageReceived,
required TResult Function(String chatId, String content) messageSent, required TResult Function(String chatId, String content) messageSent,
required TResult Function() favoritesRequested, required TResult Function() favoritesRequested,
required TResult Function(String chatId, String userId, bool isTyping) required TResult Function(String chatId, String userId, bool isTyping)
@@ -206,6 +213,7 @@ class _$ChatEventStartedImpl implements ChatEventStarted {
TResult? Function(String? currentUserId)? chatsLoaded, TResult? Function(String? currentUserId)? chatsLoaded,
TResult? Function(String chatId)? chatSelected, TResult? Function(String chatId)? chatSelected,
TResult? Function(String chatId, String? cursor)? messagesRequested, TResult? Function(String chatId, String? cursor)? messagesRequested,
TResult? Function(Message message)? messageReceived,
TResult? Function(String chatId, String content)? messageSent, TResult? Function(String chatId, String content)? messageSent,
TResult? Function()? favoritesRequested, TResult? Function()? favoritesRequested,
TResult? Function(String chatId, String userId, bool isTyping)? TResult? Function(String chatId, String userId, bool isTyping)?
@@ -223,6 +231,7 @@ class _$ChatEventStartedImpl implements ChatEventStarted {
TResult Function(String? currentUserId)? chatsLoaded, TResult Function(String? currentUserId)? chatsLoaded,
TResult Function(String chatId)? chatSelected, TResult Function(String chatId)? chatSelected,
TResult Function(String chatId, String? cursor)? messagesRequested, TResult Function(String chatId, String? cursor)? messagesRequested,
TResult Function(Message message)? messageReceived,
TResult Function(String chatId, String content)? messageSent, TResult Function(String chatId, String content)? messageSent,
TResult Function()? favoritesRequested, TResult Function()? favoritesRequested,
TResult Function(String chatId, String userId, bool isTyping)? TResult Function(String chatId, String userId, bool isTyping)?
@@ -245,6 +254,7 @@ class _$ChatEventStartedImpl implements ChatEventStarted {
required TResult Function(ChatEventChatSelected value) chatSelected, required TResult Function(ChatEventChatSelected value) chatSelected,
required TResult Function(ChatEventMessagesRequested value) required TResult Function(ChatEventMessagesRequested value)
messagesRequested, messagesRequested,
required TResult Function(ChatEventMessageReceived value) messageReceived,
required TResult Function(ChatEventMessageSent value) messageSent, required TResult Function(ChatEventMessageSent value) messageSent,
required TResult Function(ChatEventFavoritesRequested value) required TResult Function(ChatEventFavoritesRequested value)
favoritesRequested, favoritesRequested,
@@ -262,6 +272,7 @@ class _$ChatEventStartedImpl implements ChatEventStarted {
TResult? Function(ChatEventChatsLoaded value)? chatsLoaded, TResult? Function(ChatEventChatsLoaded value)? chatsLoaded,
TResult? Function(ChatEventChatSelected value)? chatSelected, TResult? Function(ChatEventChatSelected value)? chatSelected,
TResult? Function(ChatEventMessagesRequested value)? messagesRequested, TResult? Function(ChatEventMessagesRequested value)? messagesRequested,
TResult? Function(ChatEventMessageReceived value)? messageReceived,
TResult? Function(ChatEventMessageSent value)? messageSent, TResult? Function(ChatEventMessageSent value)? messageSent,
TResult? Function(ChatEventFavoritesRequested value)? favoritesRequested, TResult? Function(ChatEventFavoritesRequested value)? favoritesRequested,
TResult? Function(ChatEventTypingUpdated value)? typingUpdated, TResult? Function(ChatEventTypingUpdated value)? typingUpdated,
@@ -278,6 +289,7 @@ class _$ChatEventStartedImpl implements ChatEventStarted {
TResult Function(ChatEventChatsLoaded value)? chatsLoaded, TResult Function(ChatEventChatsLoaded value)? chatsLoaded,
TResult Function(ChatEventChatSelected value)? chatSelected, TResult Function(ChatEventChatSelected value)? chatSelected,
TResult Function(ChatEventMessagesRequested value)? messagesRequested, TResult Function(ChatEventMessagesRequested value)? messagesRequested,
TResult Function(ChatEventMessageReceived value)? messageReceived,
TResult Function(ChatEventMessageSent value)? messageSent, TResult Function(ChatEventMessageSent value)? messageSent,
TResult Function(ChatEventFavoritesRequested value)? favoritesRequested, TResult Function(ChatEventFavoritesRequested value)? favoritesRequested,
TResult Function(ChatEventTypingUpdated value)? typingUpdated, TResult Function(ChatEventTypingUpdated value)? typingUpdated,
@@ -373,6 +385,7 @@ class _$ChatEventChatsLoadedImpl implements ChatEventChatsLoaded {
required TResult Function(String? currentUserId) chatsLoaded, required TResult Function(String? currentUserId) chatsLoaded,
required TResult Function(String chatId) chatSelected, required TResult Function(String chatId) chatSelected,
required TResult Function(String chatId, String? cursor) messagesRequested, required TResult Function(String chatId, String? cursor) messagesRequested,
required TResult Function(Message message) messageReceived,
required TResult Function(String chatId, String content) messageSent, required TResult Function(String chatId, String content) messageSent,
required TResult Function() favoritesRequested, required TResult Function() favoritesRequested,
required TResult Function(String chatId, String userId, bool isTyping) required TResult Function(String chatId, String userId, bool isTyping)
@@ -390,6 +403,7 @@ class _$ChatEventChatsLoadedImpl implements ChatEventChatsLoaded {
TResult? Function(String? currentUserId)? chatsLoaded, TResult? Function(String? currentUserId)? chatsLoaded,
TResult? Function(String chatId)? chatSelected, TResult? Function(String chatId)? chatSelected,
TResult? Function(String chatId, String? cursor)? messagesRequested, TResult? Function(String chatId, String? cursor)? messagesRequested,
TResult? Function(Message message)? messageReceived,
TResult? Function(String chatId, String content)? messageSent, TResult? Function(String chatId, String content)? messageSent,
TResult? Function()? favoritesRequested, TResult? Function()? favoritesRequested,
TResult? Function(String chatId, String userId, bool isTyping)? TResult? Function(String chatId, String userId, bool isTyping)?
@@ -407,6 +421,7 @@ class _$ChatEventChatsLoadedImpl implements ChatEventChatsLoaded {
TResult Function(String? currentUserId)? chatsLoaded, TResult Function(String? currentUserId)? chatsLoaded,
TResult Function(String chatId)? chatSelected, TResult Function(String chatId)? chatSelected,
TResult Function(String chatId, String? cursor)? messagesRequested, TResult Function(String chatId, String? cursor)? messagesRequested,
TResult Function(Message message)? messageReceived,
TResult Function(String chatId, String content)? messageSent, TResult Function(String chatId, String content)? messageSent,
TResult Function()? favoritesRequested, TResult Function()? favoritesRequested,
TResult Function(String chatId, String userId, bool isTyping)? TResult Function(String chatId, String userId, bool isTyping)?
@@ -429,6 +444,7 @@ class _$ChatEventChatsLoadedImpl implements ChatEventChatsLoaded {
required TResult Function(ChatEventChatSelected value) chatSelected, required TResult Function(ChatEventChatSelected value) chatSelected,
required TResult Function(ChatEventMessagesRequested value) required TResult Function(ChatEventMessagesRequested value)
messagesRequested, messagesRequested,
required TResult Function(ChatEventMessageReceived value) messageReceived,
required TResult Function(ChatEventMessageSent value) messageSent, required TResult Function(ChatEventMessageSent value) messageSent,
required TResult Function(ChatEventFavoritesRequested value) required TResult Function(ChatEventFavoritesRequested value)
favoritesRequested, favoritesRequested,
@@ -446,6 +462,7 @@ class _$ChatEventChatsLoadedImpl implements ChatEventChatsLoaded {
TResult? Function(ChatEventChatsLoaded value)? chatsLoaded, TResult? Function(ChatEventChatsLoaded value)? chatsLoaded,
TResult? Function(ChatEventChatSelected value)? chatSelected, TResult? Function(ChatEventChatSelected value)? chatSelected,
TResult? Function(ChatEventMessagesRequested value)? messagesRequested, TResult? Function(ChatEventMessagesRequested value)? messagesRequested,
TResult? Function(ChatEventMessageReceived value)? messageReceived,
TResult? Function(ChatEventMessageSent value)? messageSent, TResult? Function(ChatEventMessageSent value)? messageSent,
TResult? Function(ChatEventFavoritesRequested value)? favoritesRequested, TResult? Function(ChatEventFavoritesRequested value)? favoritesRequested,
TResult? Function(ChatEventTypingUpdated value)? typingUpdated, TResult? Function(ChatEventTypingUpdated value)? typingUpdated,
@@ -462,6 +479,7 @@ class _$ChatEventChatsLoadedImpl implements ChatEventChatsLoaded {
TResult Function(ChatEventChatsLoaded value)? chatsLoaded, TResult Function(ChatEventChatsLoaded value)? chatsLoaded,
TResult Function(ChatEventChatSelected value)? chatSelected, TResult Function(ChatEventChatSelected value)? chatSelected,
TResult Function(ChatEventMessagesRequested value)? messagesRequested, TResult Function(ChatEventMessagesRequested value)? messagesRequested,
TResult Function(ChatEventMessageReceived value)? messageReceived,
TResult Function(ChatEventMessageSent value)? messageSent, TResult Function(ChatEventMessageSent value)? messageSent,
TResult Function(ChatEventFavoritesRequested value)? favoritesRequested, TResult Function(ChatEventFavoritesRequested value)? favoritesRequested,
TResult Function(ChatEventTypingUpdated value)? typingUpdated, TResult Function(ChatEventTypingUpdated value)? typingUpdated,
@@ -556,6 +574,7 @@ class _$ChatEventChatSelectedImpl implements ChatEventChatSelected {
required TResult Function(String? currentUserId) chatsLoaded, required TResult Function(String? currentUserId) chatsLoaded,
required TResult Function(String chatId) chatSelected, required TResult Function(String chatId) chatSelected,
required TResult Function(String chatId, String? cursor) messagesRequested, required TResult Function(String chatId, String? cursor) messagesRequested,
required TResult Function(Message message) messageReceived,
required TResult Function(String chatId, String content) messageSent, required TResult Function(String chatId, String content) messageSent,
required TResult Function() favoritesRequested, required TResult Function() favoritesRequested,
required TResult Function(String chatId, String userId, bool isTyping) required TResult Function(String chatId, String userId, bool isTyping)
@@ -573,6 +592,7 @@ class _$ChatEventChatSelectedImpl implements ChatEventChatSelected {
TResult? Function(String? currentUserId)? chatsLoaded, TResult? Function(String? currentUserId)? chatsLoaded,
TResult? Function(String chatId)? chatSelected, TResult? Function(String chatId)? chatSelected,
TResult? Function(String chatId, String? cursor)? messagesRequested, TResult? Function(String chatId, String? cursor)? messagesRequested,
TResult? Function(Message message)? messageReceived,
TResult? Function(String chatId, String content)? messageSent, TResult? Function(String chatId, String content)? messageSent,
TResult? Function()? favoritesRequested, TResult? Function()? favoritesRequested,
TResult? Function(String chatId, String userId, bool isTyping)? TResult? Function(String chatId, String userId, bool isTyping)?
@@ -590,6 +610,7 @@ class _$ChatEventChatSelectedImpl implements ChatEventChatSelected {
TResult Function(String? currentUserId)? chatsLoaded, TResult Function(String? currentUserId)? chatsLoaded,
TResult Function(String chatId)? chatSelected, TResult Function(String chatId)? chatSelected,
TResult Function(String chatId, String? cursor)? messagesRequested, TResult Function(String chatId, String? cursor)? messagesRequested,
TResult Function(Message message)? messageReceived,
TResult Function(String chatId, String content)? messageSent, TResult Function(String chatId, String content)? messageSent,
TResult Function()? favoritesRequested, TResult Function()? favoritesRequested,
TResult Function(String chatId, String userId, bool isTyping)? TResult Function(String chatId, String userId, bool isTyping)?
@@ -612,6 +633,7 @@ class _$ChatEventChatSelectedImpl implements ChatEventChatSelected {
required TResult Function(ChatEventChatSelected value) chatSelected, required TResult Function(ChatEventChatSelected value) chatSelected,
required TResult Function(ChatEventMessagesRequested value) required TResult Function(ChatEventMessagesRequested value)
messagesRequested, messagesRequested,
required TResult Function(ChatEventMessageReceived value) messageReceived,
required TResult Function(ChatEventMessageSent value) messageSent, required TResult Function(ChatEventMessageSent value) messageSent,
required TResult Function(ChatEventFavoritesRequested value) required TResult Function(ChatEventFavoritesRequested value)
favoritesRequested, favoritesRequested,
@@ -629,6 +651,7 @@ class _$ChatEventChatSelectedImpl implements ChatEventChatSelected {
TResult? Function(ChatEventChatsLoaded value)? chatsLoaded, TResult? Function(ChatEventChatsLoaded value)? chatsLoaded,
TResult? Function(ChatEventChatSelected value)? chatSelected, TResult? Function(ChatEventChatSelected value)? chatSelected,
TResult? Function(ChatEventMessagesRequested value)? messagesRequested, TResult? Function(ChatEventMessagesRequested value)? messagesRequested,
TResult? Function(ChatEventMessageReceived value)? messageReceived,
TResult? Function(ChatEventMessageSent value)? messageSent, TResult? Function(ChatEventMessageSent value)? messageSent,
TResult? Function(ChatEventFavoritesRequested value)? favoritesRequested, TResult? Function(ChatEventFavoritesRequested value)? favoritesRequested,
TResult? Function(ChatEventTypingUpdated value)? typingUpdated, TResult? Function(ChatEventTypingUpdated value)? typingUpdated,
@@ -645,6 +668,7 @@ class _$ChatEventChatSelectedImpl implements ChatEventChatSelected {
TResult Function(ChatEventChatsLoaded value)? chatsLoaded, TResult Function(ChatEventChatsLoaded value)? chatsLoaded,
TResult Function(ChatEventChatSelected value)? chatSelected, TResult Function(ChatEventChatSelected value)? chatSelected,
TResult Function(ChatEventMessagesRequested value)? messagesRequested, TResult Function(ChatEventMessagesRequested value)? messagesRequested,
TResult Function(ChatEventMessageReceived value)? messageReceived,
TResult Function(ChatEventMessageSent value)? messageSent, TResult Function(ChatEventMessageSent value)? messageSent,
TResult Function(ChatEventFavoritesRequested value)? favoritesRequested, TResult Function(ChatEventFavoritesRequested value)? favoritesRequested,
TResult Function(ChatEventTypingUpdated value)? typingUpdated, TResult Function(ChatEventTypingUpdated value)? typingUpdated,
@@ -748,6 +772,7 @@ class _$ChatEventMessagesRequestedImpl implements ChatEventMessagesRequested {
required TResult Function(String? currentUserId) chatsLoaded, required TResult Function(String? currentUserId) chatsLoaded,
required TResult Function(String chatId) chatSelected, required TResult Function(String chatId) chatSelected,
required TResult Function(String chatId, String? cursor) messagesRequested, required TResult Function(String chatId, String? cursor) messagesRequested,
required TResult Function(Message message) messageReceived,
required TResult Function(String chatId, String content) messageSent, required TResult Function(String chatId, String content) messageSent,
required TResult Function() favoritesRequested, required TResult Function() favoritesRequested,
required TResult Function(String chatId, String userId, bool isTyping) required TResult Function(String chatId, String userId, bool isTyping)
@@ -765,6 +790,7 @@ class _$ChatEventMessagesRequestedImpl implements ChatEventMessagesRequested {
TResult? Function(String? currentUserId)? chatsLoaded, TResult? Function(String? currentUserId)? chatsLoaded,
TResult? Function(String chatId)? chatSelected, TResult? Function(String chatId)? chatSelected,
TResult? Function(String chatId, String? cursor)? messagesRequested, TResult? Function(String chatId, String? cursor)? messagesRequested,
TResult? Function(Message message)? messageReceived,
TResult? Function(String chatId, String content)? messageSent, TResult? Function(String chatId, String content)? messageSent,
TResult? Function()? favoritesRequested, TResult? Function()? favoritesRequested,
TResult? Function(String chatId, String userId, bool isTyping)? TResult? Function(String chatId, String userId, bool isTyping)?
@@ -782,6 +808,7 @@ class _$ChatEventMessagesRequestedImpl implements ChatEventMessagesRequested {
TResult Function(String? currentUserId)? chatsLoaded, TResult Function(String? currentUserId)? chatsLoaded,
TResult Function(String chatId)? chatSelected, TResult Function(String chatId)? chatSelected,
TResult Function(String chatId, String? cursor)? messagesRequested, TResult Function(String chatId, String? cursor)? messagesRequested,
TResult Function(Message message)? messageReceived,
TResult Function(String chatId, String content)? messageSent, TResult Function(String chatId, String content)? messageSent,
TResult Function()? favoritesRequested, TResult Function()? favoritesRequested,
TResult Function(String chatId, String userId, bool isTyping)? TResult Function(String chatId, String userId, bool isTyping)?
@@ -804,6 +831,7 @@ class _$ChatEventMessagesRequestedImpl implements ChatEventMessagesRequested {
required TResult Function(ChatEventChatSelected value) chatSelected, required TResult Function(ChatEventChatSelected value) chatSelected,
required TResult Function(ChatEventMessagesRequested value) required TResult Function(ChatEventMessagesRequested value)
messagesRequested, messagesRequested,
required TResult Function(ChatEventMessageReceived value) messageReceived,
required TResult Function(ChatEventMessageSent value) messageSent, required TResult Function(ChatEventMessageSent value) messageSent,
required TResult Function(ChatEventFavoritesRequested value) required TResult Function(ChatEventFavoritesRequested value)
favoritesRequested, favoritesRequested,
@@ -821,6 +849,7 @@ class _$ChatEventMessagesRequestedImpl implements ChatEventMessagesRequested {
TResult? Function(ChatEventChatsLoaded value)? chatsLoaded, TResult? Function(ChatEventChatsLoaded value)? chatsLoaded,
TResult? Function(ChatEventChatSelected value)? chatSelected, TResult? Function(ChatEventChatSelected value)? chatSelected,
TResult? Function(ChatEventMessagesRequested value)? messagesRequested, TResult? Function(ChatEventMessagesRequested value)? messagesRequested,
TResult? Function(ChatEventMessageReceived value)? messageReceived,
TResult? Function(ChatEventMessageSent value)? messageSent, TResult? Function(ChatEventMessageSent value)? messageSent,
TResult? Function(ChatEventFavoritesRequested value)? favoritesRequested, TResult? Function(ChatEventFavoritesRequested value)? favoritesRequested,
TResult? Function(ChatEventTypingUpdated value)? typingUpdated, TResult? Function(ChatEventTypingUpdated value)? typingUpdated,
@@ -837,6 +866,7 @@ class _$ChatEventMessagesRequestedImpl implements ChatEventMessagesRequested {
TResult Function(ChatEventChatsLoaded value)? chatsLoaded, TResult Function(ChatEventChatsLoaded value)? chatsLoaded,
TResult Function(ChatEventChatSelected value)? chatSelected, TResult Function(ChatEventChatSelected value)? chatSelected,
TResult Function(ChatEventMessagesRequested value)? messagesRequested, TResult Function(ChatEventMessagesRequested value)? messagesRequested,
TResult Function(ChatEventMessageReceived value)? messageReceived,
TResult Function(ChatEventMessageSent value)? messageSent, TResult Function(ChatEventMessageSent value)? messageSent,
TResult Function(ChatEventFavoritesRequested value)? favoritesRequested, TResult Function(ChatEventFavoritesRequested value)? favoritesRequested,
TResult Function(ChatEventTypingUpdated value)? typingUpdated, TResult Function(ChatEventTypingUpdated value)? typingUpdated,
@@ -862,6 +892,206 @@ abstract class ChatEventMessagesRequested implements ChatEvent {
get copyWith => throw _privateConstructorUsedError; get copyWith => throw _privateConstructorUsedError;
} }
/// @nodoc
abstract class _$$ChatEventMessageReceivedImplCopyWith<$Res> {
factory _$$ChatEventMessageReceivedImplCopyWith(
_$ChatEventMessageReceivedImpl value,
$Res Function(_$ChatEventMessageReceivedImpl) then) =
__$$ChatEventMessageReceivedImplCopyWithImpl<$Res>;
@useResult
$Res call({Message message});
$MessageCopyWith<$Res> get message;
}
/// @nodoc
class __$$ChatEventMessageReceivedImplCopyWithImpl<$Res>
extends _$ChatEventCopyWithImpl<$Res, _$ChatEventMessageReceivedImpl>
implements _$$ChatEventMessageReceivedImplCopyWith<$Res> {
__$$ChatEventMessageReceivedImplCopyWithImpl(
_$ChatEventMessageReceivedImpl _value,
$Res Function(_$ChatEventMessageReceivedImpl) _then)
: super(_value, _then);
@pragma('vm:prefer-inline')
@override
$Res call({
Object? message = null,
}) {
return _then(_$ChatEventMessageReceivedImpl(
null == message
? _value.message
: message // ignore: cast_nullable_to_non_nullable
as Message,
));
}
@override
@pragma('vm:prefer-inline')
$MessageCopyWith<$Res> get message {
return $MessageCopyWith<$Res>(_value.message, (value) {
return _then(_value.copyWith(message: value));
});
}
}
/// @nodoc
class _$ChatEventMessageReceivedImpl implements ChatEventMessageReceived {
const _$ChatEventMessageReceivedImpl(this.message);
@override
final Message message;
@override
String toString() {
return 'ChatEvent.messageReceived(message: $message)';
}
@override
bool operator ==(Object other) {
return identical(this, other) ||
(other.runtimeType == runtimeType &&
other is _$ChatEventMessageReceivedImpl &&
(identical(other.message, message) || other.message == message));
}
@override
int get hashCode => Object.hash(runtimeType, message);
@JsonKey(ignore: true)
@override
@pragma('vm:prefer-inline')
_$$ChatEventMessageReceivedImplCopyWith<_$ChatEventMessageReceivedImpl>
get copyWith => __$$ChatEventMessageReceivedImplCopyWithImpl<
_$ChatEventMessageReceivedImpl>(this, _$identity);
@override
@optionalTypeArgs
TResult when<TResult extends Object?>({
required TResult Function(String? userId) started,
required TResult Function(String? currentUserId) chatsLoaded,
required TResult Function(String chatId) chatSelected,
required TResult Function(String chatId, String? cursor) messagesRequested,
required TResult Function(Message message) messageReceived,
required TResult Function(String chatId, String content) messageSent,
required TResult Function() favoritesRequested,
required TResult Function(String chatId, String userId, bool isTyping)
typingUpdated,
required TResult Function(String chatId, bool isTyping) sendTypingStatus,
required TResult Function() cacheCleared,
}) {
return messageReceived(message);
}
@override
@optionalTypeArgs
TResult? whenOrNull<TResult extends Object?>({
TResult? Function(String? userId)? started,
TResult? Function(String? currentUserId)? chatsLoaded,
TResult? Function(String chatId)? chatSelected,
TResult? Function(String chatId, String? cursor)? messagesRequested,
TResult? Function(Message message)? messageReceived,
TResult? Function(String chatId, String content)? messageSent,
TResult? Function()? favoritesRequested,
TResult? Function(String chatId, String userId, bool isTyping)?
typingUpdated,
TResult? Function(String chatId, bool isTyping)? sendTypingStatus,
TResult? Function()? cacheCleared,
}) {
return messageReceived?.call(message);
}
@override
@optionalTypeArgs
TResult maybeWhen<TResult extends Object?>({
TResult Function(String? userId)? started,
TResult Function(String? currentUserId)? chatsLoaded,
TResult Function(String chatId)? chatSelected,
TResult Function(String chatId, String? cursor)? messagesRequested,
TResult Function(Message message)? messageReceived,
TResult Function(String chatId, String content)? messageSent,
TResult Function()? favoritesRequested,
TResult Function(String chatId, String userId, bool isTyping)?
typingUpdated,
TResult Function(String chatId, bool isTyping)? sendTypingStatus,
TResult Function()? cacheCleared,
required TResult orElse(),
}) {
if (messageReceived != null) {
return messageReceived(message);
}
return orElse();
}
@override
@optionalTypeArgs
TResult map<TResult extends Object?>({
required TResult Function(ChatEventStarted value) started,
required TResult Function(ChatEventChatsLoaded value) chatsLoaded,
required TResult Function(ChatEventChatSelected value) chatSelected,
required TResult Function(ChatEventMessagesRequested value)
messagesRequested,
required TResult Function(ChatEventMessageReceived value) messageReceived,
required TResult Function(ChatEventMessageSent value) messageSent,
required TResult Function(ChatEventFavoritesRequested value)
favoritesRequested,
required TResult Function(ChatEventTypingUpdated value) typingUpdated,
required TResult Function(ChatEventSendTypingStatus value) sendTypingStatus,
required TResult Function(ChatEventCacheCleared value) cacheCleared,
}) {
return messageReceived(this);
}
@override
@optionalTypeArgs
TResult? mapOrNull<TResult extends Object?>({
TResult? Function(ChatEventStarted value)? started,
TResult? Function(ChatEventChatsLoaded value)? chatsLoaded,
TResult? Function(ChatEventChatSelected value)? chatSelected,
TResult? Function(ChatEventMessagesRequested value)? messagesRequested,
TResult? Function(ChatEventMessageReceived value)? messageReceived,
TResult? Function(ChatEventMessageSent value)? messageSent,
TResult? Function(ChatEventFavoritesRequested value)? favoritesRequested,
TResult? Function(ChatEventTypingUpdated value)? typingUpdated,
TResult? Function(ChatEventSendTypingStatus value)? sendTypingStatus,
TResult? Function(ChatEventCacheCleared value)? cacheCleared,
}) {
return messageReceived?.call(this);
}
@override
@optionalTypeArgs
TResult maybeMap<TResult extends Object?>({
TResult Function(ChatEventStarted value)? started,
TResult Function(ChatEventChatsLoaded value)? chatsLoaded,
TResult Function(ChatEventChatSelected value)? chatSelected,
TResult Function(ChatEventMessagesRequested value)? messagesRequested,
TResult Function(ChatEventMessageReceived value)? messageReceived,
TResult Function(ChatEventMessageSent value)? messageSent,
TResult Function(ChatEventFavoritesRequested value)? favoritesRequested,
TResult Function(ChatEventTypingUpdated value)? typingUpdated,
TResult Function(ChatEventSendTypingStatus value)? sendTypingStatus,
TResult Function(ChatEventCacheCleared value)? cacheCleared,
required TResult orElse(),
}) {
if (messageReceived != null) {
return messageReceived(this);
}
return orElse();
}
}
abstract class ChatEventMessageReceived implements ChatEvent {
const factory ChatEventMessageReceived(final Message message) =
_$ChatEventMessageReceivedImpl;
Message get message;
@JsonKey(ignore: true)
_$$ChatEventMessageReceivedImplCopyWith<_$ChatEventMessageReceivedImpl>
get copyWith => throw _privateConstructorUsedError;
}
/// @nodoc /// @nodoc
abstract class _$$ChatEventMessageSentImplCopyWith<$Res> { abstract class _$$ChatEventMessageSentImplCopyWith<$Res> {
factory _$$ChatEventMessageSentImplCopyWith(_$ChatEventMessageSentImpl value, factory _$$ChatEventMessageSentImplCopyWith(_$ChatEventMessageSentImpl value,
@@ -940,6 +1170,7 @@ class _$ChatEventMessageSentImpl implements ChatEventMessageSent {
required TResult Function(String? currentUserId) chatsLoaded, required TResult Function(String? currentUserId) chatsLoaded,
required TResult Function(String chatId) chatSelected, required TResult Function(String chatId) chatSelected,
required TResult Function(String chatId, String? cursor) messagesRequested, required TResult Function(String chatId, String? cursor) messagesRequested,
required TResult Function(Message message) messageReceived,
required TResult Function(String chatId, String content) messageSent, required TResult Function(String chatId, String content) messageSent,
required TResult Function() favoritesRequested, required TResult Function() favoritesRequested,
required TResult Function(String chatId, String userId, bool isTyping) required TResult Function(String chatId, String userId, bool isTyping)
@@ -957,6 +1188,7 @@ class _$ChatEventMessageSentImpl implements ChatEventMessageSent {
TResult? Function(String? currentUserId)? chatsLoaded, TResult? Function(String? currentUserId)? chatsLoaded,
TResult? Function(String chatId)? chatSelected, TResult? Function(String chatId)? chatSelected,
TResult? Function(String chatId, String? cursor)? messagesRequested, TResult? Function(String chatId, String? cursor)? messagesRequested,
TResult? Function(Message message)? messageReceived,
TResult? Function(String chatId, String content)? messageSent, TResult? Function(String chatId, String content)? messageSent,
TResult? Function()? favoritesRequested, TResult? Function()? favoritesRequested,
TResult? Function(String chatId, String userId, bool isTyping)? TResult? Function(String chatId, String userId, bool isTyping)?
@@ -974,6 +1206,7 @@ class _$ChatEventMessageSentImpl implements ChatEventMessageSent {
TResult Function(String? currentUserId)? chatsLoaded, TResult Function(String? currentUserId)? chatsLoaded,
TResult Function(String chatId)? chatSelected, TResult Function(String chatId)? chatSelected,
TResult Function(String chatId, String? cursor)? messagesRequested, TResult Function(String chatId, String? cursor)? messagesRequested,
TResult Function(Message message)? messageReceived,
TResult Function(String chatId, String content)? messageSent, TResult Function(String chatId, String content)? messageSent,
TResult Function()? favoritesRequested, TResult Function()? favoritesRequested,
TResult Function(String chatId, String userId, bool isTyping)? TResult Function(String chatId, String userId, bool isTyping)?
@@ -996,6 +1229,7 @@ class _$ChatEventMessageSentImpl implements ChatEventMessageSent {
required TResult Function(ChatEventChatSelected value) chatSelected, required TResult Function(ChatEventChatSelected value) chatSelected,
required TResult Function(ChatEventMessagesRequested value) required TResult Function(ChatEventMessagesRequested value)
messagesRequested, messagesRequested,
required TResult Function(ChatEventMessageReceived value) messageReceived,
required TResult Function(ChatEventMessageSent value) messageSent, required TResult Function(ChatEventMessageSent value) messageSent,
required TResult Function(ChatEventFavoritesRequested value) required TResult Function(ChatEventFavoritesRequested value)
favoritesRequested, favoritesRequested,
@@ -1013,6 +1247,7 @@ class _$ChatEventMessageSentImpl implements ChatEventMessageSent {
TResult? Function(ChatEventChatsLoaded value)? chatsLoaded, TResult? Function(ChatEventChatsLoaded value)? chatsLoaded,
TResult? Function(ChatEventChatSelected value)? chatSelected, TResult? Function(ChatEventChatSelected value)? chatSelected,
TResult? Function(ChatEventMessagesRequested value)? messagesRequested, TResult? Function(ChatEventMessagesRequested value)? messagesRequested,
TResult? Function(ChatEventMessageReceived value)? messageReceived,
TResult? Function(ChatEventMessageSent value)? messageSent, TResult? Function(ChatEventMessageSent value)? messageSent,
TResult? Function(ChatEventFavoritesRequested value)? favoritesRequested, TResult? Function(ChatEventFavoritesRequested value)? favoritesRequested,
TResult? Function(ChatEventTypingUpdated value)? typingUpdated, TResult? Function(ChatEventTypingUpdated value)? typingUpdated,
@@ -1029,6 +1264,7 @@ class _$ChatEventMessageSentImpl implements ChatEventMessageSent {
TResult Function(ChatEventChatsLoaded value)? chatsLoaded, TResult Function(ChatEventChatsLoaded value)? chatsLoaded,
TResult Function(ChatEventChatSelected value)? chatSelected, TResult Function(ChatEventChatSelected value)? chatSelected,
TResult Function(ChatEventMessagesRequested value)? messagesRequested, TResult Function(ChatEventMessagesRequested value)? messagesRequested,
TResult Function(ChatEventMessageReceived value)? messageReceived,
TResult Function(ChatEventMessageSent value)? messageSent, TResult Function(ChatEventMessageSent value)? messageSent,
TResult Function(ChatEventFavoritesRequested value)? favoritesRequested, TResult Function(ChatEventFavoritesRequested value)? favoritesRequested,
TResult Function(ChatEventTypingUpdated value)? typingUpdated, TResult Function(ChatEventTypingUpdated value)? typingUpdated,
@@ -1099,6 +1335,7 @@ class _$ChatEventFavoritesRequestedImpl implements ChatEventFavoritesRequested {
required TResult Function(String? currentUserId) chatsLoaded, required TResult Function(String? currentUserId) chatsLoaded,
required TResult Function(String chatId) chatSelected, required TResult Function(String chatId) chatSelected,
required TResult Function(String chatId, String? cursor) messagesRequested, required TResult Function(String chatId, String? cursor) messagesRequested,
required TResult Function(Message message) messageReceived,
required TResult Function(String chatId, String content) messageSent, required TResult Function(String chatId, String content) messageSent,
required TResult Function() favoritesRequested, required TResult Function() favoritesRequested,
required TResult Function(String chatId, String userId, bool isTyping) required TResult Function(String chatId, String userId, bool isTyping)
@@ -1116,6 +1353,7 @@ class _$ChatEventFavoritesRequestedImpl implements ChatEventFavoritesRequested {
TResult? Function(String? currentUserId)? chatsLoaded, TResult? Function(String? currentUserId)? chatsLoaded,
TResult? Function(String chatId)? chatSelected, TResult? Function(String chatId)? chatSelected,
TResult? Function(String chatId, String? cursor)? messagesRequested, TResult? Function(String chatId, String? cursor)? messagesRequested,
TResult? Function(Message message)? messageReceived,
TResult? Function(String chatId, String content)? messageSent, TResult? Function(String chatId, String content)? messageSent,
TResult? Function()? favoritesRequested, TResult? Function()? favoritesRequested,
TResult? Function(String chatId, String userId, bool isTyping)? TResult? Function(String chatId, String userId, bool isTyping)?
@@ -1133,6 +1371,7 @@ class _$ChatEventFavoritesRequestedImpl implements ChatEventFavoritesRequested {
TResult Function(String? currentUserId)? chatsLoaded, TResult Function(String? currentUserId)? chatsLoaded,
TResult Function(String chatId)? chatSelected, TResult Function(String chatId)? chatSelected,
TResult Function(String chatId, String? cursor)? messagesRequested, TResult Function(String chatId, String? cursor)? messagesRequested,
TResult Function(Message message)? messageReceived,
TResult Function(String chatId, String content)? messageSent, TResult Function(String chatId, String content)? messageSent,
TResult Function()? favoritesRequested, TResult Function()? favoritesRequested,
TResult Function(String chatId, String userId, bool isTyping)? TResult Function(String chatId, String userId, bool isTyping)?
@@ -1155,6 +1394,7 @@ class _$ChatEventFavoritesRequestedImpl implements ChatEventFavoritesRequested {
required TResult Function(ChatEventChatSelected value) chatSelected, required TResult Function(ChatEventChatSelected value) chatSelected,
required TResult Function(ChatEventMessagesRequested value) required TResult Function(ChatEventMessagesRequested value)
messagesRequested, messagesRequested,
required TResult Function(ChatEventMessageReceived value) messageReceived,
required TResult Function(ChatEventMessageSent value) messageSent, required TResult Function(ChatEventMessageSent value) messageSent,
required TResult Function(ChatEventFavoritesRequested value) required TResult Function(ChatEventFavoritesRequested value)
favoritesRequested, favoritesRequested,
@@ -1172,6 +1412,7 @@ class _$ChatEventFavoritesRequestedImpl implements ChatEventFavoritesRequested {
TResult? Function(ChatEventChatsLoaded value)? chatsLoaded, TResult? Function(ChatEventChatsLoaded value)? chatsLoaded,
TResult? Function(ChatEventChatSelected value)? chatSelected, TResult? Function(ChatEventChatSelected value)? chatSelected,
TResult? Function(ChatEventMessagesRequested value)? messagesRequested, TResult? Function(ChatEventMessagesRequested value)? messagesRequested,
TResult? Function(ChatEventMessageReceived value)? messageReceived,
TResult? Function(ChatEventMessageSent value)? messageSent, TResult? Function(ChatEventMessageSent value)? messageSent,
TResult? Function(ChatEventFavoritesRequested value)? favoritesRequested, TResult? Function(ChatEventFavoritesRequested value)? favoritesRequested,
TResult? Function(ChatEventTypingUpdated value)? typingUpdated, TResult? Function(ChatEventTypingUpdated value)? typingUpdated,
@@ -1188,6 +1429,7 @@ class _$ChatEventFavoritesRequestedImpl implements ChatEventFavoritesRequested {
TResult Function(ChatEventChatsLoaded value)? chatsLoaded, TResult Function(ChatEventChatsLoaded value)? chatsLoaded,
TResult Function(ChatEventChatSelected value)? chatSelected, TResult Function(ChatEventChatSelected value)? chatSelected,
TResult Function(ChatEventMessagesRequested value)? messagesRequested, TResult Function(ChatEventMessagesRequested value)? messagesRequested,
TResult Function(ChatEventMessageReceived value)? messageReceived,
TResult Function(ChatEventMessageSent value)? messageSent, TResult Function(ChatEventMessageSent value)? messageSent,
TResult Function(ChatEventFavoritesRequested value)? favoritesRequested, TResult Function(ChatEventFavoritesRequested value)? favoritesRequested,
TResult Function(ChatEventTypingUpdated value)? typingUpdated, TResult Function(ChatEventTypingUpdated value)? typingUpdated,
@@ -1295,6 +1537,7 @@ class _$ChatEventTypingUpdatedImpl implements ChatEventTypingUpdated {
required TResult Function(String? currentUserId) chatsLoaded, required TResult Function(String? currentUserId) chatsLoaded,
required TResult Function(String chatId) chatSelected, required TResult Function(String chatId) chatSelected,
required TResult Function(String chatId, String? cursor) messagesRequested, required TResult Function(String chatId, String? cursor) messagesRequested,
required TResult Function(Message message) messageReceived,
required TResult Function(String chatId, String content) messageSent, required TResult Function(String chatId, String content) messageSent,
required TResult Function() favoritesRequested, required TResult Function() favoritesRequested,
required TResult Function(String chatId, String userId, bool isTyping) required TResult Function(String chatId, String userId, bool isTyping)
@@ -1312,6 +1555,7 @@ class _$ChatEventTypingUpdatedImpl implements ChatEventTypingUpdated {
TResult? Function(String? currentUserId)? chatsLoaded, TResult? Function(String? currentUserId)? chatsLoaded,
TResult? Function(String chatId)? chatSelected, TResult? Function(String chatId)? chatSelected,
TResult? Function(String chatId, String? cursor)? messagesRequested, TResult? Function(String chatId, String? cursor)? messagesRequested,
TResult? Function(Message message)? messageReceived,
TResult? Function(String chatId, String content)? messageSent, TResult? Function(String chatId, String content)? messageSent,
TResult? Function()? favoritesRequested, TResult? Function()? favoritesRequested,
TResult? Function(String chatId, String userId, bool isTyping)? TResult? Function(String chatId, String userId, bool isTyping)?
@@ -1329,6 +1573,7 @@ class _$ChatEventTypingUpdatedImpl implements ChatEventTypingUpdated {
TResult Function(String? currentUserId)? chatsLoaded, TResult Function(String? currentUserId)? chatsLoaded,
TResult Function(String chatId)? chatSelected, TResult Function(String chatId)? chatSelected,
TResult Function(String chatId, String? cursor)? messagesRequested, TResult Function(String chatId, String? cursor)? messagesRequested,
TResult Function(Message message)? messageReceived,
TResult Function(String chatId, String content)? messageSent, TResult Function(String chatId, String content)? messageSent,
TResult Function()? favoritesRequested, TResult Function()? favoritesRequested,
TResult Function(String chatId, String userId, bool isTyping)? TResult Function(String chatId, String userId, bool isTyping)?
@@ -1351,6 +1596,7 @@ class _$ChatEventTypingUpdatedImpl implements ChatEventTypingUpdated {
required TResult Function(ChatEventChatSelected value) chatSelected, required TResult Function(ChatEventChatSelected value) chatSelected,
required TResult Function(ChatEventMessagesRequested value) required TResult Function(ChatEventMessagesRequested value)
messagesRequested, messagesRequested,
required TResult Function(ChatEventMessageReceived value) messageReceived,
required TResult Function(ChatEventMessageSent value) messageSent, required TResult Function(ChatEventMessageSent value) messageSent,
required TResult Function(ChatEventFavoritesRequested value) required TResult Function(ChatEventFavoritesRequested value)
favoritesRequested, favoritesRequested,
@@ -1368,6 +1614,7 @@ class _$ChatEventTypingUpdatedImpl implements ChatEventTypingUpdated {
TResult? Function(ChatEventChatsLoaded value)? chatsLoaded, TResult? Function(ChatEventChatsLoaded value)? chatsLoaded,
TResult? Function(ChatEventChatSelected value)? chatSelected, TResult? Function(ChatEventChatSelected value)? chatSelected,
TResult? Function(ChatEventMessagesRequested value)? messagesRequested, TResult? Function(ChatEventMessagesRequested value)? messagesRequested,
TResult? Function(ChatEventMessageReceived value)? messageReceived,
TResult? Function(ChatEventMessageSent value)? messageSent, TResult? Function(ChatEventMessageSent value)? messageSent,
TResult? Function(ChatEventFavoritesRequested value)? favoritesRequested, TResult? Function(ChatEventFavoritesRequested value)? favoritesRequested,
TResult? Function(ChatEventTypingUpdated value)? typingUpdated, TResult? Function(ChatEventTypingUpdated value)? typingUpdated,
@@ -1384,6 +1631,7 @@ class _$ChatEventTypingUpdatedImpl implements ChatEventTypingUpdated {
TResult Function(ChatEventChatsLoaded value)? chatsLoaded, TResult Function(ChatEventChatsLoaded value)? chatsLoaded,
TResult Function(ChatEventChatSelected value)? chatSelected, TResult Function(ChatEventChatSelected value)? chatSelected,
TResult Function(ChatEventMessagesRequested value)? messagesRequested, TResult Function(ChatEventMessagesRequested value)? messagesRequested,
TResult Function(ChatEventMessageReceived value)? messageReceived,
TResult Function(ChatEventMessageSent value)? messageSent, TResult Function(ChatEventMessageSent value)? messageSent,
TResult Function(ChatEventFavoritesRequested value)? favoritesRequested, TResult Function(ChatEventFavoritesRequested value)? favoritesRequested,
TResult Function(ChatEventTypingUpdated value)? typingUpdated, TResult Function(ChatEventTypingUpdated value)? typingUpdated,
@@ -1491,6 +1739,7 @@ class _$ChatEventSendTypingStatusImpl implements ChatEventSendTypingStatus {
required TResult Function(String? currentUserId) chatsLoaded, required TResult Function(String? currentUserId) chatsLoaded,
required TResult Function(String chatId) chatSelected, required TResult Function(String chatId) chatSelected,
required TResult Function(String chatId, String? cursor) messagesRequested, required TResult Function(String chatId, String? cursor) messagesRequested,
required TResult Function(Message message) messageReceived,
required TResult Function(String chatId, String content) messageSent, required TResult Function(String chatId, String content) messageSent,
required TResult Function() favoritesRequested, required TResult Function() favoritesRequested,
required TResult Function(String chatId, String userId, bool isTyping) required TResult Function(String chatId, String userId, bool isTyping)
@@ -1508,6 +1757,7 @@ class _$ChatEventSendTypingStatusImpl implements ChatEventSendTypingStatus {
TResult? Function(String? currentUserId)? chatsLoaded, TResult? Function(String? currentUserId)? chatsLoaded,
TResult? Function(String chatId)? chatSelected, TResult? Function(String chatId)? chatSelected,
TResult? Function(String chatId, String? cursor)? messagesRequested, TResult? Function(String chatId, String? cursor)? messagesRequested,
TResult? Function(Message message)? messageReceived,
TResult? Function(String chatId, String content)? messageSent, TResult? Function(String chatId, String content)? messageSent,
TResult? Function()? favoritesRequested, TResult? Function()? favoritesRequested,
TResult? Function(String chatId, String userId, bool isTyping)? TResult? Function(String chatId, String userId, bool isTyping)?
@@ -1525,6 +1775,7 @@ class _$ChatEventSendTypingStatusImpl implements ChatEventSendTypingStatus {
TResult Function(String? currentUserId)? chatsLoaded, TResult Function(String? currentUserId)? chatsLoaded,
TResult Function(String chatId)? chatSelected, TResult Function(String chatId)? chatSelected,
TResult Function(String chatId, String? cursor)? messagesRequested, TResult Function(String chatId, String? cursor)? messagesRequested,
TResult Function(Message message)? messageReceived,
TResult Function(String chatId, String content)? messageSent, TResult Function(String chatId, String content)? messageSent,
TResult Function()? favoritesRequested, TResult Function()? favoritesRequested,
TResult Function(String chatId, String userId, bool isTyping)? TResult Function(String chatId, String userId, bool isTyping)?
@@ -1547,6 +1798,7 @@ class _$ChatEventSendTypingStatusImpl implements ChatEventSendTypingStatus {
required TResult Function(ChatEventChatSelected value) chatSelected, required TResult Function(ChatEventChatSelected value) chatSelected,
required TResult Function(ChatEventMessagesRequested value) required TResult Function(ChatEventMessagesRequested value)
messagesRequested, messagesRequested,
required TResult Function(ChatEventMessageReceived value) messageReceived,
required TResult Function(ChatEventMessageSent value) messageSent, required TResult Function(ChatEventMessageSent value) messageSent,
required TResult Function(ChatEventFavoritesRequested value) required TResult Function(ChatEventFavoritesRequested value)
favoritesRequested, favoritesRequested,
@@ -1564,6 +1816,7 @@ class _$ChatEventSendTypingStatusImpl implements ChatEventSendTypingStatus {
TResult? Function(ChatEventChatsLoaded value)? chatsLoaded, TResult? Function(ChatEventChatsLoaded value)? chatsLoaded,
TResult? Function(ChatEventChatSelected value)? chatSelected, TResult? Function(ChatEventChatSelected value)? chatSelected,
TResult? Function(ChatEventMessagesRequested value)? messagesRequested, TResult? Function(ChatEventMessagesRequested value)? messagesRequested,
TResult? Function(ChatEventMessageReceived value)? messageReceived,
TResult? Function(ChatEventMessageSent value)? messageSent, TResult? Function(ChatEventMessageSent value)? messageSent,
TResult? Function(ChatEventFavoritesRequested value)? favoritesRequested, TResult? Function(ChatEventFavoritesRequested value)? favoritesRequested,
TResult? Function(ChatEventTypingUpdated value)? typingUpdated, TResult? Function(ChatEventTypingUpdated value)? typingUpdated,
@@ -1580,6 +1833,7 @@ class _$ChatEventSendTypingStatusImpl implements ChatEventSendTypingStatus {
TResult Function(ChatEventChatsLoaded value)? chatsLoaded, TResult Function(ChatEventChatsLoaded value)? chatsLoaded,
TResult Function(ChatEventChatSelected value)? chatSelected, TResult Function(ChatEventChatSelected value)? chatSelected,
TResult Function(ChatEventMessagesRequested value)? messagesRequested, TResult Function(ChatEventMessagesRequested value)? messagesRequested,
TResult Function(ChatEventMessageReceived value)? messageReceived,
TResult Function(ChatEventMessageSent value)? messageSent, TResult Function(ChatEventMessageSent value)? messageSent,
TResult Function(ChatEventFavoritesRequested value)? favoritesRequested, TResult Function(ChatEventFavoritesRequested value)? favoritesRequested,
TResult Function(ChatEventTypingUpdated value)? typingUpdated, TResult Function(ChatEventTypingUpdated value)? typingUpdated,
@@ -1650,6 +1904,7 @@ class _$ChatEventCacheClearedImpl implements ChatEventCacheCleared {
required TResult Function(String? currentUserId) chatsLoaded, required TResult Function(String? currentUserId) chatsLoaded,
required TResult Function(String chatId) chatSelected, required TResult Function(String chatId) chatSelected,
required TResult Function(String chatId, String? cursor) messagesRequested, required TResult Function(String chatId, String? cursor) messagesRequested,
required TResult Function(Message message) messageReceived,
required TResult Function(String chatId, String content) messageSent, required TResult Function(String chatId, String content) messageSent,
required TResult Function() favoritesRequested, required TResult Function() favoritesRequested,
required TResult Function(String chatId, String userId, bool isTyping) required TResult Function(String chatId, String userId, bool isTyping)
@@ -1667,6 +1922,7 @@ class _$ChatEventCacheClearedImpl implements ChatEventCacheCleared {
TResult? Function(String? currentUserId)? chatsLoaded, TResult? Function(String? currentUserId)? chatsLoaded,
TResult? Function(String chatId)? chatSelected, TResult? Function(String chatId)? chatSelected,
TResult? Function(String chatId, String? cursor)? messagesRequested, TResult? Function(String chatId, String? cursor)? messagesRequested,
TResult? Function(Message message)? messageReceived,
TResult? Function(String chatId, String content)? messageSent, TResult? Function(String chatId, String content)? messageSent,
TResult? Function()? favoritesRequested, TResult? Function()? favoritesRequested,
TResult? Function(String chatId, String userId, bool isTyping)? TResult? Function(String chatId, String userId, bool isTyping)?
@@ -1684,6 +1940,7 @@ class _$ChatEventCacheClearedImpl implements ChatEventCacheCleared {
TResult Function(String? currentUserId)? chatsLoaded, TResult Function(String? currentUserId)? chatsLoaded,
TResult Function(String chatId)? chatSelected, TResult Function(String chatId)? chatSelected,
TResult Function(String chatId, String? cursor)? messagesRequested, TResult Function(String chatId, String? cursor)? messagesRequested,
TResult Function(Message message)? messageReceived,
TResult Function(String chatId, String content)? messageSent, TResult Function(String chatId, String content)? messageSent,
TResult Function()? favoritesRequested, TResult Function()? favoritesRequested,
TResult Function(String chatId, String userId, bool isTyping)? TResult Function(String chatId, String userId, bool isTyping)?
@@ -1706,6 +1963,7 @@ class _$ChatEventCacheClearedImpl implements ChatEventCacheCleared {
required TResult Function(ChatEventChatSelected value) chatSelected, required TResult Function(ChatEventChatSelected value) chatSelected,
required TResult Function(ChatEventMessagesRequested value) required TResult Function(ChatEventMessagesRequested value)
messagesRequested, messagesRequested,
required TResult Function(ChatEventMessageReceived value) messageReceived,
required TResult Function(ChatEventMessageSent value) messageSent, required TResult Function(ChatEventMessageSent value) messageSent,
required TResult Function(ChatEventFavoritesRequested value) required TResult Function(ChatEventFavoritesRequested value)
favoritesRequested, favoritesRequested,
@@ -1723,6 +1981,7 @@ class _$ChatEventCacheClearedImpl implements ChatEventCacheCleared {
TResult? Function(ChatEventChatsLoaded value)? chatsLoaded, TResult? Function(ChatEventChatsLoaded value)? chatsLoaded,
TResult? Function(ChatEventChatSelected value)? chatSelected, TResult? Function(ChatEventChatSelected value)? chatSelected,
TResult? Function(ChatEventMessagesRequested value)? messagesRequested, TResult? Function(ChatEventMessagesRequested value)? messagesRequested,
TResult? Function(ChatEventMessageReceived value)? messageReceived,
TResult? Function(ChatEventMessageSent value)? messageSent, TResult? Function(ChatEventMessageSent value)? messageSent,
TResult? Function(ChatEventFavoritesRequested value)? favoritesRequested, TResult? Function(ChatEventFavoritesRequested value)? favoritesRequested,
TResult? Function(ChatEventTypingUpdated value)? typingUpdated, TResult? Function(ChatEventTypingUpdated value)? typingUpdated,
@@ -1739,6 +1998,7 @@ class _$ChatEventCacheClearedImpl implements ChatEventCacheCleared {
TResult Function(ChatEventChatsLoaded value)? chatsLoaded, TResult Function(ChatEventChatsLoaded value)? chatsLoaded,
TResult Function(ChatEventChatSelected value)? chatSelected, TResult Function(ChatEventChatSelected value)? chatSelected,
TResult Function(ChatEventMessagesRequested value)? messagesRequested, TResult Function(ChatEventMessagesRequested value)? messagesRequested,
TResult Function(ChatEventMessageReceived value)? messageReceived,
TResult Function(ChatEventMessageSent value)? messageSent, TResult Function(ChatEventMessageSent value)? messageSent,
TResult Function(ChatEventFavoritesRequested value)? favoritesRequested, TResult Function(ChatEventFavoritesRequested value)? favoritesRequested,
TResult Function(ChatEventTypingUpdated value)? typingUpdated, TResult Function(ChatEventTypingUpdated value)? typingUpdated,
@@ -10,6 +10,6 @@ class ChatState with _$ChatState {
const factory ChatState.loading({@Default({}) Map<String, Set<String>> typingUsers}) = ChatLoading; const factory ChatState.loading({@Default({}) Map<String, Set<String>> typingUsers}) = ChatLoading;
const factory ChatState.chatsLoaded(List<Chat> chats, {@Default({}) Map<String, Set<String>> typingUsers}) = _ChatsLoaded; const factory ChatState.chatsLoaded(List<Chat> chats, {@Default({}) Map<String, Set<String>> typingUsers}) = _ChatsLoaded;
const factory ChatState.chatSelected(Chat chat, List<Message> messages, {@Default({}) Map<String, Set<String>> typingUsers}) = _ChatSelected; const factory ChatState.chatSelected(Chat chat, List<Message> messages, {@Default({}) Map<String, Set<String>> typingUsers}) = _ChatSelected;
const factory ChatState.messagesLoaded(List<Message> messages, {@Default({}) Map<String, Set<String>> typingUsers}) = _MessagesLoaded; const factory ChatState.messagesLoaded(Chat chat, List<Message> messages, {@Default({}) Map<String, Set<String>> typingUsers}) = _MessagesLoaded;
const factory ChatState.error(String message, {@Default({}) Map<String, Set<String>> typingUsers}) = ChatError; const factory ChatState.error(String message, {@Default({}) Map<String, Set<String>> typingUsers}) = ChatError;
} }
@@ -28,8 +28,8 @@ mixin _$ChatState {
required TResult Function(Chat chat, List<Message> messages, required TResult Function(Chat chat, List<Message> messages,
Map<String, Set<String>> typingUsers) Map<String, Set<String>> typingUsers)
chatSelected, chatSelected,
required TResult Function( required TResult Function(Chat chat, List<Message> messages,
List<Message> messages, Map<String, Set<String>> typingUsers) Map<String, Set<String>> typingUsers)
messagesLoaded, messagesLoaded,
required TResult Function( required TResult Function(
String message, Map<String, Set<String>> typingUsers) String message, Map<String, Set<String>> typingUsers)
@@ -45,8 +45,8 @@ mixin _$ChatState {
TResult? Function(Chat chat, List<Message> messages, TResult? Function(Chat chat, List<Message> messages,
Map<String, Set<String>> typingUsers)? Map<String, Set<String>> typingUsers)?
chatSelected, chatSelected,
TResult? Function( TResult? Function(Chat chat, List<Message> messages,
List<Message> messages, Map<String, Set<String>> typingUsers)? Map<String, Set<String>> typingUsers)?
messagesLoaded, messagesLoaded,
TResult? Function(String message, Map<String, Set<String>> typingUsers)? TResult? Function(String message, Map<String, Set<String>> typingUsers)?
error, error,
@@ -61,8 +61,8 @@ mixin _$ChatState {
TResult Function(Chat chat, List<Message> messages, TResult Function(Chat chat, List<Message> messages,
Map<String, Set<String>> typingUsers)? Map<String, Set<String>> typingUsers)?
chatSelected, chatSelected,
TResult Function( TResult Function(Chat chat, List<Message> messages,
List<Message> messages, Map<String, Set<String>> typingUsers)? Map<String, Set<String>> typingUsers)?
messagesLoaded, messagesLoaded,
TResult Function(String message, Map<String, Set<String>> typingUsers)? TResult Function(String message, Map<String, Set<String>> typingUsers)?
error, error,
@@ -222,8 +222,8 @@ class _$ChatInitialImpl implements ChatInitial {
required TResult Function(Chat chat, List<Message> messages, required TResult Function(Chat chat, List<Message> messages,
Map<String, Set<String>> typingUsers) Map<String, Set<String>> typingUsers)
chatSelected, chatSelected,
required TResult Function( required TResult Function(Chat chat, List<Message> messages,
List<Message> messages, Map<String, Set<String>> typingUsers) Map<String, Set<String>> typingUsers)
messagesLoaded, messagesLoaded,
required TResult Function( required TResult Function(
String message, Map<String, Set<String>> typingUsers) String message, Map<String, Set<String>> typingUsers)
@@ -242,8 +242,8 @@ class _$ChatInitialImpl implements ChatInitial {
TResult? Function(Chat chat, List<Message> messages, TResult? Function(Chat chat, List<Message> messages,
Map<String, Set<String>> typingUsers)? Map<String, Set<String>> typingUsers)?
chatSelected, chatSelected,
TResult? Function( TResult? Function(Chat chat, List<Message> messages,
List<Message> messages, Map<String, Set<String>> typingUsers)? Map<String, Set<String>> typingUsers)?
messagesLoaded, messagesLoaded,
TResult? Function(String message, Map<String, Set<String>> typingUsers)? TResult? Function(String message, Map<String, Set<String>> typingUsers)?
error, error,
@@ -261,8 +261,8 @@ class _$ChatInitialImpl implements ChatInitial {
TResult Function(Chat chat, List<Message> messages, TResult Function(Chat chat, List<Message> messages,
Map<String, Set<String>> typingUsers)? Map<String, Set<String>> typingUsers)?
chatSelected, chatSelected,
TResult Function( TResult Function(Chat chat, List<Message> messages,
List<Message> messages, Map<String, Set<String>> typingUsers)? Map<String, Set<String>> typingUsers)?
messagesLoaded, messagesLoaded,
TResult Function(String message, Map<String, Set<String>> typingUsers)? TResult Function(String message, Map<String, Set<String>> typingUsers)?
error, error,
@@ -414,8 +414,8 @@ class _$ChatLoadingImpl implements ChatLoading {
required TResult Function(Chat chat, List<Message> messages, required TResult Function(Chat chat, List<Message> messages,
Map<String, Set<String>> typingUsers) Map<String, Set<String>> typingUsers)
chatSelected, chatSelected,
required TResult Function( required TResult Function(Chat chat, List<Message> messages,
List<Message> messages, Map<String, Set<String>> typingUsers) Map<String, Set<String>> typingUsers)
messagesLoaded, messagesLoaded,
required TResult Function( required TResult Function(
String message, Map<String, Set<String>> typingUsers) String message, Map<String, Set<String>> typingUsers)
@@ -434,8 +434,8 @@ class _$ChatLoadingImpl implements ChatLoading {
TResult? Function(Chat chat, List<Message> messages, TResult? Function(Chat chat, List<Message> messages,
Map<String, Set<String>> typingUsers)? Map<String, Set<String>> typingUsers)?
chatSelected, chatSelected,
TResult? Function( TResult? Function(Chat chat, List<Message> messages,
List<Message> messages, Map<String, Set<String>> typingUsers)? Map<String, Set<String>> typingUsers)?
messagesLoaded, messagesLoaded,
TResult? Function(String message, Map<String, Set<String>> typingUsers)? TResult? Function(String message, Map<String, Set<String>> typingUsers)?
error, error,
@@ -453,8 +453,8 @@ class _$ChatLoadingImpl implements ChatLoading {
TResult Function(Chat chat, List<Message> messages, TResult Function(Chat chat, List<Message> messages,
Map<String, Set<String>> typingUsers)? Map<String, Set<String>> typingUsers)?
chatSelected, chatSelected,
TResult Function( TResult Function(Chat chat, List<Message> messages,
List<Message> messages, Map<String, Set<String>> typingUsers)? Map<String, Set<String>> typingUsers)?
messagesLoaded, messagesLoaded,
TResult Function(String message, Map<String, Set<String>> typingUsers)? TResult Function(String message, Map<String, Set<String>> typingUsers)?
error, error,
@@ -623,8 +623,8 @@ class _$ChatsLoadedImpl implements _ChatsLoaded {
required TResult Function(Chat chat, List<Message> messages, required TResult Function(Chat chat, List<Message> messages,
Map<String, Set<String>> typingUsers) Map<String, Set<String>> typingUsers)
chatSelected, chatSelected,
required TResult Function( required TResult Function(Chat chat, List<Message> messages,
List<Message> messages, Map<String, Set<String>> typingUsers) Map<String, Set<String>> typingUsers)
messagesLoaded, messagesLoaded,
required TResult Function( required TResult Function(
String message, Map<String, Set<String>> typingUsers) String message, Map<String, Set<String>> typingUsers)
@@ -643,8 +643,8 @@ class _$ChatsLoadedImpl implements _ChatsLoaded {
TResult? Function(Chat chat, List<Message> messages, TResult? Function(Chat chat, List<Message> messages,
Map<String, Set<String>> typingUsers)? Map<String, Set<String>> typingUsers)?
chatSelected, chatSelected,
TResult? Function( TResult? Function(Chat chat, List<Message> messages,
List<Message> messages, Map<String, Set<String>> typingUsers)? Map<String, Set<String>> typingUsers)?
messagesLoaded, messagesLoaded,
TResult? Function(String message, Map<String, Set<String>> typingUsers)? TResult? Function(String message, Map<String, Set<String>> typingUsers)?
error, error,
@@ -662,8 +662,8 @@ class _$ChatsLoadedImpl implements _ChatsLoaded {
TResult Function(Chat chat, List<Message> messages, TResult Function(Chat chat, List<Message> messages,
Map<String, Set<String>> typingUsers)? Map<String, Set<String>> typingUsers)?
chatSelected, chatSelected,
TResult Function( TResult Function(Chat chat, List<Message> messages,
List<Message> messages, Map<String, Set<String>> typingUsers)? Map<String, Set<String>> typingUsers)?
messagesLoaded, messagesLoaded,
TResult Function(String message, Map<String, Set<String>> typingUsers)? TResult Function(String message, Map<String, Set<String>> typingUsers)?
error, error,
@@ -855,8 +855,8 @@ class _$ChatSelectedImpl implements _ChatSelected {
required TResult Function(Chat chat, List<Message> messages, required TResult Function(Chat chat, List<Message> messages,
Map<String, Set<String>> typingUsers) Map<String, Set<String>> typingUsers)
chatSelected, chatSelected,
required TResult Function( required TResult Function(Chat chat, List<Message> messages,
List<Message> messages, Map<String, Set<String>> typingUsers) Map<String, Set<String>> typingUsers)
messagesLoaded, messagesLoaded,
required TResult Function( required TResult Function(
String message, Map<String, Set<String>> typingUsers) String message, Map<String, Set<String>> typingUsers)
@@ -875,8 +875,8 @@ class _$ChatSelectedImpl implements _ChatSelected {
TResult? Function(Chat chat, List<Message> messages, TResult? Function(Chat chat, List<Message> messages,
Map<String, Set<String>> typingUsers)? Map<String, Set<String>> typingUsers)?
chatSelected, chatSelected,
TResult? Function( TResult? Function(Chat chat, List<Message> messages,
List<Message> messages, Map<String, Set<String>> typingUsers)? Map<String, Set<String>> typingUsers)?
messagesLoaded, messagesLoaded,
TResult? Function(String message, Map<String, Set<String>> typingUsers)? TResult? Function(String message, Map<String, Set<String>> typingUsers)?
error, error,
@@ -894,8 +894,8 @@ class _$ChatSelectedImpl implements _ChatSelected {
TResult Function(Chat chat, List<Message> messages, TResult Function(Chat chat, List<Message> messages,
Map<String, Set<String>> typingUsers)? Map<String, Set<String>> typingUsers)?
chatSelected, chatSelected,
TResult Function( TResult Function(Chat chat, List<Message> messages,
List<Message> messages, Map<String, Set<String>> typingUsers)? Map<String, Set<String>> typingUsers)?
messagesLoaded, messagesLoaded,
TResult Function(String message, Map<String, Set<String>> typingUsers)? TResult Function(String message, Map<String, Set<String>> typingUsers)?
error, error,
@@ -973,7 +973,12 @@ abstract class _$$MessagesLoadedImplCopyWith<$Res>
__$$MessagesLoadedImplCopyWithImpl<$Res>; __$$MessagesLoadedImplCopyWithImpl<$Res>;
@override @override
@useResult @useResult
$Res call({List<Message> messages, Map<String, Set<String>> typingUsers}); $Res call(
{Chat chat,
List<Message> messages,
Map<String, Set<String>> typingUsers});
$ChatCopyWith<$Res> get chat;
} }
/// @nodoc /// @nodoc
@@ -987,10 +992,15 @@ class __$$MessagesLoadedImplCopyWithImpl<$Res>
@pragma('vm:prefer-inline') @pragma('vm:prefer-inline')
@override @override
$Res call({ $Res call({
Object? chat = null,
Object? messages = null, Object? messages = null,
Object? typingUsers = null, Object? typingUsers = null,
}) { }) {
return _then(_$MessagesLoadedImpl( return _then(_$MessagesLoadedImpl(
null == chat
? _value.chat
: chat // ignore: cast_nullable_to_non_nullable
as Chat,
null == messages null == messages
? _value._messages ? _value._messages
: messages // ignore: cast_nullable_to_non_nullable : messages // ignore: cast_nullable_to_non_nullable
@@ -1001,16 +1011,26 @@ class __$$MessagesLoadedImplCopyWithImpl<$Res>
as Map<String, Set<String>>, as Map<String, Set<String>>,
)); ));
} }
@override
@pragma('vm:prefer-inline')
$ChatCopyWith<$Res> get chat {
return $ChatCopyWith<$Res>(_value.chat, (value) {
return _then(_value.copyWith(chat: value));
});
}
} }
/// @nodoc /// @nodoc
class _$MessagesLoadedImpl implements _MessagesLoaded { class _$MessagesLoadedImpl implements _MessagesLoaded {
const _$MessagesLoadedImpl(final List<Message> messages, const _$MessagesLoadedImpl(this.chat, final List<Message> messages,
{final Map<String, Set<String>> typingUsers = const {}}) {final Map<String, Set<String>> typingUsers = const {}})
: _messages = messages, : _messages = messages,
_typingUsers = typingUsers; _typingUsers = typingUsers;
@override
final Chat chat;
final List<Message> _messages; final List<Message> _messages;
@override @override
List<Message> get messages { List<Message> get messages {
@@ -1030,7 +1050,7 @@ class _$MessagesLoadedImpl implements _MessagesLoaded {
@override @override
String toString() { String toString() {
return 'ChatState.messagesLoaded(messages: $messages, typingUsers: $typingUsers)'; return 'ChatState.messagesLoaded(chat: $chat, messages: $messages, typingUsers: $typingUsers)';
} }
@override @override
@@ -1038,6 +1058,7 @@ class _$MessagesLoadedImpl implements _MessagesLoaded {
return identical(this, other) || return identical(this, other) ||
(other.runtimeType == runtimeType && (other.runtimeType == runtimeType &&
other is _$MessagesLoadedImpl && other is _$MessagesLoadedImpl &&
(identical(other.chat, chat) || other.chat == chat) &&
const DeepCollectionEquality().equals(other._messages, _messages) && const DeepCollectionEquality().equals(other._messages, _messages) &&
const DeepCollectionEquality() const DeepCollectionEquality()
.equals(other._typingUsers, _typingUsers)); .equals(other._typingUsers, _typingUsers));
@@ -1046,6 +1067,7 @@ class _$MessagesLoadedImpl implements _MessagesLoaded {
@override @override
int get hashCode => Object.hash( int get hashCode => Object.hash(
runtimeType, runtimeType,
chat,
const DeepCollectionEquality().hash(_messages), const DeepCollectionEquality().hash(_messages),
const DeepCollectionEquality().hash(_typingUsers)); const DeepCollectionEquality().hash(_typingUsers));
@@ -1067,14 +1089,14 @@ class _$MessagesLoadedImpl implements _MessagesLoaded {
required TResult Function(Chat chat, List<Message> messages, required TResult Function(Chat chat, List<Message> messages,
Map<String, Set<String>> typingUsers) Map<String, Set<String>> typingUsers)
chatSelected, chatSelected,
required TResult Function( required TResult Function(Chat chat, List<Message> messages,
List<Message> messages, Map<String, Set<String>> typingUsers) Map<String, Set<String>> typingUsers)
messagesLoaded, messagesLoaded,
required TResult Function( required TResult Function(
String message, Map<String, Set<String>> typingUsers) String message, Map<String, Set<String>> typingUsers)
error, error,
}) { }) {
return messagesLoaded(messages, typingUsers); return messagesLoaded(chat, messages, typingUsers);
} }
@override @override
@@ -1087,13 +1109,13 @@ class _$MessagesLoadedImpl implements _MessagesLoaded {
TResult? Function(Chat chat, List<Message> messages, TResult? Function(Chat chat, List<Message> messages,
Map<String, Set<String>> typingUsers)? Map<String, Set<String>> typingUsers)?
chatSelected, chatSelected,
TResult? Function( TResult? Function(Chat chat, List<Message> messages,
List<Message> messages, Map<String, Set<String>> typingUsers)? Map<String, Set<String>> typingUsers)?
messagesLoaded, messagesLoaded,
TResult? Function(String message, Map<String, Set<String>> typingUsers)? TResult? Function(String message, Map<String, Set<String>> typingUsers)?
error, error,
}) { }) {
return messagesLoaded?.call(messages, typingUsers); return messagesLoaded?.call(chat, messages, typingUsers);
} }
@override @override
@@ -1106,15 +1128,15 @@ class _$MessagesLoadedImpl implements _MessagesLoaded {
TResult Function(Chat chat, List<Message> messages, TResult Function(Chat chat, List<Message> messages,
Map<String, Set<String>> typingUsers)? Map<String, Set<String>> typingUsers)?
chatSelected, chatSelected,
TResult Function( TResult Function(Chat chat, List<Message> messages,
List<Message> messages, Map<String, Set<String>> typingUsers)? Map<String, Set<String>> typingUsers)?
messagesLoaded, messagesLoaded,
TResult Function(String message, Map<String, Set<String>> typingUsers)? TResult Function(String message, Map<String, Set<String>> typingUsers)?
error, error,
required TResult orElse(), required TResult orElse(),
}) { }) {
if (messagesLoaded != null) { if (messagesLoaded != null) {
return messagesLoaded(messages, typingUsers); return messagesLoaded(chat, messages, typingUsers);
} }
return orElse(); return orElse();
} }
@@ -1164,9 +1186,10 @@ class _$MessagesLoadedImpl implements _MessagesLoaded {
} }
abstract class _MessagesLoaded implements ChatState { abstract class _MessagesLoaded implements ChatState {
const factory _MessagesLoaded(final List<Message> messages, const factory _MessagesLoaded(final Chat chat, final List<Message> messages,
{final Map<String, Set<String>> typingUsers}) = _$MessagesLoadedImpl; {final Map<String, Set<String>> typingUsers}) = _$MessagesLoadedImpl;
Chat get chat;
List<Message> get messages; List<Message> get messages;
@override @override
Map<String, Set<String>> get typingUsers; Map<String, Set<String>> get typingUsers;
@@ -1268,8 +1291,8 @@ class _$ChatErrorImpl implements ChatError {
required TResult Function(Chat chat, List<Message> messages, required TResult Function(Chat chat, List<Message> messages,
Map<String, Set<String>> typingUsers) Map<String, Set<String>> typingUsers)
chatSelected, chatSelected,
required TResult Function( required TResult Function(Chat chat, List<Message> messages,
List<Message> messages, Map<String, Set<String>> typingUsers) Map<String, Set<String>> typingUsers)
messagesLoaded, messagesLoaded,
required TResult Function( required TResult Function(
String message, Map<String, Set<String>> typingUsers) String message, Map<String, Set<String>> typingUsers)
@@ -1288,8 +1311,8 @@ class _$ChatErrorImpl implements ChatError {
TResult? Function(Chat chat, List<Message> messages, TResult? Function(Chat chat, List<Message> messages,
Map<String, Set<String>> typingUsers)? Map<String, Set<String>> typingUsers)?
chatSelected, chatSelected,
TResult? Function( TResult? Function(Chat chat, List<Message> messages,
List<Message> messages, Map<String, Set<String>> typingUsers)? Map<String, Set<String>> typingUsers)?
messagesLoaded, messagesLoaded,
TResult? Function(String message, Map<String, Set<String>> typingUsers)? TResult? Function(String message, Map<String, Set<String>> typingUsers)?
error, error,
@@ -1307,8 +1330,8 @@ class _$ChatErrorImpl implements ChatError {
TResult Function(Chat chat, List<Message> messages, TResult Function(Chat chat, List<Message> messages,
Map<String, Set<String>> typingUsers)? Map<String, Set<String>> typingUsers)?
chatSelected, chatSelected,
TResult Function( TResult Function(Chat chat, List<Message> messages,
List<Message> messages, Map<String, Set<String>> typingUsers)? Map<String, Set<String>> typingUsers)?
messagesLoaded, messagesLoaded,
TResult Function(String message, Map<String, Set<String>> typingUsers)? TResult Function(String message, Map<String, Set<String>> typingUsers)?
error, error,
@@ -35,44 +35,48 @@ class _ChatDetailPageState extends State<ChatDetailPage> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return BlocBuilder<ChatBloc, ChatState>( return Scaffold(
builder: (context, state) { appBar: AppBar(
final currentChat = state.maybeWhen( centerTitle: false,
chatSelected: (chat, _, __) => chat, title: BlocBuilder<ChatBloc, ChatState>(
orElse: () => widget.chat, builder: (context, state) {
); final currentChat = state.maybeWhen(
chatSelected: (chat, _, __) => chat,
return Scaffold( messagesLoaded: (chat, _, __) => chat,
appBar: AppBar( orElse: () => widget.chat,
centerTitle: false, );
title: Column( return Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Text(currentChat.type == 'favorites' ? AppLocalizations.of(context)!.favorites : currentChat.title), Text(currentChat.type == 'favorites' ? AppLocalizations.of(context)!.favorites : currentChat.title),
if (currentChat.type != 'favorites') if (currentChat.type != 'favorites')
_buildPresenceStatus(currentChat, state), _buildPresenceStatus(currentChat, state),
], ],
), );
actions: [ },
IconButton(icon: const Icon(Icons.more_vert), onPressed: () {}), ),
], actions: [
), IconButton(icon: const Icon(Icons.more_vert), onPressed: () {}),
body: Column( ],
children: [ ),
Expanded( body: Column(
child: state.maybeWhen( children: [
Expanded(
child: BlocBuilder<ChatBloc, ChatState>(
builder: (context, state) {
return state.maybeWhen(
chatSelected: (_, messages, __) => _buildMessageList(messages), chatSelected: (_, messages, __) => _buildMessageList(messages),
messagesLoaded: (messages, _) => _buildMessageList(messages), messagesLoaded: (_, messages, __) => _buildMessageList(messages),
loading: (_) => const Center(child: CircularProgressIndicator()), loading: (_) => const Center(child: CircularProgressIndicator()),
error: (msg, _) => Center(child: Text('Ошибка: $msg')), error: (msg, _) => Center(child: Text('Ошибка: $msg')),
orElse: () => const Center(child: Text('Начните общение')), orElse: () => const Center(child: Text('Начните общение')),
), );
), },
_buildMessageInput(currentChat), ),
],
), ),
); _buildMessageInput(widget.chat),
}, ],
),
); );
} }
@@ -29,6 +29,8 @@ class _ChatsPageState extends State<ChatsPage> {
context.read<ChatBloc>().add(ChatEvent.chatsLoaded(currentUserId: userId)); context.read<ChatBloc>().add(ChatEvent.chatsLoaded(currentUserId: userId));
} }
bool _isNavigating = false;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final l10n = AppLocalizations.of(context)!; final l10n = AppLocalizations.of(context)!;
@@ -48,6 +50,21 @@ class _ChatsPageState extends State<ChatsPage> {
listener: (context, state) { listener: (context, state) {
state.whenOrNull( state.whenOrNull(
chatSelected: (chat, _, __) { chatSelected: (chat, _, __) {
if (_isNavigating) return;
// Extra safety: check if we are already on chat_detail
bool isAlreadyOnDetail = false;
Navigator.popUntil(context, (route) {
if (route.settings.name == 'chat_detail') {
isAlreadyOnDetail = true;
}
return true;
});
if (isAlreadyOnDetail) return;
_isNavigating = true;
final authState = context.read<AuthBloc>().state; final authState = context.read<AuthBloc>().state;
final userId = authState.maybeWhen( final userId = authState.maybeWhen(
authenticated: (id) => id, authenticated: (id) => id,
@@ -56,12 +73,14 @@ class _ChatsPageState extends State<ChatsPage> {
Navigator.of(context).push( Navigator.of(context).push(
MaterialPageRoute( MaterialPageRoute(
settings: const RouteSettings(name: 'chat_detail'),
builder: (_) => ChatDetailPage( builder: (_) => ChatDetailPage(
chat: chat, chat: chat,
currentUserId: userId, currentUserId: userId,
), ),
), ),
).then((_) { ).then((_) {
_isNavigating = false;
// Reload chats when returning from detail page // Reload chats when returning from detail page
if (context.mounted) { if (context.mounted) {
context.read<ChatBloc>().add(ChatEvent.chatsLoaded(currentUserId: userId)); context.read<ChatBloc>().add(ChatEvent.chatsLoaded(currentUserId: userId));