From d1dfde8c7c06630d05aa1c86c7e8e509db74ef9e Mon Sep 17 00:00:00 2001 From: Takashi Kawasaki Date: Mon, 26 Aug 2024 01:10:32 +0900 Subject: [PATCH] #4, #185: Improves text selection stability --- lib/src/widgets/pdf_page_text_overlay.dart | 5 ++--- lib/src/widgets/pdf_viewer.dart | 16 ++++++---------- 2 files changed, 8 insertions(+), 13 deletions(-) diff --git a/lib/src/widgets/pdf_page_text_overlay.dart b/lib/src/widgets/pdf_page_text_overlay.dart index 071bd76..b1bb535 100644 --- a/lib/src/widgets/pdf_page_text_overlay.dart +++ b/lib/src/widgets/pdf_page_text_overlay.dart @@ -10,14 +10,12 @@ import '../utils/double_extensions.dart'; /// If [PdfDocument.permissions] does not allow copying, the widget does not show anything. class PdfPageTextOverlay extends StatefulWidget { const PdfPageTextOverlay({ - required this.registrar, required this.page, required this.pageRect, this.onTextSelectionChange, super.key, }); - final SelectionRegistrar? registrar; final PdfPage page; final Rect pageRect; final void Function(PdfTextRanges? ranges)? onTextSelectionChange; @@ -95,12 +93,13 @@ class _PdfPageTextOverlayState extends State { widget.page.document.permissions?.allowsCopying == false) { return const SizedBox(); } + final registrar = SelectionContainer.maybeOf(context); return MouseRegion( hitTestBehavior: HitTestBehavior.translucent, cursor: cursor, onHover: _onHover, child: _PdfTextWidget( - widget.registrar, + registrar, this, ), ); diff --git a/lib/src/widgets/pdf_viewer.dart b/lib/src/widgets/pdf_viewer.dart index 5ed4b1a..cb34e51 100644 --- a/lib/src/widgets/pdf_viewer.dart +++ b/lib/src/widgets/pdf_viewer.dart @@ -759,22 +759,18 @@ class _PdfViewerState extends State _document!.permissions?.allowsCopying != false) { textWidgets.add( Positioned( + key: Key('_pagePos:${page.pageNumber}'), left: rectExternal.left, top: rectExternal.top, width: rectExternal.width, height: rectExternal.height, child: selectionAreaInjector( page, - Builder(builder: (context) { - final registrar = SelectionContainer.maybeOf(context); - return PdfPageTextOverlay( - key: Key('pageText:${page.pageNumber}'), - registrar: registrar, - page: page, - pageRect: rectExternal, - onTextSelectionChange: widget.params.onTextSelectionChange, - ); - }), + PdfPageTextOverlay( + page: page, + pageRect: rectExternal, + onTextSelectionChange: widget.params.onTextSelectionChange, + ), ), ), );