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);
}
}
'Flutter' 카테고리의 다른 글
[Flutter] 채팅앱 만들기 #8 (0) | 2023.03.07 |
---|---|
[Flutter] 채팅앱 만들기 #7 (0) | 2023.03.05 |
[Flutter] 채팅앱 만들기 #5 (0) | 2023.03.04 |
[Flutter] 채팅앱 만들기 #4 (0) | 2023.03.01 |
[Flutter] 채팅앱 만들기 #3 (0) | 2023.03.01 |