feat: add join space button to space list / navigation bar (#2071)
* feat: add join space button to space list / navigation bar * chore: update join space icon
This commit is contained in:
parent
f9ee18c77b
commit
cc5a757d71
6 changed files with 113 additions and 27 deletions
|
|
@ -4872,5 +4872,7 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"knockSpaceSuccess": "You have requested to join this space! An admin will respond to your request when they receive it 😀"
|
||||
"knockSpaceSuccess": "You have requested to join this space! An admin will respond to your request when they receive it 😀",
|
||||
"joinByCode": "Join by code",
|
||||
"createASpace": "Create a space"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@ import 'package:fluffychat/pages/chat_list/search_title.dart';
|
|||
import 'package:fluffychat/pages/chat_list/space_view.dart';
|
||||
import 'package:fluffychat/pages/user_bottom_sheet/user_bottom_sheet.dart';
|
||||
import 'package:fluffychat/pangea/chat_list/widgets/pangea_chat_list_header.dart';
|
||||
import 'package:fluffychat/pangea/spaces/widgets/space_filter_buttons.dart';
|
||||
import 'package:fluffychat/utils/adaptive_bottom_sheet.dart';
|
||||
import 'package:fluffychat/utils/stream_extension.dart';
|
||||
import 'package:fluffychat/widgets/avatar.dart';
|
||||
|
|
@ -170,8 +171,9 @@ class ChatListViewBody extends StatelessWidget {
|
|||
),
|
||||
),
|
||||
),
|
||||
if (client.rooms.isNotEmpty && !controller.isSearchMode)
|
||||
// #Pangea
|
||||
// #Pangea
|
||||
// if (client.rooms.isNotEmpty && !controller.isSearchMode)
|
||||
if (!controller.isSearchMode)
|
||||
// SizedBox(
|
||||
// height: 64,
|
||||
// child: ListView(
|
||||
|
|
@ -199,8 +201,7 @@ class ChatListViewBody extends StatelessWidget {
|
|||
// #Pangea
|
||||
// if (spaceDelegateCandidates.isNotEmpty &&
|
||||
// !controller.widget.displayNavigationRail)
|
||||
if (spaces.isNotEmpty &&
|
||||
!controller.widget.displayNavigationRail)
|
||||
if (!controller.widget.displayNavigationRail)
|
||||
// Pangea#
|
||||
ActiveFilter.spaces,
|
||||
]
|
||||
|
|
@ -352,6 +353,10 @@ class ChatListViewBody extends StatelessWidget {
|
|||
);
|
||||
},
|
||||
),
|
||||
// #Pangea
|
||||
if (controller.activeFilter == ActiveFilter.spaces)
|
||||
const SpaceFilterButtons(),
|
||||
// Pangea#
|
||||
],
|
||||
),
|
||||
);
|
||||
|
|
|
|||
|
|
@ -5,7 +5,6 @@ import 'package:go_router/go_router.dart';
|
|||
import 'package:matrix/matrix.dart';
|
||||
|
||||
import 'package:fluffychat/pangea/learning_settings/pages/settings_learning.dart';
|
||||
import 'package:fluffychat/pangea/spaces/utils/space_code.dart';
|
||||
import 'package:fluffychat/pangea/user/utils/p_logout.dart';
|
||||
import 'package:fluffychat/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog.dart';
|
||||
import 'package:fluffychat/widgets/avatar.dart';
|
||||
|
|
@ -38,16 +37,6 @@ class ClientChooserButton extends StatelessWidget {
|
|||
// Pangea#
|
||||
return <PopupMenuEntry<Object>>[
|
||||
// #Pangea
|
||||
PopupMenuItem(
|
||||
value: SettingsAction.joinWithClassCode,
|
||||
child: Row(
|
||||
children: [
|
||||
const Icon(Icons.join_full_outlined),
|
||||
const SizedBox(width: 18),
|
||||
Expanded(child: Text(L10n.of(context).joinWithClassCode)),
|
||||
],
|
||||
),
|
||||
),
|
||||
// PopupMenuItem(
|
||||
// value: SettingsAction.newGroup,
|
||||
// child: Row(
|
||||
|
|
@ -294,12 +283,6 @@ class ClientChooserButton extends StatelessWidget {
|
|||
barrierDismissible: false,
|
||||
);
|
||||
break;
|
||||
case SettingsAction.joinWithClassCode:
|
||||
SpaceCodeUtil.joinWithSpaceCodeDialog(
|
||||
context,
|
||||
MatrixState.pangeaController,
|
||||
);
|
||||
break;
|
||||
case SettingsAction.logout:
|
||||
pLogoutAction(context);
|
||||
break;
|
||||
|
|
@ -319,7 +302,6 @@ enum SettingsAction {
|
|||
settings,
|
||||
// #Pangea
|
||||
// archive,
|
||||
joinWithClassCode,
|
||||
learning,
|
||||
logout,
|
||||
// Pangea#
|
||||
|
|
|
|||
|
|
@ -5,8 +5,8 @@ import 'package:flutter/material.dart';
|
|||
import 'package:flutter_gen/gen_l10n/l10n.dart';
|
||||
import 'package:matrix/matrix.dart';
|
||||
|
||||
import 'package:fluffychat/pangea/common/controllers/pangea_controller.dart';
|
||||
import 'package:fluffychat/widgets/adaptive_dialogs/show_text_input_dialog.dart';
|
||||
import 'package:fluffychat/widgets/matrix.dart';
|
||||
|
||||
class SpaceCodeUtil {
|
||||
static const codeLength = 7;
|
||||
|
|
@ -39,7 +39,6 @@ class SpaceCodeUtil {
|
|||
|
||||
static Future<void> joinWithSpaceCodeDialog(
|
||||
BuildContext context,
|
||||
PangeaController pangeaController,
|
||||
) async {
|
||||
final String? spaceCode = await showTextInputDialog(
|
||||
context: context,
|
||||
|
|
@ -50,7 +49,7 @@ class SpaceCodeUtil {
|
|||
autoSubmit: true,
|
||||
);
|
||||
if (spaceCode == null || spaceCode.isEmpty) return;
|
||||
await pangeaController.classController.joinClasswithCode(
|
||||
await MatrixState.pangeaController.classController.joinClasswithCode(
|
||||
context,
|
||||
spaceCode,
|
||||
);
|
||||
|
|
|
|||
80
lib/pangea/spaces/widgets/space_filter_buttons.dart
Normal file
80
lib/pangea/spaces/widgets/space_filter_buttons.dart
Normal file
|
|
@ -0,0 +1,80 @@
|
|||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:flutter_gen/gen_l10n/l10n.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
|
||||
import 'package:fluffychat/pangea/spaces/utils/space_code.dart';
|
||||
|
||||
class SpaceFilterButtons extends StatelessWidget {
|
||||
const SpaceFilterButtons({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final theme = Theme.of(context);
|
||||
return SliverList(
|
||||
delegate: SliverChildListDelegate(
|
||||
[
|
||||
const SizedBox(height: 16.0),
|
||||
Padding(
|
||||
padding: const EdgeInsets.symmetric(
|
||||
horizontal: 8.0,
|
||||
vertical: 4.0,
|
||||
),
|
||||
child: ElevatedButton(
|
||||
style: ElevatedButton.styleFrom(
|
||||
backgroundColor: theme.colorScheme.primary,
|
||||
padding: const EdgeInsets.all(0),
|
||||
),
|
||||
onPressed: () => SpaceCodeUtil.joinWithSpaceCodeDialog(context),
|
||||
child: Row(
|
||||
spacing: 16.0,
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
Icon(
|
||||
Icons.join_right_outlined,
|
||||
color: theme.colorScheme.onPrimary,
|
||||
),
|
||||
Text(
|
||||
L10n.of(context).joinByCode,
|
||||
style: theme.textTheme.bodyMedium?.copyWith(
|
||||
color: theme.colorScheme.onPrimary,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
Padding(
|
||||
padding: const EdgeInsets.symmetric(
|
||||
horizontal: 8.0,
|
||||
vertical: 2.0,
|
||||
),
|
||||
child: ElevatedButton(
|
||||
style: ElevatedButton.styleFrom(
|
||||
backgroundColor: theme.colorScheme.primary,
|
||||
padding: const EdgeInsets.all(0),
|
||||
),
|
||||
onPressed: () => context.go('/rooms/newspace'),
|
||||
child: Row(
|
||||
spacing: 16.0,
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
Icon(
|
||||
Icons.add,
|
||||
color: theme.colorScheme.onPrimary,
|
||||
),
|
||||
Text(
|
||||
L10n.of(context).createASpace,
|
||||
style: theme.textTheme.bodyMedium?.copyWith(
|
||||
color: theme.colorScheme.onPrimary,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -7,6 +7,7 @@ import 'package:matrix/matrix.dart';
|
|||
import 'package:fluffychat/config/app_config.dart';
|
||||
import 'package:fluffychat/config/themes.dart';
|
||||
import 'package:fluffychat/pages/chat_list/navi_rail_item.dart';
|
||||
import 'package:fluffychat/pangea/spaces/utils/space_code.dart';
|
||||
import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart';
|
||||
import 'package:fluffychat/utils/stream_extension.dart';
|
||||
import 'package:fluffychat/widgets/avatar.dart';
|
||||
|
|
@ -58,7 +59,10 @@ class SpacesNavigationRail extends StatelessWidget {
|
|||
Expanded(
|
||||
child: ListView.builder(
|
||||
scrollDirection: Axis.vertical,
|
||||
itemCount: rootSpaces.length + 2,
|
||||
// #Pangea
|
||||
// itemCount: rootSpaces.length + 2,
|
||||
itemCount: rootSpaces.length + 3,
|
||||
// Pangea#
|
||||
itemBuilder: (context, i) {
|
||||
if (i == 0) {
|
||||
return NaviRailItem(
|
||||
|
|
@ -78,6 +82,20 @@ class SpacesNavigationRail extends StatelessWidget {
|
|||
}
|
||||
i--;
|
||||
if (i == rootSpaces.length) {
|
||||
// #Pangea
|
||||
return NaviRailItem(
|
||||
isSelected: false,
|
||||
onTap: () =>
|
||||
SpaceCodeUtil.joinWithSpaceCodeDialog(context),
|
||||
icon: const Padding(
|
||||
padding: EdgeInsets.all(8.0),
|
||||
child: Icon(Icons.join_right_outlined),
|
||||
),
|
||||
toolTip: L10n.of(context).joinByCode,
|
||||
);
|
||||
}
|
||||
if (i == rootSpaces.length + 1) {
|
||||
// Pangea#
|
||||
return NaviRailItem(
|
||||
isSelected: false,
|
||||
onTap: () => context.go('/rooms/newspace'),
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue