From 7daf412b7db1f1e4e501be9ceb5577faf6e01d2a Mon Sep 17 00:00:00 2001 From: Salvatore Giordano Date: Fri, 28 Feb 2020 14:16:01 +0100 Subject: [PATCH] add threadheader --- example/lib/custom_theme.dart | 3 ++ example/lib/threads.dart | 3 ++ lib/src/thread_header.dart | 87 +++++++++++++++++++++++++++++++++++ lib/stream_chat_flutter.dart | 1 + 4 files changed, 94 insertions(+) create mode 100644 lib/src/thread_header.dart diff --git a/example/lib/custom_theme.dart b/example/lib/custom_theme.dart index 26b66584..0f2a57d1 100644 --- a/example/lib/custom_theme.dart +++ b/example/lib/custom_theme.dart @@ -104,6 +104,9 @@ class ThreadPage extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( + appBar: ThreadHeader( + parent: parent, + ), body: Column( children: [ Expanded( diff --git a/example/lib/threads.dart b/example/lib/threads.dart index 20481baf..20f67f63 100644 --- a/example/lib/threads.dart +++ b/example/lib/threads.dart @@ -88,6 +88,9 @@ class ThreadPage extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( + appBar: ThreadHeader( + parent: parent, + ), body: Column( children: [ Expanded( diff --git a/lib/src/thread_header.dart b/lib/src/thread_header.dart new file mode 100644 index 00000000..3421fa0a --- /dev/null +++ b/lib/src/thread_header.dart @@ -0,0 +1,87 @@ +import 'package:flutter/material.dart'; +import 'package:stream_chat/stream_chat.dart'; +import 'package:stream_chat_flutter/src/stream_chat_theme.dart'; + +import 'stream_channel.dart'; + +class ThreadHeader extends StatelessWidget implements PreferredSizeWidget { + final bool showBackButton; + final VoidCallback onBackPressed; + final Message parent; + + ThreadHeader({ + Key key, + @required this.parent, + this.showBackButton = true, + this.onBackPressed, + }) : preferredSize = Size.fromHeight(kToolbarHeight), + super(key: key); + + @override + Widget build(BuildContext context) { + final channel = StreamChannel.of(context).channel; + return AppBar( + automaticallyImplyLeading: false, + elevation: 1, + backgroundColor: + StreamChatTheme.of(context).channelTheme.channelHeaderTheme.color, + actions: [ + Container( + child: showBackButton ? _buildBackButton(context) : Container(), + ), + ], + centerTitle: false, + title: Text.rich( + TextSpan( + text: 'Thread', + children: [ + TextSpan( + text: + ' ${parent.replyCount} ${parent.replyCount == 1 ? 'reply' : 'replies'}', + style: StreamChatTheme.of(context) + .channelTheme + .channelHeaderTheme + .lastMessageAt, + ), + ], + ), + style: + StreamChatTheme.of(context).channelTheme.channelHeaderTheme.title, + ), + ); + } + + Padding _buildBackButton(BuildContext context) { + return Padding( + padding: const EdgeInsets.all(14.0), + child: AspectRatio( + aspectRatio: 1, + child: RawMaterialButton( + shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(4)), + elevation: 0, + highlightElevation: 0, + focusElevation: 0, + disabledElevation: 0, + hoverElevation: 0, + onPressed: () { + if (onBackPressed != null) { + onBackPressed(); + } else { + Navigator.of(context).pop(); + } + }, + fillColor: Colors.black.withOpacity(.1), + padding: EdgeInsets.all(4), + child: Icon( + Icons.close, + size: 15, + color: Colors.black, + ), + ), + ), + ); + } + + @override + final Size preferredSize; +} diff --git a/lib/stream_chat_flutter.dart b/lib/stream_chat_flutter.dart index 1f164781..3c41b7f0 100644 --- a/lib/stream_chat_flutter.dart +++ b/lib/stream_chat_flutter.dart @@ -11,3 +11,4 @@ export 'src/message_widget.dart'; export 'src/stream_channel.dart'; export 'src/stream_chat.dart'; export 'src/stream_chat_theme.dart'; +export 'src/thread_header.dart';