diff --git a/lib/pages/chat/chat_input_row.dart b/lib/pages/chat/chat_input_row.dart index 2ec8402f2..1303e36e6 100644 --- a/lib/pages/chat/chat_input_row.dart +++ b/lib/pages/chat/chat_input_row.dart @@ -364,6 +364,13 @@ class ChatInputRow extends StatelessWidget { onPressed: () => ScaffoldMessenger.of(context).showSnackBar( SnackBar( + margin: EdgeInsets.only( + bottom: height + 16, + left: 16, + right: 16, + top: 16, + ), + showCloseIcon: true, content: Text( L10n.of( context, diff --git a/lib/pages/chat/recording_input_row.dart b/lib/pages/chat/recording_input_row.dart index b7edf3fe8..5e4686e52 100644 --- a/lib/pages/chat/recording_input_row.dart +++ b/lib/pages/chat/recording_input_row.dart @@ -22,78 +22,86 @@ class RecordingInputRow extends StatelessWidget { '${state.duration.inMinutes.toString().padLeft(2, '0')}:${(state.duration.inSeconds % 60).toString().padLeft(2, '0')}'; return SizedBox( height: ChatInputRow.height, - child: Padding( - padding: const EdgeInsets.symmetric(horizontal: 8.0), - child: Row( - crossAxisAlignment: .center, - mainAxisAlignment: .spaceBetween, - spacing: 8, - children: [ - IconButton( + child: Row( + crossAxisAlignment: .center, + mainAxisAlignment: .spaceBetween, + children: [ + const SizedBox(width: 4), + Container( + alignment: .center, + width: 48, + child: IconButton( tooltip: L10n.of(context).cancel, icon: const Icon(Icons.delete_outlined), color: theme.colorScheme.error, onPressed: state.cancel, ), - if (state.isPaused) - IconButton( + ), + if (state.isPaused) + Container( + alignment: .center, + width: 48, + child: IconButton( tooltip: L10n.of(context).resume, icon: const Icon(Icons.play_circle_outline_outlined), onPressed: state.resume, - ) - else - IconButton( + ), + ) + else + Container( + alignment: .center, + width: 48, + child: IconButton( tooltip: L10n.of(context).pause, icon: const Icon(Icons.pause_circle_outline_outlined), onPressed: state.pause, ), - Text(time), - Expanded( - child: LayoutBuilder( - builder: (context, constraints) { - const width = 4; - return Row( - mainAxisSize: .min, - mainAxisAlignment: .end, - children: state.amplitudeTimeline.reversed - .take((constraints.maxWidth / (width + 2)).floor()) - .toList() - .reversed - .map( - (amplitude) => Container( - margin: const EdgeInsets.only(left: 2), - width: width.toDouble(), - decoration: BoxDecoration( - color: theme.colorScheme.primary, - borderRadius: BorderRadius.circular(2), - ), - height: maxDecibalWidth * (amplitude / 100), + ), + Text(time), + Expanded( + child: LayoutBuilder( + builder: (context, constraints) { + const width = 4; + return Row( + mainAxisSize: .min, + mainAxisAlignment: .end, + children: state.amplitudeTimeline.reversed + .take((constraints.maxWidth / (width + 2)).floor()) + .toList() + .reversed + .map( + (amplitude) => Container( + margin: const EdgeInsets.only(left: 2), + width: width.toDouble(), + decoration: BoxDecoration( + color: theme.colorScheme.primary, + borderRadius: BorderRadius.circular(2), ), - ) - .toList(), - ); - }, - ), + height: maxDecibalWidth * (amplitude / 100), + ), + ) + .toList(), + ); + }, ), - IconButton( - style: IconButton.styleFrom( - disabledBackgroundColor: theme.bubbleColor.withAlpha(128), - backgroundColor: theme.bubbleColor, - foregroundColor: theme.onBubbleColor, - ), - tooltip: L10n.of(context).sendAudio, - icon: state.isSending - ? const SizedBox.square( - dimension: 24, - child: CircularProgressIndicator.adaptive(), - ) - : const Icon(Icons.send_outlined), - onPressed: state.isSending - ? null - : () => state.stopAndSend(onSend), + ), + IconButton( + style: IconButton.styleFrom( + disabledBackgroundColor: theme.bubbleColor.withAlpha(128), + backgroundColor: theme.bubbleColor, + foregroundColor: theme.onBubbleColor, ), - ], - ), + tooltip: L10n.of(context).sendAudio, + icon: state.isSending + ? const SizedBox.square( + dimension: 24, + child: CircularProgressIndicator.adaptive(), + ) + : const Icon(Icons.send_outlined), + onPressed: state.isSending ? null : () => state.stopAndSend(onSend), + ), + const SizedBox(width: 4), + ], ), ); }