Skip to content

Commit

Permalink
chat
Browse files Browse the repository at this point in the history
  • Loading branch information
Dat-TG committed Dec 15, 2023
1 parent 0ed5c59 commit 1014f2d
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 16 deletions.
12 changes: 9 additions & 3 deletions lib/presentation/chat_screen/chat_screen.dart
Original file line number Diff line number Diff line change
Expand Up @@ -68,14 +68,20 @@ class _ChatScreenState extends State<ChatScreen> {
child: CustomProgressIndicatorWidget(),
);
}
print(_chatStore.chatThreads);
return ListView.builder(
controller: _controller,
itemCount:
_chatStore.chatThreads[chatThreadIndex].messages.length,
_chatStore.chatThreads[chatThreadIndex].messages.length +
(_chatStore.isLoading ? 1 : 0),
shrinkWrap: true,
padding: EdgeInsets.zero,
itemBuilder: (context, index) {
if (index > 0 &&
index ==
_chatStore
.chatThreads[chatThreadIndex].messages.length) {
return CustomProgressIndicatorWidget();
}
return Container(
padding: EdgeInsets.only(
left: (_chatStore.chatThreads[chatThreadIndex]
Expand Down Expand Up @@ -158,7 +164,7 @@ class _ChatScreenState extends State<ChatScreen> {
);
}),
),
ChatInput(onSend: () {}),
ChatInput(onSend: _chatStore.sendMessage),
],
);
}
Expand Down
36 changes: 23 additions & 13 deletions lib/presentation/chat_screen/store/chat_store.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import 'package:boilerplate/domain/entity/message/message.dart';
import 'package:boilerplate/domain/entity/message/message_with_time.dart';
import 'package:boilerplate/domain/usecase/message/get_all_chat_threads_usecase.dart';
import 'package:boilerplate/domain/usecase/message/send_message_usecase.dart';
import 'package:boilerplate/domain/usecase/message/update_chat_thread_usecase.dart';

import 'package:mobx/mobx.dart';

Expand All @@ -17,6 +18,7 @@ abstract class _ChatStore with Store {
this.errorStore,
this._sendMessageUseCase,
this._getAllChatThreadsUseCase,
this._updateChatThreadUseCase,
) {
// load all chat threads
getAllChatThreads();
Expand All @@ -27,6 +29,7 @@ abstract class _ChatStore with Store {
// use cases:-----------------------------------------------------------------
final SendMessageUseCase _sendMessageUseCase;
final GetAllChatThreadsUseCase _getAllChatThreadsUseCase;
final UpdateChatThreadUseCase _updateChatThreadUseCase;

// store for handling error messages
final ErrorStore errorStore;
Expand Down Expand Up @@ -58,8 +61,13 @@ abstract class _ChatStore with Store {
@observable
ObservableFuture<Message?> sendMessageFuture = ObservableFuture.value(null);

@observable
ObservableFuture<int?> updateChatThreadFuture = ObservableFuture.value(null);

@computed
bool get isLoading => sendMessageFuture.status == FutureStatus.pending;
bool get isLoading =>
sendMessageFuture.status == FutureStatus.pending ||
updateChatThreadFuture.status == FutureStatus.pending;

@computed
bool get isLoadingChatThreads =>
Expand Down Expand Up @@ -110,18 +118,20 @@ abstract class _ChatStore with Store {

await future.then((value) async {
print('response message ${value.toMap()}');
// TODO: update chat thread in db
// await _saveChatThreadUseCase.call(
// params: ChatThread(
// id: time.millisecondsSinceEpoch,
// subject: message.content,
// messages: [
// MessageWithTime(message, time),
// MessageWithTime(value, time),
// ],
// ),
// );
this.success = true;
final newChatThread =
chatThreads.firstWhere((element) => element.id == id);
newChatThread.messages.add(
MessageWithTime(
value,
DateTime.now(),
),
);
print(newChatThread);
final future = _updateChatThreadUseCase.call(
params: newChatThread,
);
updateChatThreadFuture = ObservableFuture(future);
await future.then((value) => {this.success = true});
}).catchError((e) {
print(e);
this.success = false;
Expand Down
2 changes: 2 additions & 0 deletions lib/presentation/di/module/store_module.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import 'package:boilerplate/domain/repository/setting/setting_repository.dart';
import 'package:boilerplate/domain/usecase/message/get_all_chat_threads_usecase.dart';
import 'package:boilerplate/domain/usecase/message/save_chat_thread_usecase.dart';
import 'package:boilerplate/domain/usecase/message/send_message_usecase.dart';
import 'package:boilerplate/domain/usecase/message/update_chat_thread_usecase.dart';
import 'package:boilerplate/domain/usecase/post/get_post_usecase.dart';
import 'package:boilerplate/domain/usecase/user/is_logged_in_usecase.dart';
import 'package:boilerplate/domain/usecase/user/login_usecase.dart';
Expand Down Expand Up @@ -73,6 +74,7 @@ mixin StoreModule {
getIt<ErrorStore>(),
getIt<SendMessageUseCase>(),
getIt<GetAllChatThreadsUseCase>(),
getIt<UpdateChatThreadUseCase>(),
),
);
}
Expand Down

0 comments on commit 1014f2d

Please sign in to comment.