From a0f815e3858f028f4dc34cabd27be1f4f3a997b7 Mon Sep 17 00:00:00 2001 From: leonardo1952 Date: Tue, 25 Nov 2025 09:42:45 -0300 Subject: [PATCH 1/6] initial --- lib/src/widgets/pluto_scrollbar.dart | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/lib/src/widgets/pluto_scrollbar.dart b/lib/src/widgets/pluto_scrollbar.dart index 9106c56f0..264529a01 100644 --- a/lib/src/widgets/pluto_scrollbar.dart +++ b/lib/src/widgets/pluto_scrollbar.dart @@ -578,10 +578,31 @@ class PlutoGridCupertinoScrollbarState extends State @override Widget build(BuildContext context) { - Widget child = CustomPaint( + final bool hasVerticalScrollbar = widget.verticalController != null; + + final bool hasHorizontalScrollbar = widget.horizontalController != null; + + Widget child = widget.child; + + final double rightPadding = + hasVerticalScrollbar ? widget.hoverWidth : 0.0; + final double bottomPadding = + hasHorizontalScrollbar ? widget.hoverWidth : 0.0; + + if (rightPadding > 0 || bottomPadding > 0) { + child = Padding( + padding: EdgeInsets.only( + right: rightPadding, + bottom: bottomPadding, + ), + child: child, + ); + } + + child = CustomPaint( key: _customPaintKey, foregroundPainter: _painter, - child: RepaintBoundary(child: widget.child), + child: RepaintBoundary(child: child), ); if (widget.enableHover) { From b2995594899bb38446ca673ae9dd946141c3c779 Mon Sep 17 00:00:00 2001 From: leonardo1952 Date: Tue, 25 Nov 2025 09:53:28 -0300 Subject: [PATCH 2/6] padding title --- lib/src/ui/pluto_body_columns.dart | 15 ++++++++++++++- lib/src/ui/pluto_body_columns_footer.dart | 15 ++++++++++++++- lib/src/widgets/pluto_scrollbar.dart | 9 ++++----- 3 files changed, 32 insertions(+), 7 deletions(-) diff --git a/lib/src/ui/pluto_body_columns.dart b/lib/src/ui/pluto_body_columns.dart index 417c34a11..81028c71f 100644 --- a/lib/src/ui/pluto_body_columns.dart +++ b/lib/src/ui/pluto_body_columns.dart @@ -106,7 +106,9 @@ class PlutoBodyColumnsState extends PlutoStateWithChange { @override Widget build(BuildContext context) { - return SingleChildScrollView( + final scrollbarConfig = stateManager.configuration.scrollbar; + + Widget header = SingleChildScrollView( controller: _scroll, scrollDirection: Axis.horizontal, physics: const ClampingScrollPhysics(), @@ -125,6 +127,17 @@ class PlutoBodyColumnsState extends PlutoStateWithChange { : _columns.map(_makeColumn).toList(growable: false), ), ); + + if (scrollbarConfig.draggableScrollbar) { + header = Padding( + padding: EdgeInsetsDirectional.only( + end: scrollbarConfig.hoverWidth, + ), + child: header, + ); + } + + return header; } } diff --git a/lib/src/ui/pluto_body_columns_footer.dart b/lib/src/ui/pluto_body_columns_footer.dart index 264747485..be25fb317 100644 --- a/lib/src/ui/pluto_body_columns_footer.dart +++ b/lib/src/ui/pluto_body_columns_footer.dart @@ -73,7 +73,9 @@ class PlutoBodyColumnsFooterState @override Widget build(BuildContext context) { - return SingleChildScrollView( + final scrollbarConfig = stateManager.configuration.scrollbar; + + Widget footer = SingleChildScrollView( controller: _scroll, scrollDirection: Axis.horizontal, physics: const ClampingScrollPhysics(), @@ -88,6 +90,17 @@ class PlutoBodyColumnsFooterState children: _columns.map(_makeFooter).toList(growable: false), ), ); + + if (scrollbarConfig.draggableScrollbar) { + footer = Padding( + padding: EdgeInsetsDirectional.only( + end: scrollbarConfig.hoverWidth, + ), + child: footer, + ); + } + + return footer; } } diff --git a/lib/src/widgets/pluto_scrollbar.dart b/lib/src/widgets/pluto_scrollbar.dart index 264529a01..333ff10b6 100644 --- a/lib/src/widgets/pluto_scrollbar.dart +++ b/lib/src/widgets/pluto_scrollbar.dart @@ -584,15 +584,14 @@ class PlutoGridCupertinoScrollbarState extends State Widget child = widget.child; - final double rightPadding = - hasVerticalScrollbar ? widget.hoverWidth : 0.0; + final double endPadding = hasVerticalScrollbar ? widget.hoverWidth : 0.0; final double bottomPadding = hasHorizontalScrollbar ? widget.hoverWidth : 0.0; - if (rightPadding > 0 || bottomPadding > 0) { + if (endPadding > 0 || bottomPadding > 0) { child = Padding( - padding: EdgeInsets.only( - right: rightPadding, + padding: EdgeInsetsDirectional.only( + end: endPadding, bottom: bottomPadding, ), child: child, From 633501ff5a8104d295a8761ff9ecb6fa4c63cafe Mon Sep 17 00:00:00 2001 From: leonardo1952 Date: Tue, 25 Nov 2025 10:13:09 -0300 Subject: [PATCH 3/6] reserve space --- lib/src/manager/state/layout_state.dart | 37 ++++++++++++ lib/src/ui/pluto_body_columns.dart | 3 +- lib/src/ui/pluto_body_columns_footer.dart | 3 +- lib/src/ui/pluto_body_rows.dart | 72 +++++++++++++++-------- lib/src/widgets/pluto_scrollbar.dart | 18 ------ 5 files changed, 87 insertions(+), 46 deletions(-) diff --git a/lib/src/manager/state/layout_state.dart b/lib/src/manager/state/layout_state.dart index 0732270bb..90827c0eb 100644 --- a/lib/src/manager/state/layout_state.dart +++ b/lib/src/manager/state/layout_state.dart @@ -89,6 +89,10 @@ abstract class ILayoutState { double get scrollOffsetByFrozenColumn; + bool get needsVerticalScrollbarSpace; + + bool get needsHorizontalScrollbarSpace; + TextDirection get textDirection; bool get isLTR; @@ -385,6 +389,39 @@ mixin LayoutState implements IPlutoGridState { return offset; } + @override + bool get needsVerticalScrollbarSpace { + if (maxHeight == null) { + return false; + } + + final double availableHeight = + rowContainerHeight - columnFooterHeight; + + if (availableHeight <= 0) { + return false; + } + + final double totalRowsHeight = refRows.length * rowTotalHeight; + + return totalRowsHeight > availableHeight; + } + + @override + bool get needsHorizontalScrollbarSpace { + if (maxWidth == null) { + return false; + } + + final double availableWidth = maxWidth! - bodyLeftOffset - bodyRightOffset; + + if (availableWidth <= 0) { + return false; + } + + return bodyColumnsWidth > availableWidth; + } + @override TextDirection get textDirection => _state._textDirection; diff --git a/lib/src/ui/pluto_body_columns.dart b/lib/src/ui/pluto_body_columns.dart index 81028c71f..17691dce1 100644 --- a/lib/src/ui/pluto_body_columns.dart +++ b/lib/src/ui/pluto_body_columns.dart @@ -128,7 +128,8 @@ class PlutoBodyColumnsState extends PlutoStateWithChange { ), ); - if (scrollbarConfig.draggableScrollbar) { + if (scrollbarConfig.draggableScrollbar && + stateManager.needsVerticalScrollbarSpace) { header = Padding( padding: EdgeInsetsDirectional.only( end: scrollbarConfig.hoverWidth, diff --git a/lib/src/ui/pluto_body_columns_footer.dart b/lib/src/ui/pluto_body_columns_footer.dart index be25fb317..0c4949f6a 100644 --- a/lib/src/ui/pluto_body_columns_footer.dart +++ b/lib/src/ui/pluto_body_columns_footer.dart @@ -91,7 +91,8 @@ class PlutoBodyColumnsFooterState ), ); - if (scrollbarConfig.draggableScrollbar) { + if (scrollbarConfig.draggableScrollbar && + stateManager.needsVerticalScrollbarSpace) { footer = Padding( padding: EdgeInsetsDirectional.only( end: scrollbarConfig.hoverWidth, diff --git a/lib/src/ui/pluto_body_rows.dart b/lib/src/ui/pluto_body_rows.dart index fc37f7209..53daa425d 100644 --- a/lib/src/ui/pluto_body_rows.dart +++ b/lib/src/ui/pluto_body_rows.dart @@ -71,6 +71,51 @@ class PlutoBodyRowsState extends PlutoStateWithChange { Widget build(BuildContext context) { final scrollbarConfig = stateManager.configuration.scrollbar; + final bool reserveVerticalSpace = + scrollbarConfig.draggableScrollbar && + stateManager.needsVerticalScrollbarSpace; + + final bool reserveHorizontalSpace = + scrollbarConfig.draggableScrollbar && + stateManager.needsHorizontalScrollbarSpace; + + Widget content = SingleChildScrollView( + controller: _horizontalScroll, + scrollDirection: Axis.horizontal, + physics: const ClampingScrollPhysics(), + child: CustomSingleChildLayout( + delegate: ListResizeDelegate(stateManager, _columns), + child: ListView.builder( + controller: _verticalScroll, + scrollDirection: Axis.vertical, + physics: const ClampingScrollPhysics(), + itemCount: _rows.length, + itemExtent: stateManager.rowTotalHeight, + addRepaintBoundaries: false, + itemBuilder: (ctx, i) { + return PlutoBaseRow( + key: ValueKey('body_row_${_rows[i].key}'), + rowIdx: i, + row: _rows[i], + columns: _columns, + stateManager: stateManager, + visibilityLayout: true, + ); + }, + ), + ), + ); + + if (reserveVerticalSpace || reserveHorizontalSpace) { + content = Padding( + padding: EdgeInsetsDirectional.only( + end: reserveVerticalSpace ? scrollbarConfig.hoverWidth : 0, + bottom: reserveHorizontalSpace ? scrollbarConfig.hoverWidth : 0, + ), + child: content, + ); + } + return PlutoScrollbar( verticalController: scrollbarConfig.draggableScrollbar ? _verticalScroll : null, @@ -90,32 +135,7 @@ class PlutoBodyRowsState extends PlutoStateWithChange { radius: scrollbarConfig.scrollbarRadius, radiusWhileDragging: scrollbarConfig.scrollbarRadiusWhileDragging, longPressDuration: scrollbarConfig.longPressDuration, - child: SingleChildScrollView( - controller: _horizontalScroll, - scrollDirection: Axis.horizontal, - physics: const ClampingScrollPhysics(), - child: CustomSingleChildLayout( - delegate: ListResizeDelegate(stateManager, _columns), - child: ListView.builder( - controller: _verticalScroll, - scrollDirection: Axis.vertical, - physics: const ClampingScrollPhysics(), - itemCount: _rows.length, - itemExtent: stateManager.rowTotalHeight, - addRepaintBoundaries: false, - itemBuilder: (ctx, i) { - return PlutoBaseRow( - key: ValueKey('body_row_${_rows[i].key}'), - rowIdx: i, - row: _rows[i], - columns: _columns, - stateManager: stateManager, - visibilityLayout: true, - ); - }, - ), - ), - ), + child: content, ); } } diff --git a/lib/src/widgets/pluto_scrollbar.dart b/lib/src/widgets/pluto_scrollbar.dart index 333ff10b6..543e150a0 100644 --- a/lib/src/widgets/pluto_scrollbar.dart +++ b/lib/src/widgets/pluto_scrollbar.dart @@ -578,26 +578,8 @@ class PlutoGridCupertinoScrollbarState extends State @override Widget build(BuildContext context) { - final bool hasVerticalScrollbar = widget.verticalController != null; - - final bool hasHorizontalScrollbar = widget.horizontalController != null; - Widget child = widget.child; - final double endPadding = hasVerticalScrollbar ? widget.hoverWidth : 0.0; - final double bottomPadding = - hasHorizontalScrollbar ? widget.hoverWidth : 0.0; - - if (endPadding > 0 || bottomPadding > 0) { - child = Padding( - padding: EdgeInsetsDirectional.only( - end: endPadding, - bottom: bottomPadding, - ), - child: child, - ); - } - child = CustomPaint( key: _customPaintKey, foregroundPainter: _painter, From e63db1b56a8b5a1a823d04c6130fb04ae1c21d7b Mon Sep 17 00:00:00 2001 From: leonardo1952 Date: Tue, 25 Nov 2025 10:26:09 -0300 Subject: [PATCH 4/6] Revert "reserve space" This reverts commit 633501ff5a8104d295a8761ff9ecb6fa4c63cafe. --- lib/src/manager/state/layout_state.dart | 37 ------------ lib/src/ui/pluto_body_columns.dart | 3 +- lib/src/ui/pluto_body_columns_footer.dart | 3 +- lib/src/ui/pluto_body_rows.dart | 72 ++++++++--------------- lib/src/widgets/pluto_scrollbar.dart | 18 ++++++ 5 files changed, 46 insertions(+), 87 deletions(-) diff --git a/lib/src/manager/state/layout_state.dart b/lib/src/manager/state/layout_state.dart index 90827c0eb..0732270bb 100644 --- a/lib/src/manager/state/layout_state.dart +++ b/lib/src/manager/state/layout_state.dart @@ -89,10 +89,6 @@ abstract class ILayoutState { double get scrollOffsetByFrozenColumn; - bool get needsVerticalScrollbarSpace; - - bool get needsHorizontalScrollbarSpace; - TextDirection get textDirection; bool get isLTR; @@ -389,39 +385,6 @@ mixin LayoutState implements IPlutoGridState { return offset; } - @override - bool get needsVerticalScrollbarSpace { - if (maxHeight == null) { - return false; - } - - final double availableHeight = - rowContainerHeight - columnFooterHeight; - - if (availableHeight <= 0) { - return false; - } - - final double totalRowsHeight = refRows.length * rowTotalHeight; - - return totalRowsHeight > availableHeight; - } - - @override - bool get needsHorizontalScrollbarSpace { - if (maxWidth == null) { - return false; - } - - final double availableWidth = maxWidth! - bodyLeftOffset - bodyRightOffset; - - if (availableWidth <= 0) { - return false; - } - - return bodyColumnsWidth > availableWidth; - } - @override TextDirection get textDirection => _state._textDirection; diff --git a/lib/src/ui/pluto_body_columns.dart b/lib/src/ui/pluto_body_columns.dart index 17691dce1..81028c71f 100644 --- a/lib/src/ui/pluto_body_columns.dart +++ b/lib/src/ui/pluto_body_columns.dart @@ -128,8 +128,7 @@ class PlutoBodyColumnsState extends PlutoStateWithChange { ), ); - if (scrollbarConfig.draggableScrollbar && - stateManager.needsVerticalScrollbarSpace) { + if (scrollbarConfig.draggableScrollbar) { header = Padding( padding: EdgeInsetsDirectional.only( end: scrollbarConfig.hoverWidth, diff --git a/lib/src/ui/pluto_body_columns_footer.dart b/lib/src/ui/pluto_body_columns_footer.dart index 0c4949f6a..be25fb317 100644 --- a/lib/src/ui/pluto_body_columns_footer.dart +++ b/lib/src/ui/pluto_body_columns_footer.dart @@ -91,8 +91,7 @@ class PlutoBodyColumnsFooterState ), ); - if (scrollbarConfig.draggableScrollbar && - stateManager.needsVerticalScrollbarSpace) { + if (scrollbarConfig.draggableScrollbar) { footer = Padding( padding: EdgeInsetsDirectional.only( end: scrollbarConfig.hoverWidth, diff --git a/lib/src/ui/pluto_body_rows.dart b/lib/src/ui/pluto_body_rows.dart index 53daa425d..fc37f7209 100644 --- a/lib/src/ui/pluto_body_rows.dart +++ b/lib/src/ui/pluto_body_rows.dart @@ -71,51 +71,6 @@ class PlutoBodyRowsState extends PlutoStateWithChange { Widget build(BuildContext context) { final scrollbarConfig = stateManager.configuration.scrollbar; - final bool reserveVerticalSpace = - scrollbarConfig.draggableScrollbar && - stateManager.needsVerticalScrollbarSpace; - - final bool reserveHorizontalSpace = - scrollbarConfig.draggableScrollbar && - stateManager.needsHorizontalScrollbarSpace; - - Widget content = SingleChildScrollView( - controller: _horizontalScroll, - scrollDirection: Axis.horizontal, - physics: const ClampingScrollPhysics(), - child: CustomSingleChildLayout( - delegate: ListResizeDelegate(stateManager, _columns), - child: ListView.builder( - controller: _verticalScroll, - scrollDirection: Axis.vertical, - physics: const ClampingScrollPhysics(), - itemCount: _rows.length, - itemExtent: stateManager.rowTotalHeight, - addRepaintBoundaries: false, - itemBuilder: (ctx, i) { - return PlutoBaseRow( - key: ValueKey('body_row_${_rows[i].key}'), - rowIdx: i, - row: _rows[i], - columns: _columns, - stateManager: stateManager, - visibilityLayout: true, - ); - }, - ), - ), - ); - - if (reserveVerticalSpace || reserveHorizontalSpace) { - content = Padding( - padding: EdgeInsetsDirectional.only( - end: reserveVerticalSpace ? scrollbarConfig.hoverWidth : 0, - bottom: reserveHorizontalSpace ? scrollbarConfig.hoverWidth : 0, - ), - child: content, - ); - } - return PlutoScrollbar( verticalController: scrollbarConfig.draggableScrollbar ? _verticalScroll : null, @@ -135,7 +90,32 @@ class PlutoBodyRowsState extends PlutoStateWithChange { radius: scrollbarConfig.scrollbarRadius, radiusWhileDragging: scrollbarConfig.scrollbarRadiusWhileDragging, longPressDuration: scrollbarConfig.longPressDuration, - child: content, + child: SingleChildScrollView( + controller: _horizontalScroll, + scrollDirection: Axis.horizontal, + physics: const ClampingScrollPhysics(), + child: CustomSingleChildLayout( + delegate: ListResizeDelegate(stateManager, _columns), + child: ListView.builder( + controller: _verticalScroll, + scrollDirection: Axis.vertical, + physics: const ClampingScrollPhysics(), + itemCount: _rows.length, + itemExtent: stateManager.rowTotalHeight, + addRepaintBoundaries: false, + itemBuilder: (ctx, i) { + return PlutoBaseRow( + key: ValueKey('body_row_${_rows[i].key}'), + rowIdx: i, + row: _rows[i], + columns: _columns, + stateManager: stateManager, + visibilityLayout: true, + ); + }, + ), + ), + ), ); } } diff --git a/lib/src/widgets/pluto_scrollbar.dart b/lib/src/widgets/pluto_scrollbar.dart index 543e150a0..333ff10b6 100644 --- a/lib/src/widgets/pluto_scrollbar.dart +++ b/lib/src/widgets/pluto_scrollbar.dart @@ -578,8 +578,26 @@ class PlutoGridCupertinoScrollbarState extends State @override Widget build(BuildContext context) { + final bool hasVerticalScrollbar = widget.verticalController != null; + + final bool hasHorizontalScrollbar = widget.horizontalController != null; + Widget child = widget.child; + final double endPadding = hasVerticalScrollbar ? widget.hoverWidth : 0.0; + final double bottomPadding = + hasHorizontalScrollbar ? widget.hoverWidth : 0.0; + + if (endPadding > 0 || bottomPadding > 0) { + child = Padding( + padding: EdgeInsetsDirectional.only( + end: endPadding, + bottom: bottomPadding, + ), + child: child, + ); + } + child = CustomPaint( key: _customPaintKey, foregroundPainter: _painter, From 85caf582458c36ca1bb22c58c9bc3ff26846b122 Mon Sep 17 00:00:00 2001 From: leonardo1952 Date: Tue, 25 Nov 2025 12:08:30 -0300 Subject: [PATCH 5/6] crash --- lib/src/manager/state/layout_state.dart | 4 ++++ lib/src/ui/pluto_body_rows.dart | 4 ++++ lib/src/widgets/pluto_scrollbar.dart | 15 +++++++++------ 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/lib/src/manager/state/layout_state.dart b/lib/src/manager/state/layout_state.dart index 0732270bb..3a6aaca38 100644 --- a/lib/src/manager/state/layout_state.dart +++ b/lib/src/manager/state/layout_state.dart @@ -89,6 +89,10 @@ abstract class ILayoutState { double get scrollOffsetByFrozenColumn; + bool get needsVerticalScrollbarSpace; + + bool get needsHorizontalScrollbarSpace; + TextDirection get textDirection; bool get isLTR; diff --git a/lib/src/ui/pluto_body_rows.dart b/lib/src/ui/pluto_body_rows.dart index fc37f7209..185d3209b 100644 --- a/lib/src/ui/pluto_body_rows.dart +++ b/lib/src/ui/pluto_body_rows.dart @@ -90,6 +90,10 @@ class PlutoBodyRowsState extends PlutoStateWithChange { radius: scrollbarConfig.scrollbarRadius, radiusWhileDragging: scrollbarConfig.scrollbarRadiusWhileDragging, longPressDuration: scrollbarConfig.longPressDuration, + reserveSpaceForVerticalScroll: scrollbarConfig.draggableScrollbar && + stateManager.needsVerticalScrollbarSpace, + reserveSpaceForHorizontalScroll: scrollbarConfig.draggableScrollbar && + stateManager.needsHorizontalScrollbarSpace, child: SingleChildScrollView( controller: _horizontalScroll, scrollDirection: Axis.horizontal, diff --git a/lib/src/widgets/pluto_scrollbar.dart b/lib/src/widgets/pluto_scrollbar.dart index 333ff10b6..09674079d 100644 --- a/lib/src/widgets/pluto_scrollbar.dart +++ b/lib/src/widgets/pluto_scrollbar.dart @@ -52,6 +52,8 @@ class PlutoScrollbar extends StatefulWidget { this.radius = defaultRadius, this.radiusWhileDragging = defaultRadiusWhileDragging, required this.child, + this.reserveSpaceForVerticalScroll = false, + this.reserveSpaceForHorizontalScroll = false, }) : assert(thickness < double.infinity), assert(thicknessWhileDragging < double.infinity), assert(!isAlwaysShown || @@ -95,6 +97,10 @@ class PlutoScrollbar extends StatefulWidget { final Widget child; + final bool reserveSpaceForVerticalScroll; + + final bool reserveSpaceForHorizontalScroll; + static const double defaultThickness = 3; static const double defaultThicknessWhileDragging = 8.0; @@ -578,15 +584,12 @@ class PlutoGridCupertinoScrollbarState extends State @override Widget build(BuildContext context) { - final bool hasVerticalScrollbar = widget.verticalController != null; - - final bool hasHorizontalScrollbar = widget.horizontalController != null; - Widget child = widget.child; - final double endPadding = hasVerticalScrollbar ? widget.hoverWidth : 0.0; + final double endPadding = + widget.reserveSpaceForVerticalScroll ? widget.hoverWidth : 0.0; final double bottomPadding = - hasHorizontalScrollbar ? widget.hoverWidth : 0.0; + widget.reserveSpaceForHorizontalScroll ? widget.hoverWidth : 0.0; if (endPadding > 0 || bottomPadding > 0) { child = Padding( From 59a1aff8bbd33973317a68ce069ece21a8d8e296 Mon Sep 17 00:00:00 2001 From: leonardo1952 Date: Wed, 26 Nov 2025 10:16:14 -0300 Subject: [PATCH 6/6] . --- .../ephemeral/.plugin_symlinks/url_launcher_linux | 1 + lib/src/ui/pluto_body_rows.dart | 4 ---- lib/src/widgets/pluto_scrollbar.dart | 9 ++++++--- 3 files changed, 7 insertions(+), 7 deletions(-) create mode 120000 demo/linux/flutter/ephemeral/.plugin_symlinks/url_launcher_linux diff --git a/demo/linux/flutter/ephemeral/.plugin_symlinks/url_launcher_linux b/demo/linux/flutter/ephemeral/.plugin_symlinks/url_launcher_linux new file mode 120000 index 000000000..ab6707853 --- /dev/null +++ b/demo/linux/flutter/ephemeral/.plugin_symlinks/url_launcher_linux @@ -0,0 +1 @@ +/home/leo/.pub-cache/hosted/pub.dev/url_launcher_linux-3.2.1/ \ No newline at end of file diff --git a/lib/src/ui/pluto_body_rows.dart b/lib/src/ui/pluto_body_rows.dart index 185d3209b..fc37f7209 100644 --- a/lib/src/ui/pluto_body_rows.dart +++ b/lib/src/ui/pluto_body_rows.dart @@ -90,10 +90,6 @@ class PlutoBodyRowsState extends PlutoStateWithChange { radius: scrollbarConfig.scrollbarRadius, radiusWhileDragging: scrollbarConfig.scrollbarRadiusWhileDragging, longPressDuration: scrollbarConfig.longPressDuration, - reserveSpaceForVerticalScroll: scrollbarConfig.draggableScrollbar && - stateManager.needsVerticalScrollbarSpace, - reserveSpaceForHorizontalScroll: scrollbarConfig.draggableScrollbar && - stateManager.needsHorizontalScrollbarSpace, child: SingleChildScrollView( controller: _horizontalScroll, scrollDirection: Axis.horizontal, diff --git a/lib/src/widgets/pluto_scrollbar.dart b/lib/src/widgets/pluto_scrollbar.dart index 09674079d..0e75629f9 100644 --- a/lib/src/widgets/pluto_scrollbar.dart +++ b/lib/src/widgets/pluto_scrollbar.dart @@ -584,12 +584,15 @@ class PlutoGridCupertinoScrollbarState extends State @override Widget build(BuildContext context) { + final bool hasVerticalScrollbar = widget.verticalController != null; + + final bool hasHorizontalScrollbar = widget.horizontalController != null; + Widget child = widget.child; - final double endPadding = - widget.reserveSpaceForVerticalScroll ? widget.hoverWidth : 0.0; + final double endPadding = hasVerticalScrollbar ? widget.hoverWidth : 0.0; final double bottomPadding = - widget.reserveSpaceForHorizontalScroll ? widget.hoverWidth : 0.0; + hasHorizontalScrollbar ? widget.hoverWidth : 0.0; if (endPadding > 0 || bottomPadding > 0) { child = Padding(