opt: dyndetail/html ctr listener

related #305

Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
bggRGjQaUbCoE
2025-03-05 12:43:57 +08:00
parent ed19e13630
commit bfcea11320
2 changed files with 34 additions and 27 deletions

View File

@@ -63,8 +63,7 @@ class _DynamicDetailPageState extends State<DynamicDetailPage>
get _getImageCallback => _horizontalPreview get _getImageCallback => _horizontalPreview
? (imgList, index) { ? (imgList, index) {
bool needReverse = bool needReverse = _isFabVisible;
_fabAnimationCtr?.status.isForwardOrCompleted == true;
if (needReverse) { if (needReverse) {
_fabAnimationCtr?.reverse(); _fabAnimationCtr?.reverse();
} }
@@ -195,8 +194,7 @@ class _DynamicDetailPageState extends State<DynamicDetailPage>
} else { } else {
ScaffoldState? scaffoldState = Scaffold.maybeOf(context); ScaffoldState? scaffoldState = Scaffold.maybeOf(context);
if (scaffoldState != null) { if (scaffoldState != null) {
bool needReverse = bool needReverse = _isFabVisible;
_fabAnimationCtr?.status.isForwardOrCompleted == true;
if (needReverse) { if (needReverse) {
_fabAnimationCtr?.reverse(); _fabAnimationCtr?.reverse();
} }
@@ -229,22 +227,28 @@ class _DynamicDetailPageState extends State<DynamicDetailPage>
void listener() { void listener() {
// 标题 // 标题
if (_dynamicDetailController.scrollController.offset > 55 && if (_dynamicDetailController.scrollController.positions.length == 1) {
!_visibleTitle) { if (_dynamicDetailController.scrollController.offset > 55 &&
_visibleTitle = true; !_visibleTitle) {
_titleStreamC.add(true); _visibleTitle = true;
} else if (_dynamicDetailController.scrollController.offset <= 55 && _titleStreamC.add(true);
_visibleTitle) { } else if (_dynamicDetailController.scrollController.offset <= 55 &&
_visibleTitle = false; _visibleTitle) {
_titleStreamC.add(false); _visibleTitle = false;
_titleStreamC.add(false);
}
} }
// fab按钮 // fab按钮
final ScrollDirection direction = final ScrollDirection direction1 = _dynamicDetailController
_dynamicDetailController.scrollController.position.userScrollDirection; .scrollController.positions.first.userScrollDirection;
if (direction == ScrollDirection.forward) { late final ScrollDirection direction2 = _dynamicDetailController
.scrollController.positions.last.userScrollDirection;
if (direction1 == ScrollDirection.forward ||
direction2 == ScrollDirection.forward) {
_showFab(); _showFab();
} else if (direction == ScrollDirection.reverse) { } else if (direction1 == ScrollDirection.reverse ||
direction2 == ScrollDirection.reverse) {
_hideFab(); _hideFab();
} }
} }
@@ -384,6 +388,7 @@ class _DynamicDetailPageState extends State<DynamicDetailPage>
Expanded( Expanded(
flex: _ratio[0].toInt(), flex: _ratio[0].toInt(),
child: CustomScrollView( child: CustomScrollView(
controller: _dynamicDetailController.scrollController,
physics: const AlwaysScrollableScrollPhysics(), physics: const AlwaysScrollableScrollPhysics(),
slivers: [ slivers: [
SliverPadding( SliverPadding(

View File

@@ -56,8 +56,7 @@ class _HtmlRenderPageState extends State<HtmlRenderPage>
get _getImageCallback => _horizontalPreview get _getImageCallback => _horizontalPreview
? (imgList, index) { ? (imgList, index) {
bool needReverse = bool needReverse = _isFabVisible;
fabAnimationCtr.status.isForwardOrCompleted == true;
if (needReverse) { if (needReverse) {
fabAnimationCtr.reverse(); fabAnimationCtr.reverse();
} }
@@ -131,11 +130,15 @@ class _HtmlRenderPageState extends State<HtmlRenderPage>
// } // }
// fab按钮 // fab按钮
final ScrollDirection direction = final ScrollDirection direction1 =
_htmlRenderCtr.scrollController.position.userScrollDirection; _htmlRenderCtr.scrollController.positions.first.userScrollDirection;
if (direction == ScrollDirection.forward) { late final ScrollDirection direction2 =
_htmlRenderCtr.scrollController.positions.last.userScrollDirection;
if (direction1 == ScrollDirection.forward ||
direction2 == ScrollDirection.forward) {
_showFab(); _showFab();
} else if (direction == ScrollDirection.reverse) { } else if (direction1 == ScrollDirection.reverse ||
direction2 == ScrollDirection.reverse) {
_hideFab(); _hideFab();
} }
} }
@@ -184,8 +187,7 @@ class _HtmlRenderPageState extends State<HtmlRenderPage>
} else { } else {
ScaffoldState? scaffoldState = Scaffold.maybeOf(context); ScaffoldState? scaffoldState = Scaffold.maybeOf(context);
if (scaffoldState != null) { if (scaffoldState != null) {
bool needReverse = bool needReverse = _isFabVisible;
fabAnimationCtr.status.isForwardOrCompleted == true;
if (needReverse) { if (needReverse) {
fabAnimationCtr.reverse(); fabAnimationCtr.reverse();
} }
@@ -337,9 +339,8 @@ class _HtmlRenderPageState extends State<HtmlRenderPage>
Expanded( Expanded(
flex: _ratio[0].toInt(), flex: _ratio[0].toInt(),
child: CustomScrollView( child: CustomScrollView(
controller: orientation == Orientation.portrait controller: _htmlRenderCtr.scrollController,
? _htmlRenderCtr.scrollController physics: const AlwaysScrollableScrollPhysics(),
: null,
slivers: [ slivers: [
SliverPadding( SliverPadding(
padding: orientation == Orientation.portrait padding: orientation == Orientation.portrait
@@ -402,6 +403,7 @@ class _HtmlRenderPageState extends State<HtmlRenderPage>
backgroundColor: Colors.transparent, backgroundColor: Colors.transparent,
body: CustomScrollView( body: CustomScrollView(
controller: _htmlRenderCtr.scrollController, controller: _htmlRenderCtr.scrollController,
physics: const AlwaysScrollableScrollPhysics(),
slivers: [ slivers: [
SliverPadding( SliverPadding(
padding: EdgeInsets.only(right: padding / 4), padding: EdgeInsets.only(right: padding / 4),