From ecefc4bdd58ad5056f25d29511562e2681dec8d5 Mon Sep 17 00:00:00 2001 From: bggRGjQaUbCoE Date: Fri, 30 Aug 2024 14:07:46 +0800 Subject: [PATCH] fix: anim to top --- lib/pages/bangumi/controller.dart | 11 +++-------- lib/pages/dynamics/controller.dart | 10 ++-------- lib/pages/dynamics/tab/controller.dart | 11 +++-------- lib/pages/hot/controller.dart | 11 +++-------- lib/pages/live/controller.dart | 11 +++-------- lib/pages/rank/zone/controller.dart | 11 +++-------- lib/pages/rcmd/controller.dart | 11 +++-------- lib/pages/search_panel/controller.dart | 11 +++-------- lib/utils/extension.dart | 13 ++++++++----- 9 files changed, 31 insertions(+), 69 deletions(-) diff --git a/lib/pages/bangumi/controller.dart b/lib/pages/bangumi/controller.dart index 3549c0de1..c6f0da630 100644 --- a/lib/pages/bangumi/controller.dart +++ b/lib/pages/bangumi/controller.dart @@ -1,3 +1,4 @@ +import 'package:PiliPalaX/utils/extension.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:hive/hive.dart'; @@ -62,13 +63,7 @@ class BangumiController extends GetxController { } // 返回顶部并刷新 - void animateToTop() async { - if (scrollController.offset >= - MediaQuery.of(Get.context!).size.height * 5) { - scrollController.jumpTo(0); - } else { - await scrollController.animateTo(0, - duration: const Duration(milliseconds: 500), curve: Curves.easeInOut); - } + void animateToTop() { + scrollController.animToTop(); } } diff --git a/lib/pages/dynamics/controller.dart b/lib/pages/dynamics/controller.dart index 446d8689a..a7ab9d999 100644 --- a/lib/pages/dynamics/controller.dart +++ b/lib/pages/dynamics/controller.dart @@ -1,6 +1,7 @@ // ignore_for_file: avoid_print import 'package:PiliPalaX/http/follow.dart'; +import 'package:PiliPalaX/utils/extension.dart'; import 'package:flutter/material.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:get/get.dart'; @@ -314,13 +315,6 @@ class DynamicsController extends GetxController // 返回顶部并刷新 void animateToTop() async { tabsConfig[tabController.index]['ctr'].animateToTop(); - if (!scrollController.hasClients) return; - if (scrollController.offset >= - MediaQuery.of(Get.context!).size.height * 5) { - scrollController.jumpTo(0); - } else { - await scrollController.animateTo(0, - duration: const Duration(milliseconds: 500), curve: Curves.easeInOut); - } + scrollController.animToTop(); } } diff --git a/lib/pages/dynamics/tab/controller.dart b/lib/pages/dynamics/tab/controller.dart index 607a3b420..5ef26c689 100644 --- a/lib/pages/dynamics/tab/controller.dart +++ b/lib/pages/dynamics/tab/controller.dart @@ -1,3 +1,4 @@ +import 'package:PiliPalaX/utils/extension.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:get/get.dart'; import 'package:flutter/material.dart'; @@ -64,13 +65,7 @@ class DynamicsTabController extends GetxController { } // 返回顶部并刷新 - void animateToTop() async { - if (scrollController.offset >= - MediaQuery.of(Get.context!).size.height * 5) { - scrollController.jumpTo(0); - } else { - await scrollController.animateTo(0, - duration: const Duration(milliseconds: 500), curve: Curves.easeInOut); - } + void animateToTop() { + scrollController.animToTop(); } } diff --git a/lib/pages/hot/controller.dart b/lib/pages/hot/controller.dart index cab8646c3..de1d27d07 100644 --- a/lib/pages/hot/controller.dart +++ b/lib/pages/hot/controller.dart @@ -1,3 +1,4 @@ +import 'package:PiliPalaX/utils/extension.dart'; import 'package:get/get.dart'; import 'package:flutter/material.dart'; import 'package:PiliPalaX/http/video.dart'; @@ -48,13 +49,7 @@ class HotController extends GetxController { } // 返回顶部 - void animateToTop() async { - if (scrollController.offset >= - MediaQuery.of(Get.context!).size.height * 5) { - scrollController.jumpTo(0); - } else { - await scrollController.animateTo(0, - duration: const Duration(milliseconds: 500), curve: Curves.easeInOut); - } + void animateToTop() { + scrollController.animToTop(); } } diff --git a/lib/pages/live/controller.dart b/lib/pages/live/controller.dart index 9332e6599..af72c58a5 100644 --- a/lib/pages/live/controller.dart +++ b/lib/pages/live/controller.dart @@ -1,3 +1,4 @@ +import 'package:PiliPalaX/utils/extension.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:hive/hive.dart'; @@ -50,13 +51,7 @@ class LiveController extends GetxController { } // 返回顶部并刷新 - void animateToTop() async { - if (scrollController.offset >= - MediaQuery.of(Get.context!).size.height * 5) { - scrollController.jumpTo(0); - } else { - await scrollController.animateTo(0, - duration: const Duration(milliseconds: 500), curve: Curves.easeInOut); - } + void animateToTop() { + scrollController.animToTop(); } } diff --git a/lib/pages/rank/zone/controller.dart b/lib/pages/rank/zone/controller.dart index 9abe0702b..cc72d8142 100644 --- a/lib/pages/rank/zone/controller.dart +++ b/lib/pages/rank/zone/controller.dart @@ -1,3 +1,4 @@ +import 'package:PiliPalaX/utils/extension.dart'; import 'package:get/get.dart'; import 'package:flutter/material.dart'; import 'package:PiliPalaX/http/video.dart'; @@ -41,13 +42,7 @@ class ZoneController extends GetxController { } // 返回顶部并刷新 - void animateToTop() async { - if (scrollController.offset >= - MediaQuery.of(Get.context!).size.height * 5) { - scrollController.jumpTo(0); - } else { - await scrollController.animateTo(0, - duration: const Duration(milliseconds: 500), curve: Curves.easeInOut); - } + void animateToTop() { + scrollController.animToTop(); } } diff --git a/lib/pages/rcmd/controller.dart b/lib/pages/rcmd/controller.dart index c1b19b9a5..34c172b06 100644 --- a/lib/pages/rcmd/controller.dart +++ b/lib/pages/rcmd/controller.dart @@ -1,3 +1,4 @@ +import 'package:PiliPalaX/utils/extension.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:get/get.dart'; @@ -97,13 +98,7 @@ class RcmdController extends GetxController { } // 返回顶部 - void animateToTop() async { - if (scrollController.offset >= - MediaQuery.of(Get.context!).size.height * 5) { - scrollController.jumpTo(0); - } else { - await scrollController.animateTo(0, - duration: const Duration(milliseconds: 500), curve: Curves.easeInOut); - } + void animateToTop() { + scrollController.animToTop(); } } diff --git a/lib/pages/search_panel/controller.dart b/lib/pages/search_panel/controller.dart index 67b506f55..5f92bea8a 100644 --- a/lib/pages/search_panel/controller.dart +++ b/lib/pages/search_panel/controller.dart @@ -1,3 +1,4 @@ +import 'package:PiliPalaX/utils/extension.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:PiliPalaX/http/search.dart'; @@ -42,14 +43,8 @@ class SearchPanelController extends GetxController { } // 返回顶部并刷新 - void animateToTop() async { - if (scrollController.offset >= - MediaQuery.of(Get.context!).size.height * 5) { - scrollController.jumpTo(0); - } else { - await scrollController.animateTo(0, - duration: const Duration(milliseconds: 500), curve: Curves.easeInOut); - } + void animateToTop() { + scrollController.animToTop(); } void onPushDetail(keyword, resultList) async { diff --git a/lib/utils/extension.dart b/lib/utils/extension.dart index 7d2926225..8cf97a0ca 100644 --- a/lib/utils/extension.dart +++ b/lib/utils/extension.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'package:get/get.dart'; extension ImageExtension on num { int cacheSize(BuildContext context) { @@ -8,10 +9,12 @@ extension ImageExtension on num { extension ScrollControllerExt on ScrollController { void animToTop() { - animateTo( - 0, - duration: const Duration(milliseconds: 500), - curve: Curves.ease, - ); + if (!hasClients) return; + if (offset >= MediaQuery.of(Get.context!).size.height * 5) { + jumpTo(0); + } else { + animateTo(0, + duration: const Duration(milliseconds: 500), curve: Curves.easeInOut); + } } }