mirror of
https://gitlab.com/comunic/comunicmobile
synced 2024-11-30 00:36:28 +00:00
Visually notify user of new messages when conversation is collapsed
This commit is contained in:
parent
123eaad296
commit
032815b29f
@ -1,8 +1,10 @@
|
|||||||
import 'package:comunic/helpers/conversations_helper.dart';
|
import 'package:comunic/helpers/conversations_helper.dart';
|
||||||
|
import 'package:comunic/helpers/events_helper.dart';
|
||||||
import 'package:comunic/models/conversation.dart';
|
import 'package:comunic/models/conversation.dart';
|
||||||
import 'package:comunic/ui/screens/conversation_screen.dart';
|
import 'package:comunic/ui/screens/conversation_screen.dart';
|
||||||
import 'package:comunic/ui/widgets/safe_state.dart';
|
import 'package:comunic/ui/widgets/safe_state.dart';
|
||||||
import 'package:comunic/ui/widgets/tablet_mode/conversations/conversation_window_container.dart';
|
import 'package:comunic/ui/widgets/tablet_mode/conversations/conversation_window_container.dart';
|
||||||
|
import 'package:comunic/utils/account_utils.dart';
|
||||||
import 'package:comunic/utils/intl_utils.dart';
|
import 'package:comunic/utils/intl_utils.dart';
|
||||||
import 'package:comunic/utils/ui_utils.dart';
|
import 'package:comunic/utils/ui_utils.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
@ -32,6 +34,7 @@ class _ConversationWindowState extends SafeState<ConversationWindow> {
|
|||||||
String _convTitle;
|
String _convTitle;
|
||||||
bool _error = false;
|
bool _error = false;
|
||||||
bool _collapsed = false;
|
bool _collapsed = false;
|
||||||
|
bool _hasNewMessages = false;
|
||||||
|
|
||||||
int get _convID => widget.convID;
|
int get _convID => widget.convID;
|
||||||
|
|
||||||
@ -39,7 +42,10 @@ class _ConversationWindowState extends SafeState<ConversationWindow> {
|
|||||||
|
|
||||||
void _setError(bool e) => setState(() => _error = e);
|
void _setError(bool e) => setState(() => _error = e);
|
||||||
|
|
||||||
void _toggleVisibility() => setState(() => _collapsed = !_collapsed);
|
void _toggleVisibility() => setState(() {
|
||||||
|
_collapsed = !_collapsed;
|
||||||
|
if (!_collapsed) _hasNewMessages = false;
|
||||||
|
});
|
||||||
|
|
||||||
Future<void> _refresh() async {
|
Future<void> _refresh() async {
|
||||||
try {
|
try {
|
||||||
@ -67,6 +73,12 @@ class _ConversationWindowState extends SafeState<ConversationWindow> {
|
|||||||
void initState() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
_refresh();
|
_refresh();
|
||||||
|
|
||||||
|
listen<NewConversationMessageEvent>((e) {
|
||||||
|
if (e.msg.conversationID == _convID &&
|
||||||
|
_collapsed &&
|
||||||
|
e.msg.userID != userID()) setState(() => _hasNewMessages = true);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@ -101,7 +113,8 @@ class _ConversationWindowState extends SafeState<ConversationWindow> {
|
|||||||
);
|
);
|
||||||
|
|
||||||
return ConversationWindowContainer(
|
return ConversationWindowContainer(
|
||||||
icon: Icon(Icons.comment),
|
icon: Icon(_hasNewMessages ? Icons.trip_origin : Icons.comment),
|
||||||
|
appBarBgColor: _hasNewMessages ? Colors.green : null,
|
||||||
title: Text(_convTitle),
|
title: Text(_convTitle),
|
||||||
onClose: widget.onClose,
|
onClose: widget.onClose,
|
||||||
onToggleCollapse: _toggleVisibility,
|
onToggleCollapse: _toggleVisibility,
|
||||||
|
@ -7,6 +7,7 @@ import 'package:flutter/material.dart';
|
|||||||
/// @author Pierre Hubert
|
/// @author Pierre Hubert
|
||||||
|
|
||||||
class ConversationWindowContainer extends StatelessWidget {
|
class ConversationWindowContainer extends StatelessWidget {
|
||||||
|
final Color appBarBgColor;
|
||||||
final Widget icon;
|
final Widget icon;
|
||||||
final Widget title;
|
final Widget title;
|
||||||
final void Function() onClose;
|
final void Function() onClose;
|
||||||
@ -16,6 +17,7 @@ class ConversationWindowContainer extends StatelessWidget {
|
|||||||
|
|
||||||
const ConversationWindowContainer({
|
const ConversationWindowContainer({
|
||||||
Key key,
|
Key key,
|
||||||
|
this.appBarBgColor,
|
||||||
this.icon,
|
this.icon,
|
||||||
@required this.title,
|
@required this.title,
|
||||||
@required this.onClose,
|
@required this.onClose,
|
||||||
@ -37,6 +39,7 @@ class ConversationWindowContainer extends StatelessWidget {
|
|||||||
height: !isCollapsed ? 400 : 40,
|
height: !isCollapsed ? 400 : 40,
|
||||||
child: Scaffold(
|
child: Scaffold(
|
||||||
appBar: AppBar(
|
appBar: AppBar(
|
||||||
|
backgroundColor: appBarBgColor,
|
||||||
leading: icon,
|
leading: icon,
|
||||||
title: GestureDetector(child: title, onTap: onToggleCollapse),
|
title: GestureDetector(child: title, onTap: onToggleCollapse),
|
||||||
actions: <Widget>[
|
actions: <Widget>[
|
||||||
|
Loading…
Reference in New Issue
Block a user