feat(scribe-mobile): Display the result prompt modal in the correct position relative to the inline scribe button on tablet

This commit is contained in:
dab246
2026-02-13 17:03:07 +07:00
committed by Dat H. Pham
parent 170bdd28c9
commit 5937055789
@@ -1,6 +1,7 @@
import 'dart:math';
import 'dart:math' hide log;
import 'package:core/presentation/resources/image_paths.dart';
import 'package:core/utils/platform_info.dart';
import 'package:flutter/material.dart';
import 'package:pointer_interceptor/pointer_interceptor.dart';
import 'package:scribe/scribe.dart';
@@ -87,6 +88,11 @@ class _AiScribeSuggestionWidgetState extends State<AiScribeSuggestionWidget>
padding: AIScribeSizes.screenEdgePadding,
);
final modalStartOffset = layout.left;
final modalBottomOffset =
_isMobileView ? null : layout.bottom + keyboardHeightWithSpacing;
final modalTopOffset = _isMobileView ? widget.buttonPosition!.dy : null;
return PointerInterceptor(
child: Stack(
children: [
@@ -97,11 +103,12 @@ class _AiScribeSuggestionWidgetState extends State<AiScribeSuggestionWidget>
),
),
PositionedDirectional(
start: layout.left,
start: modalStartOffset,
// layout.bottom is calculated by taking keyboard into account
// but positionned without taking keyboard into account
// but positioned without taking keyboard into account
// that's why we need to add keyboard height here
bottom: layout.bottom + keyboardHeightWithSpacing,
top: modalTopOffset,
bottom: modalBottomOffset,
child: _buildModalContainer(
width: modalWidth,
maxHeight: layout.availableHeight,
@@ -160,6 +167,9 @@ class _AiScribeSuggestionWidgetState extends State<AiScribeSuggestionWidget>
bool get _hasAnchor =>
widget.buttonPosition != null && widget.buttonSize != null;
bool get _isMobileView =>
PlatformInfo.isMobile || PlatformInfo.isWebTouchDevice;
void _handleClickOutside() {
final shouldDismiss = suggestionState.value.fold(
(failure) => failure is GenerateAITextFailure,