Skip to content

Commit 6b48ee6

Browse files
authored
fix(ui): listen to channel capabilities in message input. (#2243)
Co-authored-by: xsahil03x <[email protected]>
1 parent 3c3dd16 commit 6b48ee6

File tree

13 files changed

+474
-214
lines changed

13 files changed

+474
-214
lines changed

packages/stream_chat_flutter/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@
66
- Added a new `StreamDraftListView` for displaying draft messages.
77
- Added a confirmation dialog for end vote in Polls. [[#2211]](https://github.com/GetStream/stream-chat-flutter/issues/2211)
88

9+
🐞 Fixed
10+
11+
- [[#2182]](https://github.com/GetStream/stream-chat-flutter/issues/2182) Fixes StreamMessageInput not listening to channel capabilities.
12+
913
🔄 Changed
1014

1115
- Exported `StreamQuotedMessageWidget` to allow customization of quoted messages using `StreamMessageWidget.quotedMessageBuilder`.

packages/stream_chat_flutter/lib/src/bottom_sheets/edit_message_sheet.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@ class _EditMessageSheetState extends State<EditMessageSheet> {
113113
widget.editMessageInputBuilder!(context, widget.message)
114114
else
115115
StreamMessageInput(
116+
elevation: 0,
116117
messageInputController: controller,
117118
// Disallow editing poll for now as it's not supported.
118119
allowedAttachmentPickerTypes: [

packages/stream_chat_flutter/lib/src/message_input/dm_checkbox.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import 'package:stream_chat_flutter/stream_chat_flutter.dart';
44
/// {@template dmCheckbox}
55
/// Prompts the user to send a reply to a message thread as a DM.
66
/// {@endtemplate}
7+
@Deprecated("Use 'DmCheckboxListTile' instead.")
78
class DmCheckbox extends StatelessWidget {
89
/// {@macro dmCheckbox}
910
const DmCheckbox({
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
import 'package:flutter/material.dart';
2+
import 'package:stream_chat_flutter/src/theme/stream_chat_theme.dart';
3+
import 'package:stream_chat_flutter/src/utils/extensions.dart';
4+
5+
/// {@template dmCheckboxListTile}
6+
/// A widget that represents a checkbox list tile for direct message input.
7+
/// {@endtemplate}
8+
class DmCheckboxListTile extends StatelessWidget {
9+
/// {@macro dmCheckboxListTile}
10+
const DmCheckboxListTile({
11+
super.key,
12+
required this.value,
13+
this.onChanged,
14+
this.contentPadding,
15+
});
16+
17+
/// The current value of the checkbox.
18+
final bool value;
19+
20+
/// The callback to perform when the checkbox value is changed.
21+
final ValueChanged<bool>? onChanged;
22+
23+
/// The padding around the checkbox list tile.
24+
final EdgeInsetsGeometry? contentPadding;
25+
26+
@override
27+
Widget build(BuildContext context) {
28+
final theme = StreamChatTheme.of(context);
29+
final textTheme = theme.textTheme;
30+
final colorTheme = theme.colorTheme;
31+
32+
const visualDensity = VisualDensity(
33+
vertical: VisualDensity.minimumDensity,
34+
horizontal: VisualDensity.minimumDensity,
35+
);
36+
37+
final checkbox = ExcludeFocus(
38+
child: CheckboxTheme(
39+
data: CheckboxThemeData(
40+
overlayColor: WidgetStatePropertyAll(
41+
colorTheme.accentPrimary.withAlpha(kRadialReactionAlpha),
42+
),
43+
),
44+
child: Checkbox(
45+
value: value,
46+
visualDensity: visualDensity,
47+
activeColor: colorTheme.accentPrimary,
48+
materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
49+
side: BorderSide(width: 2, color: colorTheme.textLowEmphasis),
50+
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(3)),
51+
onChanged: switch (onChanged) {
52+
final onChanged? => (value) {
53+
if (value == null) return;
54+
return onChanged.call(value);
55+
},
56+
_ => null,
57+
},
58+
),
59+
),
60+
);
61+
62+
return MergeSemantics(
63+
child: ListTile(
64+
dense: true,
65+
leading: checkbox,
66+
horizontalTitleGap: 16,
67+
visualDensity: visualDensity,
68+
enabled: onChanged != null,
69+
onTap: () => onChanged?.call(!value),
70+
contentPadding: contentPadding,
71+
title: Text(
72+
context.translations.alsoSendAsDirectMessageLabel,
73+
style: textTheme.footnote.copyWith(
74+
// ignore: deprecated_member_use
75+
color: colorTheme.textHighEmphasis.withOpacity(0.5),
76+
),
77+
),
78+
),
79+
);
80+
}
81+
}

packages/stream_chat_flutter/lib/src/message_input/quoting_message_top_area.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ class QuotingMessageTopArea extends StatelessWidget {
3030
final _streamChatTheme = StreamChatTheme.of(context);
3131
if (hasQuotedMessage) {
3232
return Padding(
33-
padding: const EdgeInsets.fromLTRB(12, 8, 12, 0),
33+
padding: const EdgeInsets.symmetric(horizontal: 4),
3434
child: Row(
3535
mainAxisAlignment: MainAxisAlignment.spaceBetween,
3636
children: [

0 commit comments

Comments
 (0)