From 8123adbe0275ed5783232cb8682a4e4f1a12a3ac Mon Sep 17 00:00:00 2001 From: Julian KOUNE Date: Wed, 27 Sep 2023 16:01:56 +0200 Subject: [PATCH] feat: send files in draft chat web --- lib/pages/chat_draft/draft_chat.dart | 34 ++++++++++++++++++- lib/pages/chat_draft/draft_chat_view.dart | 2 +- lib/presentation/mixins/send_files_mixin.dart | 5 ++- 3 files changed, 36 insertions(+), 5 deletions(-) diff --git a/lib/pages/chat_draft/draft_chat.dart b/lib/pages/chat_draft/draft_chat.dart index d47158b735..f28396d2ef 100644 --- a/lib/pages/chat_draft/draft_chat.dart +++ b/lib/pages/chat_draft/draft_chat.dart @@ -1,9 +1,11 @@ import 'dart:async'; import 'package:emoji_picker_flutter/emoji_picker_flutter.dart'; +import 'package:file_picker/file_picker.dart'; import 'package:fluffychat/di/global/get_it_initializer.dart'; import 'package:fluffychat/domain/app_state/direct_chat/create_direct_chat_success.dart'; import 'package:fluffychat/domain/usecase/create_direct_chat_interactor.dart'; +import 'package:fluffychat/domain/usecase/send_file_on_web_interactor.dart'; import 'package:fluffychat/pages/chat/chat.dart'; import 'package:fluffychat/pages/chat_draft/draft_chat_view.dart'; import 'package:fluffychat/presentation/mixins/common_media_picker_mixin.dart'; @@ -13,6 +15,7 @@ import 'package:fluffychat/presentation/model/chat/chat_router_input_argument.da import 'package:fluffychat/presentation/model/presentation_contact.dart'; import 'package:fluffychat/presentation/model/presentation_contact_constant.dart'; import 'package:fluffychat/utils/network_connection_service.dart'; +import 'package:fluffychat/utils/platform_infos.dart'; import 'package:fluffychat/widgets/matrix.dart'; import 'package:flutter/material.dart'; import 'package:fluttertoast/fluttertoast.dart'; @@ -243,7 +246,15 @@ class DraftChatController extends State setState(() => inputText = text); } - void showMediaPicker(BuildContext context) { + void onSendFileClick(BuildContext context) async { + if (PlatformInfos.isWeb) { + sendFileOnWebAction(context); + } else { + _showMediaPicker(context); + } + } + + void _showMediaPicker(BuildContext context) { final imagePickerController = ImagePickerGridController( AssetCounter(imagePickerMode: ImagePickerMode.multiple), ); @@ -260,6 +271,27 @@ class DraftChatController extends State ); } + @override + void sendFileOnWebAction( + BuildContext context, { + Room? room, + }) async { + final sendFileOnWebInteractor = getIt.get(); + final result = await FilePicker.platform.pickFiles( + withData: true, + ); + if (result == null || result.files.isEmpty) return; + + _createRoom( + onRoomCreatedSuccess: (newRoom) { + sendFileOnWebInteractor.execute( + room: newRoom, + filePickerResult: result, + ); + }, + ); + } + @override Widget build(BuildContext context) { return DraftChatView(controller: this); diff --git a/lib/pages/chat_draft/draft_chat_view.dart b/lib/pages/chat_draft/draft_chat_view.dart index 9665018490..2e4cf08428 100644 --- a/lib/pages/chat_draft/draft_chat_view.dart +++ b/lib/pages/chat_draft/draft_chat_view.dart @@ -100,7 +100,7 @@ class DraftChatView extends StatelessWidget { tooltip: L10n.of(context)!.more, margin: DraftChatViewStyle.buttonAddMoreMargin, icon: Icons.add_circle_outline, - onTap: () => controller.showMediaPicker(context), + onTap: () => controller.onSendFileClick(context), ), Expanded( child: Container( diff --git a/lib/presentation/mixins/send_files_mixin.dart b/lib/presentation/mixins/send_files_mixin.dart index 49b24786b1..c2ce849779 100644 --- a/lib/presentation/mixins/send_files_mixin.dart +++ b/lib/presentation/mixins/send_files_mixin.dart @@ -59,14 +59,13 @@ mixin SendFilesMixin { BuildContext context, { Room? room, }) async { - if (room == null) {} final sendFileOnWebInteractor = getIt.get(); final result = await FilePicker.platform.pickFiles( withData: true, ); - if (result == null && result?.files.isEmpty == true) return; + if (result == null || result.files.isEmpty) return; - sendFileOnWebInteractor.execute(room: room!, filePickerResult: result!); + sendFileOnWebInteractor.execute(room: room!, filePickerResult: result); } void onPickerTypeClick({