From ca3cd036645aa8c64cd454e9d3eac9ec7452e44d Mon Sep 17 00:00:00 2001 From: ggurdin Date: Tue, 8 Oct 2024 14:13:01 -0400 Subject: [PATCH] blur background during IT --- lib/pages/chat/chat_view.dart | 4 ++ .../widgets/chat/chat_view_background.dart | 60 +++++++++++++++++++ 2 files changed, 64 insertions(+) create mode 100644 lib/pangea/widgets/chat/chat_view_background.dart diff --git a/lib/pages/chat/chat_view.dart b/lib/pages/chat/chat_view.dart index 75cb583d3..52d5ed351 100644 --- a/lib/pages/chat/chat_view.dart +++ b/lib/pages/chat/chat_view.dart @@ -12,6 +12,7 @@ import 'package:fluffychat/pangea/choreographer/widgets/start_igc_button.dart'; import 'package:fluffychat/pangea/extensions/pangea_room_extension/pangea_room_extension.dart'; import 'package:fluffychat/pangea/widgets/animations/gain_points.dart'; import 'package:fluffychat/pangea/widgets/chat/chat_floating_action_button.dart'; +import 'package:fluffychat/pangea/widgets/chat/chat_view_background.dart'; import 'package:fluffychat/pangea/widgets/chat/input_bar_wrapper.dart'; import 'package:fluffychat/utils/account_config.dart'; import 'package:fluffychat/widgets/chat_settings_popup_menu.dart'; @@ -419,6 +420,9 @@ class ChatView extends StatelessWidget { ], ), // #Pangea + ChatViewBackground( + choreographer: controller.choreographer, + ), Positioned( left: 0, right: 0, diff --git a/lib/pangea/widgets/chat/chat_view_background.dart b/lib/pangea/widgets/chat/chat_view_background.dart new file mode 100644 index 000000000..001a9a3ae --- /dev/null +++ b/lib/pangea/widgets/chat/chat_view_background.dart @@ -0,0 +1,60 @@ +import 'dart:async'; +import 'dart:ui'; + +import 'package:fluffychat/pangea/choreographer/controllers/choreographer.dart'; +import 'package:flutter/material.dart'; + +class ChatViewBackground extends StatefulWidget { + final Choreographer choreographer; + const ChatViewBackground({ + super.key, + required this.choreographer, + }); + + @override + ChatViewBackgroundState createState() => ChatViewBackgroundState(); +} + +class ChatViewBackgroundState extends State { + StreamSubscription? _choreoSub; + + @override + void initState() { + // Rebuild the widget each time there's an update from choreo + _choreoSub = widget.choreographer.stateListener.stream.listen((_) { + setState(() {}); + }); + super.initState(); + } + + @override + void dispose() { + _choreoSub?.cancel(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return widget.choreographer.itController.willOpen + ? Positioned( + left: 0, + right: 0, + top: 0, + bottom: 0, + child: Material( + borderOnForeground: false, + color: const Color.fromRGBO(0, 0, 0, 1).withAlpha(150), + clipBehavior: Clip.antiAlias, + child: BackdropFilter( + filter: ImageFilter.blur(sigmaX: 2.5, sigmaY: 2.5), + child: Container( + height: double.infinity, + width: double.infinity, + color: Colors.transparent, + ), + ), + ), + ) + : const SizedBox.shrink(); + } +}