From 6bc4d4d2edeb176d4be9810985f7a796e1fa282d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elias=20M=C3=BCller?= Date: Tue, 12 Sep 2023 09:31:34 +0200 Subject: [PATCH] Finished SplitView for Tablet devices --- lib/notification/notifyUpdater.dart | 2 +- lib/view/pages/talk/chatList.dart | 5 ++- lib/view/pages/talk/chatView.dart | 4 +- .../talk/{ => components}/chatBubble.dart | 24 ++++++------ .../talk/{ => components}/chatMessage.dart | 8 ++-- .../talk/{ => components}/chatTextfield.dart | 18 ++++----- .../pages/talk/{ => components}/chatTile.dart | 38 +++++++++---------- .../talk/components/splitViewPlaceholder.dart | 22 +++++++++++ lib/view/pages/talk/messageReactions.dart | 2 +- lib/view/pages/talk/searchChat.dart | 2 +- 10 files changed, 75 insertions(+), 50 deletions(-) rename lib/view/pages/talk/{ => components}/chatBubble.dart (94%) rename lib/view/pages/talk/{ => components}/chatMessage.dart (87%) rename lib/view/pages/talk/{ => components}/chatTextfield.dart (92%) rename lib/view/pages/talk/{ => components}/chatTile.dart (84%) create mode 100644 lib/view/pages/talk/components/splitViewPlaceholder.dart diff --git a/lib/notification/notifyUpdater.dart b/lib/notification/notifyUpdater.dart index a6740dc..b445f0f 100644 --- a/lib/notification/notifyUpdater.dart +++ b/lib/notification/notifyUpdater.dart @@ -6,12 +6,12 @@ import 'dart:developer'; import 'package:crypto/crypto.dart'; import 'package:fast_rsa/fast_rsa.dart'; import 'package:firebase_messaging/firebase_messaging.dart'; -import 'package:marianum_mobile/storage/base/settingsProvider.dart'; import '../api/mhsl/notify/register/notifyRegister.dart'; import '../api/mhsl/notify/register/notifyRegisterParams.dart'; import '../model/accountData.dart'; import '../model/endpointData.dart'; +import '../storage/base/settingsProvider.dart'; import '../widget/confirmDialog.dart'; class NotifyUpdater { diff --git a/lib/view/pages/talk/chatList.dart b/lib/view/pages/talk/chatList.dart index 7de3d47..1e6e9bf 100644 --- a/lib/view/pages/talk/chatList.dart +++ b/lib/view/pages/talk/chatList.dart @@ -12,7 +12,8 @@ import '../../../notification/notifyUpdater.dart'; import '../../../storage/base/settingsProvider.dart'; import '../../../widget/confirmDialog.dart'; import '../../../widget/loadingSpinner.dart'; -import 'chatTile.dart'; +import 'components/chatTile.dart'; +import 'components/splitViewPlaceholder.dart'; import 'joinChat.dart'; import 'searchChat.dart'; @@ -74,6 +75,8 @@ class _ChatListState extends State { ChatListProps? latestData; return SplitView.material( + placeholder: const SplitViewPlaceholder(), + breakpoint: 1000, child: Scaffold( appBar: AppBar( title: const Text("Talk"), diff --git a/lib/view/pages/talk/chatView.dart b/lib/view/pages/talk/chatView.dart index f11b86a..43238a7 100644 --- a/lib/view/pages/talk/chatView.dart +++ b/lib/view/pages/talk/chatView.dart @@ -11,8 +11,8 @@ import '../../../theming/appTheme.dart'; import '../../../model/chatList/chatProps.dart'; import '../../../widget/loadingSpinner.dart'; import '../../../widget/userAvatar.dart'; -import 'chatBubble.dart'; -import 'chatTextfield.dart'; +import 'components/chatBubble.dart'; +import 'components/chatTextfield.dart'; class ChatView extends StatefulWidget { final GetRoomResponseObject room; diff --git a/lib/view/pages/talk/chatBubble.dart b/lib/view/pages/talk/components/chatBubble.dart similarity index 94% rename from lib/view/pages/talk/chatBubble.dart rename to lib/view/pages/talk/components/chatBubble.dart index 805e4d8..e456d22 100644 --- a/lib/view/pages/talk/chatBubble.dart +++ b/lib/view/pages/talk/components/chatBubble.dart @@ -6,19 +6,19 @@ import 'package:flutter/services.dart'; import 'package:jiffy/jiffy.dart'; import 'package:provider/provider.dart'; -import '../../../api/marianumcloud/talk/chat/getChatResponse.dart'; -import '../../../api/marianumcloud/talk/deleteMessage/deleteMessage.dart'; -import '../../../api/marianumcloud/talk/deleteReactMessage/deleteReactMessage.dart'; -import '../../../api/marianumcloud/talk/deleteReactMessage/deleteReactMessageParams.dart'; -import '../../../api/marianumcloud/talk/reactMessage/reactMessage.dart'; -import '../../../api/marianumcloud/talk/reactMessage/reactMessageParams.dart'; -import '../../../api/marianumcloud/talk/room/getRoomResponse.dart'; -import '../../../model/chatList/chatProps.dart'; -import '../../../theming/appTheme.dart'; -import '../../../widget/debug/debugTile.dart'; -import '../files/fileElement.dart'; +import '../../../../api/marianumcloud/talk/chat/getChatResponse.dart'; +import '../../../../api/marianumcloud/talk/deleteMessage/deleteMessage.dart'; +import '../../../../api/marianumcloud/talk/deleteReactMessage/deleteReactMessage.dart'; +import '../../../../api/marianumcloud/talk/deleteReactMessage/deleteReactMessageParams.dart'; +import '../../../../api/marianumcloud/talk/reactMessage/reactMessage.dart'; +import '../../../../api/marianumcloud/talk/reactMessage/reactMessageParams.dart'; +import '../../../../api/marianumcloud/talk/room/getRoomResponse.dart'; +import '../../../../model/chatList/chatProps.dart'; +import '../../../../theming/appTheme.dart'; +import '../../../../widget/debug/debugTile.dart'; +import '../../files/fileElement.dart'; import 'chatMessage.dart'; -import 'messageReactions.dart'; +import '../messageReactions.dart'; class ChatBubble extends StatefulWidget { final BuildContext context; diff --git a/lib/view/pages/talk/chatMessage.dart b/lib/view/pages/talk/components/chatMessage.dart similarity index 87% rename from lib/view/pages/talk/chatMessage.dart rename to lib/view/pages/talk/components/chatMessage.dart index 2ecd0d7..4b220c8 100644 --- a/lib/view/pages/talk/chatMessage.dart +++ b/lib/view/pages/talk/components/chatMessage.dart @@ -4,10 +4,10 @@ import 'package:flutter/material.dart'; import 'package:flutter_linkify/flutter_linkify.dart'; import 'package:url_launcher/url_launcher_string.dart'; -import '../../../api/marianumcloud/talk/chat/getChatResponse.dart'; -import '../../../api/marianumcloud/talk/chat/richObjectStringProcessor.dart'; -import '../../../model/accountData.dart'; -import '../../../model/endpointData.dart'; +import '../../../../api/marianumcloud/talk/chat/getChatResponse.dart'; +import '../../../../api/marianumcloud/talk/chat/richObjectStringProcessor.dart'; +import '../../../../model/accountData.dart'; +import '../../../../model/endpointData.dart'; class ChatMessage { String originalMessage; diff --git a/lib/view/pages/talk/chatTextfield.dart b/lib/view/pages/talk/components/chatTextfield.dart similarity index 92% rename from lib/view/pages/talk/chatTextfield.dart rename to lib/view/pages/talk/components/chatTextfield.dart index ca7e5a8..0e2424d 100644 --- a/lib/view/pages/talk/chatTextfield.dart +++ b/lib/view/pages/talk/components/chatTextfield.dart @@ -2,18 +2,18 @@ import 'dart:io'; import 'package:flutter/material.dart'; import 'package:loader_overlay/loader_overlay.dart'; -import 'package:marianum_mobile/storage/base/settingsProvider.dart'; import 'package:provider/provider.dart'; import 'package:uuid/uuid.dart'; -import '../../../api/marianumcloud/files-sharing/fileSharingApi.dart'; -import '../../../api/marianumcloud/files-sharing/fileSharingApiParams.dart'; -import '../../../api/marianumcloud/talk/sendMessage/sendMessage.dart'; -import '../../../api/marianumcloud/talk/sendMessage/sendMessageParams.dart'; -import '../../../api/marianumcloud/webdav/webdavApi.dart'; -import '../../../model/chatList/chatProps.dart'; -import '../../../widget/filePick.dart'; -import '../files/fileUploadDialog.dart'; +import '../../../../api/marianumcloud/files-sharing/fileSharingApi.dart'; +import '../../../../api/marianumcloud/files-sharing/fileSharingApiParams.dart'; +import '../../../../api/marianumcloud/talk/sendMessage/sendMessage.dart'; +import '../../../../api/marianumcloud/talk/sendMessage/sendMessageParams.dart'; +import '../../../../api/marianumcloud/webdav/webdavApi.dart'; +import '../../../../model/chatList/chatProps.dart'; +import '../../../../storage/base/settingsProvider.dart'; +import '../../../../widget/filePick.dart'; +import '../../files/fileUploadDialog.dart'; class ChatTextfield extends StatefulWidget { final String sendToToken; diff --git a/lib/view/pages/talk/chatTile.dart b/lib/view/pages/talk/components/chatTile.dart similarity index 84% rename from lib/view/pages/talk/chatTile.dart rename to lib/view/pages/talk/components/chatTile.dart index 9d71294..d2e9524 100644 --- a/lib/view/pages/talk/chatTile.dart +++ b/lib/view/pages/talk/components/chatTile.dart @@ -2,20 +2,21 @@ import 'package:flutter/material.dart'; import 'package:flutter_split_view/flutter_split_view.dart'; import 'package:jiffy/jiffy.dart'; -import 'package:marianum_mobile/widget/userAvatar.dart'; +import 'package:persistent_bottom_nav_bar/persistent_tab_view.dart'; import 'package:provider/provider.dart'; import 'package:shared_preferences/shared_preferences.dart'; -import '../../../api/marianumcloud/talk/chat/richObjectStringProcessor.dart'; -import '../../../api/marianumcloud/talk/leaveRoom/leaveRoom.dart'; -import '../../../api/marianumcloud/talk/room/getRoomResponse.dart'; -import '../../../api/marianumcloud/talk/setFavorite/setFavorite.dart'; -import '../../../api/marianumcloud/talk/setReadMarker/setReadMarker.dart'; -import '../../../api/marianumcloud/talk/setReadMarker/setReadMarkerParams.dart'; -import '../../../model/chatList/chatProps.dart'; -import '../../../widget/confirmDialog.dart'; -import '../../../widget/debug/debugTile.dart'; -import 'chatView.dart'; +import '../../../../api/marianumcloud/talk/chat/richObjectStringProcessor.dart'; +import '../../../../api/marianumcloud/talk/leaveRoom/leaveRoom.dart'; +import '../../../../api/marianumcloud/talk/room/getRoomResponse.dart'; +import '../../../../api/marianumcloud/talk/setFavorite/setFavorite.dart'; +import '../../../../api/marianumcloud/talk/setReadMarker/setReadMarker.dart'; +import '../../../../api/marianumcloud/talk/setReadMarker/setReadMarkerParams.dart'; +import '../../../../model/chatList/chatProps.dart'; +import '../../../../widget/confirmDialog.dart'; +import '../../../../widget/debug/debugTile.dart'; +import '../../../../widget/userAvatar.dart'; +import '../chatView.dart'; class ChatTile extends StatefulWidget { final GetRoomResponseObject data; @@ -58,7 +59,7 @@ class _ChatTileState extends State { return Consumer(builder: (context, chatData, child) { return ListTile( style: ListTileStyle.list, - tileColor: chatData.currentToken() == widget.data.token + tileColor: chatData.currentToken() == widget.data.token && SplitView.of(context).pageCount > 1 ? Theme.of(context).primaryColor.withAlpha(100) : null, leading: Stack( @@ -117,14 +118,13 @@ class _ChatTileState extends State { ), onTap: () async { setCurrentAsRead(); - SplitView.of(context).setSecondary(ChatView(room: widget.data, selfId: username, avatar: circleAvatar)); + ChatView view = ChatView(room: widget.data, selfId: username, avatar: circleAvatar); + if(SplitView.of(context).isSecondaryVisible) { + SplitView.of(context).setSecondary(view); + } else { + PersistentNavBarNavigator.pushNewScreen(context, screen: view, withNavBar: false); + } Provider.of(context, listen: false).setQueryToken(widget.data.token); - - // PersistentNavBarNavigator.pushNewScreen( - // context, - // screen: ChatView(room: widget.data, selfId: username, avatar: circleAvatar), - // withNavBar: false - // ); }, onLongPress: () { if(widget.disableContextActions) return; diff --git a/lib/view/pages/talk/components/splitViewPlaceholder.dart b/lib/view/pages/talk/components/splitViewPlaceholder.dart new file mode 100644 index 0000000..60268f4 --- /dev/null +++ b/lib/view/pages/talk/components/splitViewPlaceholder.dart @@ -0,0 +1,22 @@ +import 'package:flutter/material.dart'; + +class SplitViewPlaceholder extends StatelessWidget { + const SplitViewPlaceholder({super.key}); + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar(), + body: Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Image.asset("assets/logo/icon.png", height: 200), + const SizedBox(height: 30), + const Text("Marianum Fulda\nTalk", textAlign: TextAlign.center, style: TextStyle(fontSize: 30)), + ], + ), + ) + ); + } +} diff --git a/lib/view/pages/talk/messageReactions.dart b/lib/view/pages/talk/messageReactions.dart index 0001844..4a7af77 100644 --- a/lib/view/pages/talk/messageReactions.dart +++ b/lib/view/pages/talk/messageReactions.dart @@ -1,7 +1,6 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:marianum_mobile/widget/userAvatar.dart'; import '../../../api/marianumcloud/talk/getReactions/getReactions.dart'; import '../../../api/marianumcloud/talk/getReactions/getReactionsResponse.dart'; @@ -10,6 +9,7 @@ import '../../../widget/centeredLeading.dart'; import '../../../widget/loadingSpinner.dart'; import '../../../widget/placeholderView.dart'; import '../../../widget/unimplementedDialog.dart'; +import '../../../widget/userAvatar.dart'; class MessageReactions extends StatefulWidget { final String token; diff --git a/lib/view/pages/talk/searchChat.dart b/lib/view/pages/talk/searchChat.dart index c566fa9..6b3a4d9 100644 --- a/lib/view/pages/talk/searchChat.dart +++ b/lib/view/pages/talk/searchChat.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; import '../../../api/marianumcloud/talk/room/getRoomResponse.dart'; -import 'chatTile.dart'; +import 'components/chatTile.dart'; class SearchChat extends SearchDelegate { List chats;