4860 dms all chats (#5015)
* feat: initial work for dms => all chats * more navigation updates * change all chats tooltip
This commit is contained in:
parent
bba33b3a21
commit
2e0d38e801
20 changed files with 188 additions and 125 deletions
|
|
@ -46,7 +46,6 @@ import 'package:fluffychat/pangea/common/utils/p_vguard.dart';
|
|||
import 'package:fluffychat/pangea/constructs/construct_identifier.dart';
|
||||
import 'package:fluffychat/pangea/course_creation/course_invite_page.dart';
|
||||
import 'package:fluffychat/pangea/course_creation/selected_course_page.dart';
|
||||
import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart';
|
||||
import 'package:fluffychat/pangea/join_codes/join_with_link_page.dart';
|
||||
import 'package:fluffychat/pangea/learning_settings/settings_learning.dart';
|
||||
import 'package:fluffychat/pangea/login/pages/add_course_page.dart';
|
||||
|
|
@ -993,30 +992,7 @@ abstract class AppRoutes {
|
|||
),
|
||||
);
|
||||
},
|
||||
// #Pangea
|
||||
// redirect: loggedOutRedirect,
|
||||
redirect: (context, state) {
|
||||
String subroute = state.fullPath!.split('roomid').last;
|
||||
if (state.uri.queryParameters.isNotEmpty) {
|
||||
final queryString = state.uri.queryParameters.entries
|
||||
.map((e) => '${e.key}=${e.value}')
|
||||
.join('&');
|
||||
subroute = '$subroute?$queryString';
|
||||
}
|
||||
|
||||
final roomId = state.pathParameters['roomid']!;
|
||||
final room = Matrix.of(context).client.getRoomById(roomId);
|
||||
if (room != null && room.isSpace) {
|
||||
return "/rooms/spaces/${room.id}$subroute";
|
||||
}
|
||||
|
||||
final parent = room?.firstSpaceParent;
|
||||
if (parent != null && state.fullPath != null) {
|
||||
return "/rooms/spaces/${parent.id}/$roomId$subroute";
|
||||
}
|
||||
return loggedOutRedirect(context, state);
|
||||
},
|
||||
// Pangea#
|
||||
redirect: loggedOutRedirect,
|
||||
routes: [
|
||||
GoRoute(
|
||||
path: 'search',
|
||||
|
|
|
|||
|
|
@ -66,6 +66,7 @@ import 'package:fluffychat/pangea/languages/language_service.dart';
|
|||
import 'package:fluffychat/pangea/learning_settings/disable_language_tools_popup.dart';
|
||||
import 'package:fluffychat/pangea/learning_settings/language_mismatch_repo.dart';
|
||||
import 'package:fluffychat/pangea/learning_settings/p_language_dialog.dart';
|
||||
import 'package:fluffychat/pangea/navigation/navigation_util.dart';
|
||||
import 'package:fluffychat/pangea/spaces/load_participants_builder.dart';
|
||||
import 'package:fluffychat/pangea/subscription/widgets/paywall_card.dart';
|
||||
import 'package:fluffychat/pangea/token_info_feedback/show_token_feedback_dialog.dart';
|
||||
|
|
@ -129,7 +130,7 @@ class ChatPage extends StatelessWidget {
|
|||
s: StackTrace.current,
|
||||
data: {"roomId": roomId},
|
||||
);
|
||||
context.go("/rooms");
|
||||
NavigationUtil.goToSpaceRoute('/rooms', context);
|
||||
}
|
||||
|
||||
if (room == null || room.membership == Membership.leave) {
|
||||
|
|
@ -287,7 +288,10 @@ class ChatController extends State<ChatPageWithRoom>
|
|||
future: room.leave,
|
||||
);
|
||||
if (success.error != null) return;
|
||||
context.go('/rooms');
|
||||
// #Pangea
|
||||
// context.go('/rooms');
|
||||
NavigationUtil.goToSpaceRoute('/rooms', context);
|
||||
// Pangea#
|
||||
}
|
||||
|
||||
// #Pangea
|
||||
|
|
@ -808,7 +812,7 @@ class ChatController extends State<ChatPageWithRoom>
|
|||
s: StackTrace.current,
|
||||
data: {"roomId": roomId},
|
||||
);
|
||||
context.go("/rooms");
|
||||
NavigationUtil.goToSpaceRoute('/rooms', context);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -2339,7 +2343,6 @@ class ChatController extends State<ChatPageWithRoom>
|
|||
}
|
||||
|
||||
Future<void> onLeave() async {
|
||||
final parentSpaceId = room.courseParent?.id;
|
||||
final confirmed = await showOkCancelAlertDialog(
|
||||
context: context,
|
||||
title: L10n.of(context).areYouSure,
|
||||
|
|
@ -2363,9 +2366,7 @@ class ChatController extends State<ChatPageWithRoom>
|
|||
);
|
||||
}
|
||||
|
||||
context.go(
|
||||
parentSpaceId != null ? '/rooms/spaces/$parentSpaceId' : '/rooms',
|
||||
);
|
||||
NavigationUtil.goToSpaceRoute('/rooms', context);
|
||||
}
|
||||
|
||||
Future<void> requestRegeneration(String eventId) async {
|
||||
|
|
|
|||
|
|
@ -1,11 +1,11 @@
|
|||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:go_router/go_router.dart';
|
||||
import 'package:matrix/matrix.dart';
|
||||
|
||||
import 'package:fluffychat/config/themes.dart';
|
||||
import 'package:fluffychat/l10n/l10n.dart';
|
||||
import 'package:fluffychat/pages/chat/chat.dart';
|
||||
import 'package:fluffychat/pangea/navigation/navigation_util.dart';
|
||||
import 'package:fluffychat/utils/date_time_extension.dart';
|
||||
import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart';
|
||||
import 'package:fluffychat/utils/sync_status_localization.dart';
|
||||
|
|
@ -37,7 +37,13 @@ class ChatAppBarTitle extends StatelessWidget {
|
|||
? null
|
||||
: () => FluffyThemes.isThreeColumnMode(context)
|
||||
? controller.toggleDisplayChatDetailsColumn()
|
||||
: context.go('/rooms/${room.id}/details'),
|
||||
// #Pangea
|
||||
// : context.go('/rooms/${room.id}/details'),
|
||||
: NavigationUtil.goToSpaceRoute(
|
||||
'/rooms/${room.id}/details',
|
||||
context,
|
||||
),
|
||||
// Pangea#
|
||||
child: Row(
|
||||
children: [
|
||||
Hero(
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@ import 'package:fluffychat/pangea/analytics_misc/level_up/star_rain_widget.dart'
|
|||
import 'package:fluffychat/pangea/chat/widgets/chat_floating_action_button.dart';
|
||||
import 'package:fluffychat/pangea/chat/widgets/chat_input_bar.dart';
|
||||
import 'package:fluffychat/pangea/chat/widgets/chat_view_background.dart';
|
||||
import 'package:fluffychat/pangea/navigation/navigation_util.dart';
|
||||
import 'package:fluffychat/utils/account_config.dart';
|
||||
import 'package:fluffychat/utils/localized_exception_extension.dart';
|
||||
import 'package:fluffychat/widgets/future_loading_dialog.dart';
|
||||
|
|
@ -159,7 +160,10 @@ class ChatView extends StatelessWidget {
|
|||
icon: const Icon(Icons.search_outlined),
|
||||
tooltip: L10n.of(context).search,
|
||||
onPressed: () {
|
||||
context.go('/rooms/${controller.room.id}/search');
|
||||
NavigationUtil.goToSpaceRoute(
|
||||
'/rooms/${controller.room.id}/search',
|
||||
context,
|
||||
);
|
||||
},
|
||||
),
|
||||
IconButton(
|
||||
|
|
@ -167,9 +171,15 @@ class ChatView extends StatelessWidget {
|
|||
tooltip: L10n.of(context).chatDetails,
|
||||
onPressed: () {
|
||||
if (GoRouterState.of(context).uri.path.endsWith('/details')) {
|
||||
context.go('/rooms/${controller.room.id}');
|
||||
NavigationUtil.goToSpaceRoute(
|
||||
'/rooms/${controller.room.id}',
|
||||
context,
|
||||
);
|
||||
} else {
|
||||
context.go('/rooms/${controller.room.id}/details');
|
||||
NavigationUtil.goToSpaceRoute(
|
||||
'/rooms/${controller.room.id}/details',
|
||||
context,
|
||||
);
|
||||
}
|
||||
},
|
||||
),
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@ import 'package:fluffychat/pangea/course_plans/courses/course_plan_builder.dart'
|
|||
import 'package:fluffychat/pangea/course_plans/courses/course_plan_room_extension.dart';
|
||||
import 'package:fluffychat/pangea/extensions/join_rule_extension.dart';
|
||||
import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart';
|
||||
import 'package:fluffychat/pangea/navigation/navigation_util.dart';
|
||||
import 'package:fluffychat/utils/file_selector.dart';
|
||||
import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart';
|
||||
import 'package:fluffychat/utils/platform_infos.dart';
|
||||
|
|
@ -359,7 +360,7 @@ class ChatDetailsController extends State<ChatDetails>
|
|||
);
|
||||
|
||||
if (resp.isError || resp.result == null || !mounted) return;
|
||||
context.go('/rooms/${resp.result}/invite');
|
||||
NavigationUtil.goToSpaceRoute('/rooms/${resp.result}/invite', context);
|
||||
}
|
||||
|
||||
Future<void> _loadCourseInfo() async {
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@ import 'package:fluffychat/pangea/common/utils/error_handler.dart';
|
|||
import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart';
|
||||
import 'package:fluffychat/pangea/join_codes/space_code_controller.dart';
|
||||
import 'package:fluffychat/pangea/join_codes/space_code_repo.dart';
|
||||
import 'package:fluffychat/pangea/navigation/navigation_util.dart';
|
||||
import 'package:fluffychat/pangea/subscription/widgets/subscription_snackbar.dart';
|
||||
import 'package:fluffychat/utils/localized_exception_extension.dart';
|
||||
import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart';
|
||||
|
|
@ -212,7 +213,14 @@ class ChatListController extends State<ChatList>
|
|||
return;
|
||||
case InviteAction.block:
|
||||
final userId = inviteEvent?.senderId;
|
||||
context.go('/rooms/settings/security/ignorelist', extra: userId);
|
||||
// #Pangea
|
||||
// context.go('/rooms/settings/security/ignorelist', extra: userId);
|
||||
NavigationUtil.goToSpaceRoute(
|
||||
'/rooms/settings/security/ignorelist',
|
||||
context,
|
||||
extra: userId,
|
||||
);
|
||||
// Pangea#
|
||||
return;
|
||||
}
|
||||
if (!mounted) return;
|
||||
|
|
@ -241,7 +249,13 @@ class ChatListController extends State<ChatList>
|
|||
}
|
||||
|
||||
if (room.membership == Membership.leave) {
|
||||
context.go('/rooms/archive/${room.id}');
|
||||
// #Pangea
|
||||
// context.go('/rooms/archive/${room.id}');
|
||||
NavigationUtil.goToSpaceRoute(
|
||||
'/rooms/archive/${room.id}',
|
||||
context,
|
||||
);
|
||||
// Pangea#
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -250,7 +264,13 @@ class ChatListController extends State<ChatList>
|
|||
return;
|
||||
}
|
||||
|
||||
context.go('/rooms/${room.id}');
|
||||
// #Pangea
|
||||
// context.go('/rooms/${room.id}');
|
||||
NavigationUtil.goToSpaceRoute(
|
||||
'/rooms/${room.id}',
|
||||
context,
|
||||
);
|
||||
// Pangea#
|
||||
}
|
||||
|
||||
bool Function(Room) getRoomFilterByActiveFilter(ActiveFilter activeFilter) {
|
||||
|
|
@ -258,36 +278,24 @@ class ChatListController extends State<ChatList>
|
|||
case ActiveFilter.allChats:
|
||||
// #Pangea
|
||||
// return (room) => true;
|
||||
return (room) =>
|
||||
!room.isHiddenRoom &&
|
||||
!room.isSpace &&
|
||||
room.firstSpaceParent == null;
|
||||
return (room) => !room.isHiddenRoom && !room.isSpace;
|
||||
// Pangea#
|
||||
case ActiveFilter.messages:
|
||||
// #Pangea
|
||||
// return (room) => !room.isSpace && room.isDirectChat;
|
||||
return (room) =>
|
||||
!room.isSpace &&
|
||||
room.isDirectChat &&
|
||||
!room.isHiddenRoom &&
|
||||
room.firstSpaceParent == null;
|
||||
!room.isSpace && room.isDirectChat && !room.isHiddenRoom;
|
||||
// Pangea#
|
||||
case ActiveFilter.groups:
|
||||
// #Pangea
|
||||
// return (room) => !room.isSpace && !room.isDirectChat;
|
||||
return (room) =>
|
||||
!room.isSpace &&
|
||||
!room.isDirectChat &&
|
||||
!room.isHiddenRoom &&
|
||||
room.firstSpaceParent == null;
|
||||
!room.isSpace && !room.isDirectChat && !room.isHiddenRoom;
|
||||
// Pangea#
|
||||
case ActiveFilter.unread:
|
||||
// #Pangea
|
||||
// return (room) => room.isUnreadOrInvited;
|
||||
return (room) =>
|
||||
room.isUnreadOrInvited &&
|
||||
!room.isHiddenRoom &&
|
||||
room.firstSpaceParent == null;
|
||||
return (room) => room.isUnreadOrInvited && !room.isHiddenRoom;
|
||||
// Pangea#
|
||||
case ActiveFilter.spaces:
|
||||
return (room) => room.isSpace;
|
||||
|
|
@ -659,7 +667,10 @@ class ChatListController extends State<ChatList>
|
|||
future: () async {
|
||||
await room.leave();
|
||||
if (GoRouterState.of(context).uri.toString().contains(roomID)) {
|
||||
context.go("/rooms");
|
||||
NavigationUtil.goToSpaceRoute(
|
||||
"/rooms",
|
||||
context,
|
||||
);
|
||||
}
|
||||
throw L10n.of(context).roomFull;
|
||||
},
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:flutter_linkify/flutter_linkify.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
import 'package:matrix/matrix.dart';
|
||||
|
||||
import 'package:fluffychat/l10n/l10n.dart';
|
||||
import 'package:fluffychat/pangea/navigation/navigation_util.dart';
|
||||
import 'package:fluffychat/utils/date_time_extension.dart';
|
||||
import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart';
|
||||
import 'package:fluffychat/utils/url_launcher.dart';
|
||||
|
|
@ -200,12 +200,18 @@ class _MessageSearchResultListTile extends StatelessWidget {
|
|||
icon: const Icon(
|
||||
Icons.chevron_right_outlined,
|
||||
),
|
||||
onPressed: () => context.go(
|
||||
'/${Uri(
|
||||
pathSegments: ['rooms', room.id],
|
||||
queryParameters: {'event': event.eventId},
|
||||
)}',
|
||||
// #Pangea
|
||||
// onPressed: () => context.go(
|
||||
// '/${Uri(
|
||||
// pathSegments: ['rooms', room.id],
|
||||
// queryParameters: {'event': event.eventId},
|
||||
// )}',
|
||||
// ),
|
||||
onPressed: () => NavigationUtil.goToSpaceRoute(
|
||||
'/rooms/${room.id}?event=${event.eventId}',
|
||||
context,
|
||||
),
|
||||
// Pangea#
|
||||
),
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,11 +1,10 @@
|
|||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:go_router/go_router.dart';
|
||||
import 'package:matrix/matrix.dart';
|
||||
|
||||
import 'package:fluffychat/l10n/l10n.dart';
|
||||
import 'package:fluffychat/pages/chat_details/chat_download_provider.dart';
|
||||
import 'package:fluffychat/pangea/activity_sessions/activity_room_extension.dart';
|
||||
import 'package:fluffychat/pangea/navigation/navigation_util.dart';
|
||||
|
||||
enum ActivityPopupMenuActions { invite, leave, download }
|
||||
|
||||
|
|
@ -32,10 +31,9 @@ class ActivitySessionPopupMenuState extends State<ActivitySessionPopupMenu>
|
|||
widget.onLeave();
|
||||
break;
|
||||
case ActivityPopupMenuActions.invite:
|
||||
context.go(
|
||||
widget.room.courseParent != null
|
||||
? '/rooms/spaces/${widget.room.courseParent!.id}/${widget.room.id}/invite'
|
||||
: '/rooms/${widget.room.id}/invite',
|
||||
NavigationUtil.goToSpaceRoute(
|
||||
'/rooms/${widget.room.id}/invite',
|
||||
context,
|
||||
);
|
||||
break;
|
||||
case ActivityPopupMenuActions.download:
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@ import 'package:fluffychat/pangea/course_plans/course_activities/course_activity
|
|||
import 'package:fluffychat/pangea/course_plans/courses/course_plan_room_extension.dart';
|
||||
import 'package:fluffychat/pangea/events/constants/pangea_event_types.dart';
|
||||
import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart';
|
||||
import 'package:fluffychat/pangea/navigation/navigation_util.dart';
|
||||
import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart';
|
||||
import 'package:fluffychat/widgets/future_loading_dialog.dart';
|
||||
import 'package:fluffychat/widgets/matrix.dart';
|
||||
|
|
@ -377,7 +378,10 @@ class ActivitySessionStartController extends State<ActivitySessionStartPage>
|
|||
}
|
||||
}
|
||||
|
||||
context.go("/rooms/spaces/${widget.parentId}/${widget.roomId}");
|
||||
NavigationUtil.goToSpaceRoute(
|
||||
"/rooms/${widget.roomId}",
|
||||
context,
|
||||
);
|
||||
}
|
||||
|
||||
Future<void> confirmRoleSelection() async {
|
||||
|
|
@ -404,7 +408,10 @@ class ActivitySessionStartController extends State<ActivitySessionStartPage>
|
|||
);
|
||||
|
||||
if (!resp.isError) {
|
||||
context.go("/rooms/spaces/${widget.parentId}/${resp.result}");
|
||||
NavigationUtil.goToSpaceRoute(
|
||||
"/rooms/${resp.result}",
|
||||
context,
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -449,9 +456,7 @@ class ActivitySessionStartController extends State<ActivitySessionStartPage>
|
|||
Future<void> joinActivityByRoomId(String roomId) async {
|
||||
final room = Matrix.of(context).client.getRoomById(roomId);
|
||||
if (room != null && room.membership == Membership.join) {
|
||||
widget.parentId != null
|
||||
? context.go("/rooms/spaces/${widget.parentId}/$roomId")
|
||||
: context.go("/rooms/$roomId");
|
||||
NavigationUtil.goToSpaceRoute("/rooms/$roomId", context);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -475,9 +480,7 @@ class ActivitySessionStartController extends State<ActivitySessionStartPage>
|
|||
);
|
||||
|
||||
if (!resp.isError) {
|
||||
widget.parentId != null
|
||||
? context.go("/rooms/spaces/${widget.parentId}/$roomId")
|
||||
: context.go("/rooms/$roomId");
|
||||
NavigationUtil.goToSpaceRoute("/rooms/$roomId", context);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@ import 'package:fluffychat/pangea/course_chats/open_roles_indicator.dart';
|
|||
import 'package:fluffychat/pangea/course_plans/course_activities/activity_summaries_provider.dart';
|
||||
import 'package:fluffychat/pangea/course_plans/course_activities/course_activity_repo.dart';
|
||||
import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart';
|
||||
import 'package:fluffychat/pangea/navigation/navigation_util.dart';
|
||||
import 'package:fluffychat/utils/stream_extension.dart';
|
||||
import 'package:fluffychat/widgets/future_loading_dialog.dart';
|
||||
import 'package:fluffychat/widgets/matrix.dart';
|
||||
|
|
@ -272,9 +273,12 @@ class ActivitySessionStartView extends StatelessWidget {
|
|||
),
|
||||
ElevatedButton(
|
||||
style: buttonStyle,
|
||||
onPressed: () => context.go(
|
||||
"/rooms/${controller.activityRoom!.id}/invite",
|
||||
),
|
||||
onPressed: () {
|
||||
NavigationUtil.goToSpaceRoute(
|
||||
"/rooms/${controller.activityRoom!.id}/invite",
|
||||
context,
|
||||
);
|
||||
},
|
||||
child: Row(
|
||||
mainAxisAlignment:
|
||||
MainAxisAlignment.center,
|
||||
|
|
@ -392,9 +396,12 @@ class _ActivityStartButtons extends StatelessWidget {
|
|||
] else if (joinedActivityRoom != null) ...[
|
||||
ElevatedButton(
|
||||
style: buttonStyle,
|
||||
onPressed: () => context.go(
|
||||
"/rooms/spaces/${controller.widget.parentId}/$joinedActivityRoom",
|
||||
),
|
||||
onPressed: () {
|
||||
NavigationUtil.goToSpaceRoute(
|
||||
"/rooms/$joinedActivityRoom",
|
||||
context,
|
||||
);
|
||||
},
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
|
|
@ -427,8 +434,9 @@ class _ActivityStartButtons extends StatelessWidget {
|
|||
);
|
||||
|
||||
if (!resp.isError) {
|
||||
context.go(
|
||||
"/rooms/spaces/${controller.widget.parentId}/${resp.result}",
|
||||
NavigationUtil.goToSpaceRoute(
|
||||
"/rooms/${resp.result}",
|
||||
context,
|
||||
);
|
||||
}
|
||||
},
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ import 'package:matrix/matrix.dart';
|
|||
import 'package:fluffychat/l10n/l10n.dart';
|
||||
import 'package:fluffychat/pangea/extensions/pangea_rooms_chunk_extension.dart';
|
||||
import 'package:fluffychat/pangea/join_codes/space_code_controller.dart';
|
||||
import 'package:fluffychat/pangea/navigation/navigation_util.dart';
|
||||
import 'package:fluffychat/utils/adaptive_bottom_sheet.dart';
|
||||
import 'package:fluffychat/widgets/avatar.dart';
|
||||
import 'package:fluffychat/widgets/future_loading_dialog.dart';
|
||||
|
|
@ -96,7 +97,10 @@ class PublicRoomBottomSheetState extends State<PublicRoomBottomSheet> {
|
|||
|
||||
void _goToRoom(String roomID) {
|
||||
if (chunk?.roomType != 'm.space' && !client.getRoomById(roomID)!.isSpace) {
|
||||
outerContext.go("/rooms/$roomID");
|
||||
NavigationUtil.goToSpaceRoute(
|
||||
"/rooms/$roomID",
|
||||
context,
|
||||
);
|
||||
} else {
|
||||
context.go('/rooms/spaces/$roomID/details');
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@ import 'dart:async';
|
|||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:go_router/go_router.dart';
|
||||
import 'package:matrix/matrix.dart';
|
||||
|
||||
import 'package:fluffychat/config/themes.dart';
|
||||
|
|
@ -13,6 +12,7 @@ import 'package:fluffychat/pangea/activity_sessions/activity_room_extension.dart
|
|||
import 'package:fluffychat/pangea/chat_settings/pages/room_details_buttons.dart';
|
||||
import 'package:fluffychat/pangea/chat_settings/utils/delete_room.dart';
|
||||
import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart';
|
||||
import 'package:fluffychat/pangea/navigation/navigation_util.dart';
|
||||
import 'package:fluffychat/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog.dart';
|
||||
import 'package:fluffychat/widgets/future_loading_dialog.dart';
|
||||
import 'package:fluffychat/widgets/matrix.dart';
|
||||
|
|
@ -70,7 +70,12 @@ class ChatDetailsButtonRowState extends State<ChatDetailsButtonRow> {
|
|||
ButtonDetails(
|
||||
title: l10n.permissions,
|
||||
icon: const Icon(Icons.edit_attributes_outlined, size: 30.0),
|
||||
onPressed: () => context.go('/rooms/${room.id}/details/permissions'),
|
||||
onPressed: () {
|
||||
NavigationUtil.goToSpaceRoute(
|
||||
'/rooms/${room.id}/details/permissions',
|
||||
context,
|
||||
);
|
||||
},
|
||||
enabled: room.isRoomAdmin,
|
||||
visible: !room.isDirectChat,
|
||||
showInMainView: false,
|
||||
|
|
@ -102,7 +107,10 @@ class ChatDetailsButtonRowState extends State<ChatDetailsButtonRow> {
|
|||
if (room.getParticipants([Membership.knock]).isEmpty) {
|
||||
filter = room.pangeaSpaceParents.isNotEmpty ? 'space' : 'contacts';
|
||||
}
|
||||
context.go('/rooms/${room.id}/details/invite?filter=$filter');
|
||||
NavigationUtil.goToSpaceRoute(
|
||||
'/rooms/${room.id}/details/invite?filter=$filter',
|
||||
context,
|
||||
);
|
||||
},
|
||||
enabled: room.canInvite,
|
||||
visible: !room.isDirectChat,
|
||||
|
|
@ -142,7 +150,7 @@ class ChatDetailsButtonRowState extends State<ChatDetailsButtonRow> {
|
|||
future: room.leave,
|
||||
);
|
||||
if (!resp.isError) {
|
||||
context.go("/rooms");
|
||||
NavigationUtil.goToSpaceRoute("/rooms", context);
|
||||
}
|
||||
},
|
||||
enabled: room.membership == Membership.join,
|
||||
|
|
@ -152,7 +160,6 @@ class ChatDetailsButtonRowState extends State<ChatDetailsButtonRow> {
|
|||
title: l10n.delete,
|
||||
icon: const Icon(Icons.delete_outline, size: 30.0),
|
||||
onPressed: () async {
|
||||
final parentSpaceId = room.courseParent?.id;
|
||||
final confirmed = await showOkCancelAlertDialog(
|
||||
context: context,
|
||||
title: L10n.of(context).areYouSure,
|
||||
|
|
@ -168,11 +175,7 @@ class ChatDetailsButtonRowState extends State<ChatDetailsButtonRow> {
|
|||
future: room.delete,
|
||||
);
|
||||
if (resp.isError) return;
|
||||
context.go(
|
||||
parentSpaceId != null
|
||||
? "/rooms/spaces/$parentSpaceId/details"
|
||||
: "/rooms",
|
||||
);
|
||||
NavigationUtil.goToSpaceRoute("/rooms", context);
|
||||
},
|
||||
enabled: room.isRoomAdmin,
|
||||
visible: !room.isDirectChat,
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:flutter_linkify/flutter_linkify.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
import 'package:matrix/matrix.dart';
|
||||
|
||||
import 'package:fluffychat/l10n/l10n.dart';
|
||||
|
|
@ -11,6 +10,7 @@ import 'package:fluffychat/pangea/chat_settings/pages/room_participants_widget.d
|
|||
import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart';
|
||||
import 'package:fluffychat/pangea/instructions/instructions_enum.dart';
|
||||
import 'package:fluffychat/pangea/instructions/instructions_inline_tooltip.dart';
|
||||
import 'package:fluffychat/pangea/navigation/navigation_util.dart';
|
||||
import 'package:fluffychat/utils/fluffy_share.dart';
|
||||
import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart';
|
||||
import 'package:fluffychat/utils/url_launcher.dart';
|
||||
|
|
@ -119,8 +119,9 @@ class ChatDetailsContent extends StatelessWidget {
|
|||
TextButton.icon(
|
||||
onPressed: room.isDirectChat || !room.canInvite
|
||||
? null
|
||||
: () => context.push(
|
||||
: () => NavigationUtil.goToSpaceRoute(
|
||||
'/rooms/${controller.roomId}/details/invite?filter=participants',
|
||||
context,
|
||||
),
|
||||
icon: const Icon(
|
||||
Icons.group_outlined,
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@ import 'package:flutter/services.dart';
|
|||
|
||||
import 'package:cached_network_image/cached_network_image.dart';
|
||||
import 'package:collection/collection.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
import 'package:matrix/matrix.dart';
|
||||
import 'package:universal_html/html.dart' as html;
|
||||
|
||||
|
|
@ -16,6 +15,7 @@ import 'package:fluffychat/pangea/chat_settings/pages/pangea_invitation_selectio
|
|||
import 'package:fluffychat/pangea/common/config/environment.dart';
|
||||
import 'package:fluffychat/pangea/course_plans/map_clipper.dart';
|
||||
import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart';
|
||||
import 'package:fluffychat/pangea/navigation/navigation_util.dart';
|
||||
import 'package:fluffychat/pangea/spaces/space_constants.dart';
|
||||
import 'package:fluffychat/utils/stream_extension.dart';
|
||||
import 'package:fluffychat/widgets/adaptive_dialogs/user_dialog.dart';
|
||||
|
|
@ -72,9 +72,8 @@ class PangeaInvitationSelectionView extends StatelessWidget {
|
|||
),
|
||||
],
|
||||
),
|
||||
onPressed: () => context.go(
|
||||
room.isSpace ? "/rooms/spaces/${room.id}/details" : "/rooms/${room.id}",
|
||||
),
|
||||
onPressed: () =>
|
||||
NavigationUtil.goToSpaceRoute('/rooms/${room.id}', context),
|
||||
);
|
||||
|
||||
return Scaffold(
|
||||
|
|
|
|||
|
|
@ -1,13 +1,13 @@
|
|||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:collection/collection.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
import 'package:matrix/matrix.dart';
|
||||
|
||||
import 'package:fluffychat/config/app_config.dart';
|
||||
import 'package:fluffychat/l10n/l10n.dart';
|
||||
import 'package:fluffychat/pangea/analytics_misc/level_display_name.dart';
|
||||
import 'package:fluffychat/pangea/bot/utils/bot_name.dart';
|
||||
import 'package:fluffychat/pangea/navigation/navigation_util.dart';
|
||||
import 'package:fluffychat/pangea/spaces/load_participants_builder.dart';
|
||||
import 'package:fluffychat/widgets/avatar.dart';
|
||||
import 'package:fluffychat/widgets/hover_builder.dart';
|
||||
|
|
@ -80,8 +80,9 @@ class RoomParticipantsSection extends StatelessWidget {
|
|||
? MouseRegion(
|
||||
cursor: SystemMouseCursors.click,
|
||||
child: GestureDetector(
|
||||
onTap: () => context.go(
|
||||
onTap: () => NavigationUtil.goToSpaceRoute(
|
||||
"/rooms/${room.id}/details/invite",
|
||||
context,
|
||||
),
|
||||
child: HoverBuilder(
|
||||
builder: (context, hovered) {
|
||||
|
|
|
|||
|
|
@ -121,7 +121,7 @@ class SpaceDetailsContent extends StatelessWidget {
|
|||
title: l10n.editCourse,
|
||||
description: l10n.editCourseDesc,
|
||||
icon: const Icon(Icons.edit_outlined, size: 30.0),
|
||||
onPressed: () => context.go('/rooms/${room.id}/details/edit'),
|
||||
onPressed: () => context.go('/rooms/spaces/${room.id}/details/edit'),
|
||||
enabled: room.isRoomAdmin,
|
||||
showInMainView: false,
|
||||
),
|
||||
|
|
@ -151,7 +151,8 @@ class SpaceDetailsContent extends StatelessWidget {
|
|||
title: l10n.permissions,
|
||||
description: l10n.permissionsDesc,
|
||||
icon: const Icon(Icons.edit_attributes_outlined, size: 30.0),
|
||||
onPressed: () => context.go('/rooms/${room.id}/details/permissions'),
|
||||
onPressed: () =>
|
||||
context.go('/rooms/spaces/${room.id}/details/permissions'),
|
||||
enabled: room.isRoomAdmin,
|
||||
showInMainView: false,
|
||||
),
|
||||
|
|
@ -159,7 +160,7 @@ class SpaceDetailsContent extends StatelessWidget {
|
|||
title: l10n.access,
|
||||
description: l10n.accessDesc,
|
||||
icon: const Icon(Icons.shield_outlined, size: 30.0),
|
||||
onPressed: () => context.go('/rooms/${room.id}/details/access'),
|
||||
onPressed: () => context.go('/rooms/spaces/${room.id}/details/access'),
|
||||
enabled: room.isRoomAdmin && room.spaceParents.isEmpty,
|
||||
showInMainView: false,
|
||||
),
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ import 'package:fluffychat/pangea/activity_sessions/activity_room_extension.dart
|
|||
import 'package:fluffychat/pangea/chat_settings/utils/delete_room.dart';
|
||||
import 'package:fluffychat/pangea/chat_settings/widgets/delete_space_dialog.dart';
|
||||
import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart';
|
||||
import 'package:fluffychat/pangea/navigation/navigation_util.dart';
|
||||
import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart';
|
||||
import 'package:fluffychat/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog.dart';
|
||||
import 'package:fluffychat/widgets/avatar.dart';
|
||||
|
|
@ -248,9 +249,10 @@ void chatContextMenuAction(
|
|||
);
|
||||
if (confirmed != OkCancelResult.ok) return;
|
||||
|
||||
final isSpace = room.isSpace;
|
||||
final resp = await showFutureLoadingDialog(
|
||||
context: context,
|
||||
future: room.isSpace ? room.leaveSpace : room.leave,
|
||||
future: isSpace ? room.leaveSpace : room.leave,
|
||||
);
|
||||
|
||||
final r = room.client.getRoomById(room.id);
|
||||
|
|
@ -259,11 +261,9 @@ void chatContextMenuAction(
|
|||
}
|
||||
|
||||
if (!resp.isError) {
|
||||
outerContext.go(
|
||||
room.courseParent != null
|
||||
? "/rooms/spaces/${room.courseParent!.id}/details"
|
||||
: "/rooms",
|
||||
);
|
||||
isSpace
|
||||
? context.go('/rooms')
|
||||
: NavigationUtil.goToSpaceRoute("/rooms", context);
|
||||
}
|
||||
|
||||
return;
|
||||
|
|
@ -277,7 +277,6 @@ void chatContextMenuAction(
|
|||
context.go("/rooms");
|
||||
}
|
||||
} else {
|
||||
final parentSpaceId = room.courseParent?.id;
|
||||
final confirmed = await showOkCancelAlertDialog(
|
||||
context: context,
|
||||
title: l10n.areYouSure,
|
||||
|
|
@ -292,11 +291,7 @@ void chatContextMenuAction(
|
|||
future: room.delete,
|
||||
);
|
||||
if (!resp.isError) {
|
||||
outerContext.go(
|
||||
parentSpaceId != null
|
||||
? "/rooms/spaces/$parentSpaceId/details"
|
||||
: "/rooms",
|
||||
);
|
||||
NavigationUtil.goToSpaceRoute("/rooms", context);
|
||||
}
|
||||
}
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@ import 'package:fluffychat/pangea/course_plans/course_activities/activity_summar
|
|||
import 'package:fluffychat/pangea/course_plans/courses/course_plan_builder.dart';
|
||||
import 'package:fluffychat/pangea/course_plans/courses/course_plan_room_extension.dart';
|
||||
import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart';
|
||||
import 'package:fluffychat/pangea/navigation/navigation_util.dart';
|
||||
import 'package:fluffychat/pangea/spaces/space_constants.dart';
|
||||
import 'package:fluffychat/utils/localized_exception_extension.dart';
|
||||
import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart';
|
||||
|
|
@ -390,7 +391,11 @@ class CourseChatsController extends State<CourseChats>
|
|||
return;
|
||||
case InviteAction.block:
|
||||
final userId = inviteEvent?.senderId;
|
||||
context.go('/rooms/settings/security/ignorelist', extra: userId);
|
||||
NavigationUtil.goToSpaceRoute(
|
||||
'/rooms/settings/security/ignorelist',
|
||||
context,
|
||||
extra: userId,
|
||||
);
|
||||
return;
|
||||
}
|
||||
if (!mounted) return;
|
||||
|
|
@ -419,16 +424,19 @@ class CourseChatsController extends State<CourseChats>
|
|||
}
|
||||
|
||||
if (room.membership == Membership.leave) {
|
||||
context.go('/rooms/archive/${room.id}');
|
||||
NavigationUtil.goToSpaceRoute('/rooms/archive/${room.id}', context);
|
||||
return;
|
||||
}
|
||||
|
||||
if (room.isSpace) {
|
||||
context.go("/rooms/spaces/${room.id}/details");
|
||||
NavigationUtil.goToSpaceRoute(
|
||||
"/rooms/spaces/${room.id}/details",
|
||||
context,
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
context.go('/rooms/${room.id}');
|
||||
NavigationUtil.goToSpaceRoute('/rooms/${room.id}', context);
|
||||
}
|
||||
|
||||
void joinChildRoom(SpaceRoomsChunk item) async {
|
||||
|
|
|
|||
31
lib/pangea/navigation/navigation_util.dart
Normal file
31
lib/pangea/navigation/navigation_util.dart
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:go_router/go_router.dart';
|
||||
|
||||
class NavigationUtil {
|
||||
static void goToSpaceRoute(
|
||||
String route,
|
||||
BuildContext context, {
|
||||
Object? extra,
|
||||
}) {
|
||||
final currentRoute = GoRouterState.of(context);
|
||||
final currentRouteSegments = currentRoute.uri.pathSegments;
|
||||
|
||||
if (currentRouteSegments.length > 1 &&
|
||||
currentRouteSegments[0] == 'rooms' &&
|
||||
currentRouteSegments[1] == 'spaces') {
|
||||
final spaceId = currentRoute.pathParameters['spaceid'];
|
||||
final subroute = route.split('/rooms/');
|
||||
String goalRoute = "/rooms/spaces/$spaceId/";
|
||||
if (subroute.length > 1) {
|
||||
goalRoute += subroute[1];
|
||||
}
|
||||
if (goalRoute != currentRoute.uri.path) {
|
||||
context.go(goalRoute, extra: extra);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
context.go(route, extra: extra);
|
||||
}
|
||||
}
|
||||
|
|
@ -159,7 +159,7 @@ class SpacesNavigationRail extends StatelessWidget {
|
|||
collapse();
|
||||
context.go("/rooms");
|
||||
},
|
||||
toolTip: L10n.of(context).directMessages,
|
||||
toolTip: L10n.of(context).allChats,
|
||||
unreadBadgeFilter: (room) =>
|
||||
room.firstSpaceParent == null,
|
||||
expanded: expanded,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue