- Replace all Firebase* repositories with Api* repositories using HTTP + SharedPreferences JWT - Remove Firebase.initializeApp() and firebase_messaging background handler from main.dart - Update DI (app_di.dart) to inject Api* repositories instead of Firebase* ones - Replace all Timestamp/cloud_firestore usage with ISO 8601 String dates - Stub PhoneVerificationService (Firebase phone OTP → backend OTP when implemented) - Add ApiService singleton with JWT management in lib/services/ - Legacy firebase_*_repository.dart files preserved for Fase 4 cleanup Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
64 lines
1.5 KiB
Dart
64 lines
1.5 KiB
Dart
import 'dart:developer';
|
|
|
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
|
import 'package:equatable/equatable.dart';
|
|
import 'package:chat_repository/chat_repository.dart';
|
|
|
|
part 'chat_event.dart';
|
|
part 'chat_state.dart';
|
|
|
|
class ChatBloc extends Bloc<ChatEvent, ChatState> {
|
|
final ApiChatRepository _chatRepository;
|
|
|
|
ChatBloc({
|
|
required ApiChatRepository chatRepository,
|
|
}) : _chatRepository = chatRepository,
|
|
super(ChatInitial()) {
|
|
on<LoadChatEvent>(_onLoadChatEvent);
|
|
on<SendMessageEvent>(_onSendMessageEvent);
|
|
}
|
|
|
|
void _onLoadChatEvent(LoadChatEvent event, Emitter<ChatState> emit) async {
|
|
bool autoCreate = true;
|
|
|
|
try {
|
|
emit(ChatLoading());
|
|
|
|
Stream<ChatEntity?> chatStream = _chatRepository.getChatById(
|
|
event.serviceId,
|
|
);
|
|
|
|
await for (var chat in chatStream) {
|
|
if (chat == null) {
|
|
if (autoCreate) {
|
|
chat = await _chatRepository.createNewChat(
|
|
event.serviceId,
|
|
event.userId,
|
|
event.professionalId,
|
|
);
|
|
|
|
autoCreate = false;
|
|
} else {
|
|
emit(ChatFailure());
|
|
}
|
|
} else {
|
|
emit(ChatLoaded(chat: chat));
|
|
}
|
|
}
|
|
} catch (e) {
|
|
log(e.toString());
|
|
emit(ChatFailure());
|
|
}
|
|
}
|
|
|
|
void _onSendMessageEvent(
|
|
SendMessageEvent event, Emitter<ChatState> emit) async {
|
|
try {
|
|
await _chatRepository.sendMessage(event.serviceId, event.message);
|
|
} catch (e) {
|
|
log(e.toString());
|
|
emit(ChatFailure());
|
|
}
|
|
}
|
|
}
|