chore: in empty chat popup, listen for changes to participant count and close self if it increases (#2372)

This commit is contained in:
ggurdin 2025-04-07 11:30:03 -04:00 committed by GitHub
parent b333c45026
commit da727a9660
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 74 additions and 11 deletions

View file

@ -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<ChatPageWithRoom>
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<ChatPageWithRoom>
final theme = Theme.of(context);
return Row(
children: [
// #Pangea
EmptyChatPopup(
room: room,
transformTargetId:
choreographer.inputLayerLinkAndKey.transformTargetId,
),
// Pangea#
Expanded(
child: ChatView(this),
),

View file

@ -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<EmptyChatPopup> createState() => EmptyChatPopupState();
}
class EmptyChatPopupState extends State<EmptyChatPopup> {
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();
}
}