본문 바로가기

Flutter

[Flutter] 채팅앱 만들기 #6

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