Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion melos.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ command:
stream_core_flutter:
git:
url: https://github.com/GetStream/stream-core-flutter.git
ref: 77df1314fb3be17e3bc711996421699fc7b521a2
ref: 0d5268a506dbc045fcdb8ac901bb2fc70367a3af
path: packages/stream_core_flutter
synchronized: ^3.1.0+1
thumblr: ^0.0.4
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ class MessageComposerComponentProps {
required this.onSendPressed,
this.voiceRecordingCallback,
this.onAttachmentButtonPressed,
this.isPickerOpen = false,
this.focusNode,
this.currentUserId,
required this.audioRecorderState,
Expand All @@ -45,6 +46,9 @@ class MessageComposerComponentProps {
/// The callback for when the attachment button is pressed.
final VoidCallback? onAttachmentButtonPressed;

/// Whether the inline attachment picker is currently open.
final bool isPickerOpen;

/// The focus node for the message composer component.
final FocusNode? focusNode;

Expand Down Expand Up @@ -73,6 +77,7 @@ class MessageComposerLeadingProps extends MessageComposerComponentProps {
required super.onSendPressed,
required super.voiceRecordingCallback,
required super.onAttachmentButtonPressed,
required super.isPickerOpen,
required super.focusNode,
required super.currentUserId,
required super.audioRecorderState,
Expand All @@ -87,6 +92,7 @@ class MessageComposerLeadingProps extends MessageComposerComponentProps {
onSendPressed: props.onSendPressed,
voiceRecordingCallback: props.voiceRecordingCallback,
onAttachmentButtonPressed: props.onAttachmentButtonPressed,
isPickerOpen: props.isPickerOpen,
focusNode: props.focusNode,
currentUserId: props.currentUserId,
audioRecorderState: props.audioRecorderState,
Expand All @@ -103,6 +109,7 @@ class MessageComposerTrailingProps extends MessageComposerComponentProps {
required super.onSendPressed,
required super.voiceRecordingCallback,
required super.onAttachmentButtonPressed,
required super.isPickerOpen,
required super.focusNode,
required super.currentUserId,
required super.audioRecorderState,
Expand All @@ -117,6 +124,7 @@ class MessageComposerTrailingProps extends MessageComposerComponentProps {
onSendPressed: props.onSendPressed,
voiceRecordingCallback: props.voiceRecordingCallback,
onAttachmentButtonPressed: props.onAttachmentButtonPressed,
isPickerOpen: props.isPickerOpen,
focusNode: props.focusNode,
currentUserId: props.currentUserId,
audioRecorderState: props.audioRecorderState,
Expand All @@ -133,6 +141,7 @@ class MessageComposerInputProps extends MessageComposerComponentProps {
required super.onSendPressed,
required super.voiceRecordingCallback,
required super.onAttachmentButtonPressed,
required super.isPickerOpen,
required super.focusNode,
required super.currentUserId,
required super.audioRecorderState,
Expand All @@ -147,6 +156,7 @@ class MessageComposerInputProps extends MessageComposerComponentProps {
onSendPressed: props.onSendPressed,
voiceRecordingCallback: props.voiceRecordingCallback,
onAttachmentButtonPressed: props.onAttachmentButtonPressed,
isPickerOpen: props.isPickerOpen,
focusNode: props.focusNode,
currentUserId: props.currentUserId,
audioRecorderState: props.audioRecorderState,
Expand All @@ -163,6 +173,7 @@ class MessageComposerInputLeadingProps extends MessageComposerComponentProps {
required super.onSendPressed,
required super.voiceRecordingCallback,
required super.onAttachmentButtonPressed,
required super.isPickerOpen,
required super.focusNode,
required super.currentUserId,
required super.audioRecorderState,
Expand All @@ -177,6 +188,7 @@ class MessageComposerInputLeadingProps extends MessageComposerComponentProps {
onSendPressed: props.onSendPressed,
voiceRecordingCallback: props.voiceRecordingCallback,
onAttachmentButtonPressed: props.onAttachmentButtonPressed,
isPickerOpen: props.isPickerOpen,
focusNode: props.focusNode,
currentUserId: props.currentUserId,
audioRecorderState: props.audioRecorderState,
Expand All @@ -193,6 +205,7 @@ class MessageComposerInputHeaderProps extends MessageComposerComponentProps {
required super.onSendPressed,
required super.voiceRecordingCallback,
required super.onAttachmentButtonPressed,
required super.isPickerOpen,
required super.focusNode,
required super.currentUserId,
required super.audioRecorderState,
Expand All @@ -207,6 +220,7 @@ class MessageComposerInputHeaderProps extends MessageComposerComponentProps {
onSendPressed: props.onSendPressed,
voiceRecordingCallback: props.voiceRecordingCallback,
onAttachmentButtonPressed: props.onAttachmentButtonPressed,
isPickerOpen: props.isPickerOpen,
focusNode: props.focusNode,
currentUserId: props.currentUserId,
audioRecorderState: props.audioRecorderState,
Expand All @@ -223,6 +237,7 @@ class MessageComposerInputTrailingProps extends MessageComposerComponentProps {
required super.onSendPressed,
required super.voiceRecordingCallback,
required super.onAttachmentButtonPressed,
required super.isPickerOpen,
required super.focusNode,
required super.currentUserId,
required super.audioRecorderState,
Expand All @@ -237,6 +252,7 @@ class MessageComposerInputTrailingProps extends MessageComposerComponentProps {
onSendPressed: props.onSendPressed,
voiceRecordingCallback: props.voiceRecordingCallback,
onAttachmentButtonPressed: props.onAttachmentButtonPressed,
isPickerOpen: props.isPickerOpen,
focusNode: props.focusNode,
currentUserId: props.currentUserId,
audioRecorderState: props.audioRecorderState,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,9 @@ class _DefaultStreamMessageComposerLeading extends StatelessWidget {

@override
Widget build(BuildContext context) {
// 45 degrees = 0.125 turns
const closedRotation = 0.125;

return AnimatedOpacity(
opacity: props.isAudioRecordingFlowActive ? 0.0 : 1.0,
duration: props.isAudioRecordingFlowActive ? Duration.zero : const Duration(milliseconds: 200),
Expand All @@ -40,15 +43,20 @@ class _DefaultStreamMessageComposerLeading extends StatelessWidget {
child: Row(
children: [
if (!props.isAudioRecordingFlowActive) ...[
StreamButton.icon(
icon: context.streamIcons.plusLarge,
style: StreamButtonStyle.secondary,
type: StreamButtonType.outline,
size: StreamButtonSize.large,
isFloating: props.isFloating,
onTap: () {
props.onAttachmentButtonPressed?.call();
},
AnimatedRotation(
turns: props.isPickerOpen ? closedRotation : 0,
duration: const Duration(milliseconds: 150),
curve: Curves.easeOut,
child: StreamButton.icon(
icon: context.streamIcons.plusLarge,
style: StreamButtonStyle.secondary,
type: StreamButtonType.outline,
size: StreamButtonSize.large,
isFloating: props.isFloating,
onTap: () {
props.onAttachmentButtonPressed?.call();
},
),
),
SizedBox(width: context.streamSpacing.xs),
],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ class StreamChatMessageComposer extends StatefulWidget {
StreamMessageInputController? controller,
required VoidCallback onSendPressed,
VoidCallback? onAttachmentButtonPressed,
bool isPickerOpen = false,
FocusNode? focusNode,
String? currentUserId,
String placeholder = '',
Expand All @@ -38,6 +39,7 @@ class StreamChatMessageComposer extends StatefulWidget {
message: null,
onSendPressed: onSendPressed,
onAttachmentButtonPressed: onAttachmentButtonPressed,
isPickerOpen: isPickerOpen,
focusNode: focusNode,
currentUserId: currentUserId,
placeholder: placeholder,
Expand Down Expand Up @@ -168,6 +170,7 @@ class MessageComposerProps {
this.placeholder = '',
required this.onSendPressed,
this.onAttachmentButtonPressed,
this.isPickerOpen = false,
this.focusNode,
this.currentUserId,
this.audioRecorderController,
Expand All @@ -193,6 +196,9 @@ class MessageComposerProps {
/// The callback for when the attachment button is pressed.
final VoidCallback? onAttachmentButtonPressed;

/// Whether the inline attachment picker is currently open.
final bool isPickerOpen;

/// The focus node for the message composer.
final FocusNode? focusNode;

Expand Down Expand Up @@ -263,6 +269,7 @@ class DefaultStreamChatMessageComposer extends StatelessWidget {
onSendPressed: props.onSendPressed,
voiceRecordingCallback: _createVoiceRecordingCallback(context),
onAttachmentButtonPressed: props.onAttachmentButtonPressed,
isPickerOpen: props.isPickerOpen,
audioRecorderState: audioRecorderState,
focusNode: props.focusNode,
);
Expand Down
Loading