From 0c2fa84f930eb30f4d83196f2e3daa3b5c0b3d06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9o=20Poizat?= Date: Mon, 2 Mar 2026 09:38:52 +0100 Subject: [PATCH] fixup! Update Scribe mobile custom prompt bar UI Fix Scribe Bar hint color in mobile Fix Scribe Bar spacing allocation in mobile USe borderRadius instead of ClipRRect --- .../presentation/styles/ai_scribe_styles.dart | 3 + ...ai_scribe_mobile_actions_bottom_sheet.dart | 27 +++-- .../widgets/search/ai_scribe_bar.dart | 102 +++++++++--------- 3 files changed, 64 insertions(+), 68 deletions(-) diff --git a/scribe/lib/scribe/ai/presentation/styles/ai_scribe_styles.dart b/scribe/lib/scribe/ai/presentation/styles/ai_scribe_styles.dart index cee7811ec..962134bb3 100644 --- a/scribe/lib/scribe/ai/presentation/styles/ai_scribe_styles.dart +++ b/scribe/lib/scribe/ai/presentation/styles/ai_scribe_styles.dart @@ -205,6 +205,9 @@ abstract final class AIScribeSizes { static const EdgeInsetsGeometry searchBarPadding = EdgeInsetsDirectional.symmetric(horizontal: 16); + static const EdgeInsetsGeometry searchBarMobilePadding = + EdgeInsetsDirectional.all(16); + static const EdgeInsetsGeometry suggestionContentPadding = EdgeInsetsDirectional.all(16); diff --git a/scribe/lib/scribe/ai/presentation/widgets/mobile/ai_scribe_mobile_actions_bottom_sheet.dart b/scribe/lib/scribe/ai/presentation/widgets/mobile/ai_scribe_mobile_actions_bottom_sheet.dart index c3b81effa..cef905078 100644 --- a/scribe/lib/scribe/ai/presentation/widgets/mobile/ai_scribe_mobile_actions_bottom_sheet.dart +++ b/scribe/lib/scribe/ai/presentation/widgets/mobile/ai_scribe_mobile_actions_bottom_sheet.dart @@ -153,16 +153,18 @@ class _AiScribeMobileActionsBottomSheetState ); } - Widget _buildBottomBarContent(BuildContext context) { + Widget _buildBottomBar(BuildContext context) { if (!widget.showCustomPromptBar) { return const SizedBox.shrink(); } - return AIScribeBar( - onCustomPrompt: _onCustomPromptSubmit, - imagePaths: widget.imagePaths, - borderRadius: AIScribeSizes.bottomBarRadius, - hintStyle: AIScribeTextStyles.searchBar, + return Padding( + padding: AIScribeSizes.searchBarMobilePadding, + child: AIScribeBar( + onCustomPrompt: _onCustomPromptSubmit, + imagePaths: widget.imagePaths, + borderRadius: AIScribeSizes.bottomBarRadius, + ) ); } @@ -185,8 +187,7 @@ class _AiScribeMobileActionsBottomSheetState final hasContent = widget.content?.isNotEmpty ?? false; - final bottomBarPadding = MediaQuery.of(context).viewInsets.bottom + 16.0; - final bottomBarInset = bottomBarPadding + (widget.showCustomPromptBar ? AIScribeSizes.searchBarMaxHeight : 0.0); + final bottomBarPadding = MediaQuery.of(context).viewInsets.bottom; return PointerInterceptor( child: Container( @@ -198,7 +199,7 @@ class _AiScribeMobileActionsBottomSheetState child: Stack( children: [ Padding( - padding: EdgeInsets.only(bottom: bottomBarInset), + padding: EdgeInsets.only(bottom: bottomBarPadding), child: Column( mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.stretch, @@ -221,18 +222,14 @@ class _AiScribeMobileActionsBottomSheetState }, ), ), + ], ), ), + _buildBottomBar(context) ], ), ), - Positioned( - bottom: bottomBarPadding, - left: 16.0, - right: 16.0, - child: _buildBottomBarContent(context), - ), ], ), ), diff --git a/scribe/lib/scribe/ai/presentation/widgets/search/ai_scribe_bar.dart b/scribe/lib/scribe/ai/presentation/widgets/search/ai_scribe_bar.dart index 5f3adb0f3..8d866416f 100644 --- a/scribe/lib/scribe/ai/presentation/widgets/search/ai_scribe_bar.dart +++ b/scribe/lib/scribe/ai/presentation/widgets/search/ai_scribe_bar.dart @@ -10,14 +10,12 @@ class AIScribeBar extends StatefulWidget { final OnCustomPromptCallback onCustomPrompt; final ImagePaths imagePaths; final double? borderRadius; - final TextStyle? hintStyle; const AIScribeBar({ super.key, required this.onCustomPrompt, required this.imagePaths, - this.borderRadius, - this.hintStyle, + this.borderRadius }); @override @@ -75,59 +73,57 @@ class _AIScribeBarState extends State { borderRadius: borderRadius, gradient: AIScribeColors.barGradient, ), - child: ClipRRect( - borderRadius: borderRadius, - child: Container( - width: AIScribeSizes.searchBarWidth, - padding: AIScribeSizes.searchBarPadding, - decoration: const BoxDecoration( - color: AIScribeColors.background, - ), - constraints: const BoxConstraints( - maxHeight: AIScribeSizes.searchBarMaxHeight, - minHeight: AIScribeSizes.searchBarMinHeight, - ), - child: Row( - children: [ - Expanded( - child: KeyboardListener( - focusNode: _keyboardListenerFocusNode, - onKeyEvent: _handleKeyboardEvent, - child: TextField( - controller: _controller, - focusNode: _textFieldFocusNode, - decoration: InputDecoration( - hintText: ScribeLocalizations.of(context).customPromptAction, - hintStyle: widget.hintStyle ?? AIScribeTextStyles.searchBarHint, - border: InputBorder.none, - contentPadding: const EdgeInsets.symmetric(vertical: 8), - isDense: true, - ), - style: AIScribeTextStyles.searchBar, - maxLines: null, - keyboardType: TextInputType.multiline, - cursorHeight: 16, + child: Container( + width: AIScribeSizes.searchBarWidth, + padding: AIScribeSizes.searchBarPadding, + decoration: BoxDecoration( + color: AIScribeColors.background, + borderRadius: borderRadius, + ), + constraints: const BoxConstraints( + maxHeight: AIScribeSizes.searchBarMaxHeight, + minHeight: AIScribeSizes.searchBarMinHeight, + ), + child: Row( + children: [ + Expanded( + child: KeyboardListener( + focusNode: _keyboardListenerFocusNode, + onKeyEvent: _handleKeyboardEvent, + child: TextField( + controller: _controller, + focusNode: _textFieldFocusNode, + decoration: InputDecoration( + hintText: ScribeLocalizations.of(context).customPromptAction, + hintStyle: AIScribeTextStyles.searchBarHint, + border: InputBorder.none, + contentPadding: const EdgeInsets.symmetric(vertical: 8), + isDense: true, ), + style: AIScribeTextStyles.searchBar, + maxLines: null, + keyboardType: TextInputType.multiline, + cursorHeight: 16, ), ), - const SizedBox(width: AIScribeSizes.fieldSpacing), - ValueListenableBuilder( - valueListenable: _isButtonEnabled, - builder: (_, isEnabled, __) { - return TMailButtonWidget.fromIcon( - icon: widget.imagePaths.icSend, - iconSize: AIScribeSizes.sendIcon, - padding: AIScribeSizes.sendIconPadding, - iconColor: AIScribeColors.background, - backgroundColor: isEnabled - ? AIScribeColors.sendPromptBackground - : AIScribeColors.sendPromptBackgroundDisabled, - onTapActionCallback: isEnabled ? _onSendPressed : null, - ); - }, - ), - ], - ), + ), + const SizedBox(width: AIScribeSizes.fieldSpacing), + ValueListenableBuilder( + valueListenable: _isButtonEnabled, + builder: (_, isEnabled, __) { + return TMailButtonWidget.fromIcon( + icon: widget.imagePaths.icSend, + iconSize: AIScribeSizes.sendIcon, + padding: AIScribeSizes.sendIconPadding, + iconColor: AIScribeColors.background, + backgroundColor: isEnabled + ? AIScribeColors.sendPromptBackground + : AIScribeColors.sendPromptBackgroundDisabled, + onTapActionCallback: isEnabled ? _onSendPressed : null, + ); + }, + ), + ], ), ), );