Flutter
[Flutter] 채팅앱 만들기 #6
상도동 카르마
2023. 3. 5. 12:08
What to do?
View Model
Reference
Base View Model
/view_model/base_view_model.dart
abstract class BaseViewModel {
final IDataSource _dataSource;
BaseViewModel(this._dataSource);
@protected
Future<void> addMessage(LocalMessage localMessage) async {
if (!await _isExitingChat(localMessage.chatId)) await _dataSource.addMessage(localMessage);
await _dataSource.addMessage(localMessage);
}
Future<bool> _isExitingChat(String chatId) async {
return await _dataSource.findChat(chatId) != null;
}
Future<void> _createNewChat(String chatId) async {
final chat = Chat(chatId);
await _dataSource.addChat(chat);
}
}
ChatsViewModel
/view_model/chats_view_model.dart
class ChatsViewModel extends BaseViewModel {
final IDataSource _dataSource;
ChatsViewModel(this._dataSource) : super(_dataSource);
Future<List<Chat>> getChats() async => await _dataSource.findAllChat();
Future<void> receiveMessage(Message message) async {
LocalMessage localMessage =
LocalMessage(message.from, message, ReceiptStatus.delivered);
await addMessage(localMessage);
}
}
ChatViewModel
/view_model/chat_view_model.dart
class ChatViewModel extends BaseViewModel {
final IDataSource _dataSource;
String _chatId;
int otherMessages = 0;
ChatViewModel(this._dataSource) : super(_dataSource);
Future<List<LocalMessage>> getMessages(String chatId) async {
final messages = await _dataSource.findMessages(chatId);
if (messages.isNotEmpty) _chatId = chatId;
return messages;
}
Future<void> sentMessage(Message message) async {
LocalMessage localMessage =
LocalMessage(message.to, message, ReceiptStatus.sent);
if (_chatId.isNotEmpty) return await _dataSource.addMessage(localMessage);
_chatId = localMessage.chatId;
await addMessage(localMessage);
}
Future<void> receiveMessage(Message message) async {
LocalMessage localMessage =
LocalMessage(message.from, message, ReceiptStatus.delivered);
if (localMessage.chatId != _chatId) otherMessages++;
await addMessage(localMessage);
}
}