diff --git a/lib/pages/chat/chat.dart b/lib/pages/chat/chat.dart index c600149d8..fbfb55f1b 100644 --- a/lib/pages/chat/chat.dart +++ b/lib/pages/chat/chat.dart @@ -46,8 +46,8 @@ import 'package:fluffychat/pangea/events/models/pangea_token_model.dart'; import 'package:fluffychat/pangea/events/models/representation_content_model.dart'; import 'package:fluffychat/pangea/events/models/tokens_event_content_model.dart'; import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; +import 'package:fluffychat/pangea/instructions/empty_chat_popup.dart'; import 'package:fluffychat/pangea/instructions/instructions_enum.dart'; -import 'package:fluffychat/pangea/instructions/instructions_show_popup.dart'; import 'package:fluffychat/pangea/learning_settings/widgets/p_language_dialog.dart'; import 'package:fluffychat/pangea/toolbar/enums/message_mode_enum.dart'; import 'package:fluffychat/pangea/toolbar/widgets/message_selection_overlay.dart'; @@ -421,16 +421,6 @@ class ChatController extends State ignorePointer: true, ); }); - - if (room.summary.mJoinedMemberCount == 1) { - WidgetsBinding.instance.addPostFrameCallback( - (_) => instructionsShowPopup( - context, - InstructionsEnum.emptyChatWarning, - choreographer.inputLayerLinkAndKey.transformTargetId, - ), - ); - } // Pangea# _tryLoadTimeline(); if (kIsWeb) { @@ -1934,6 +1924,13 @@ class ChatController extends State final theme = Theme.of(context); return Row( children: [ + // #Pangea + EmptyChatPopup( + room: room, + transformTargetId: + choreographer.inputLayerLinkAndKey.transformTargetId, + ), + // Pangea# Expanded( child: ChatView(this), ), diff --git a/lib/pangea/instructions/empty_chat_popup.dart b/lib/pangea/instructions/empty_chat_popup.dart new file mode 100644 index 000000000..8985213c3 --- /dev/null +++ b/lib/pangea/instructions/empty_chat_popup.dart @@ -0,0 +1,66 @@ +import 'dart:async'; + +import 'package:flutter/material.dart'; + +import 'package:matrix/matrix.dart'; + +import 'package:fluffychat/pangea/instructions/instructions_enum.dart'; +import 'package:fluffychat/pangea/instructions/instructions_show_popup.dart'; +import 'package:fluffychat/widgets/matrix.dart'; + +class EmptyChatPopup extends StatefulWidget { + const EmptyChatPopup({ + super.key, + required this.room, + required this.transformTargetId, + }); + + final Room room; + final String transformTargetId; + + @override + State createState() => EmptyChatPopupState(); +} + +class EmptyChatPopupState extends State { + StreamSubscription? _memberSubscription; + + @override + void initState() { + super.initState(); + if (widget.room.summary.mJoinedMemberCount == 1) { + WidgetsBinding.instance.addPostFrameCallback( + (_) => instructionsShowPopup( + context, + InstructionsEnum.emptyChatWarning, + widget.transformTargetId, + ), + ); + } + + _memberSubscription = widget.room.client.onRoomState.stream.where( + (u) { + return u.roomId == widget.room.id && + u.state.type == EventTypes.RoomMember; + }, + ).listen((event) { + final members = widget.room.summary.mJoinedMemberCount; + if (members != null && members > 1) { + MatrixState.pAnyState.closeOverlay( + InstructionsEnum.emptyChatWarning.toString(), + ); + } + }); + } + + @override + void dispose() { + _memberSubscription?.cancel(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return const SizedBox.shrink(); + } +}