diff --git a/lib/pages/dynamics/controller.dart b/lib/pages/dynamics/controller.dart index 148bfc9f..0fb9460c 100644 --- a/lib/pages/dynamics/controller.dart +++ b/lib/pages/dynamics/controller.dart @@ -40,6 +40,7 @@ class DynamicsController extends GetxController { 'enabled': true }, ]; + bool flag = false; Future queryFollowDynamic({type = 'init'}) async { // if (type == 'init') { @@ -129,4 +130,21 @@ class DynamicsController extends GetxController { queryFollowDynamic(); } + + onRefresh() async { + page = 1; + queryFollowUp(); + await queryFollowDynamic(); + } + + // 返回顶部并刷新 + 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); + } + } } diff --git a/lib/pages/dynamics/view.dart b/lib/pages/dynamics/view.dart index 0002be28..73fdf28a 100644 --- a/lib/pages/dynamics/view.dart +++ b/lib/pages/dynamics/view.dart @@ -117,11 +117,7 @@ class _DynamicsPageState extends State ), ), body: RefreshIndicator( - onRefresh: () async { - _dynamicsController.page = 1; - _dynamicsController.queryFollowUp(); - await _dynamicsController.queryFollowDynamic(); - }, + onRefresh: () => _dynamicsController.onRefresh(), child: CustomScrollView( controller: _dynamicsController.scrollController, slivers: [ diff --git a/lib/pages/main/view.dart b/lib/pages/main/view.dart index acd5a41c..c00099e2 100644 --- a/lib/pages/main/view.dart +++ b/lib/pages/main/view.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; +import 'package:pilipala/pages/dynamics/index.dart'; import 'package:pilipala/pages/home/index.dart'; import 'package:pilipala/pages/hot/index.dart'; import './controller.dart'; @@ -15,6 +16,8 @@ class _MainAppState extends State with SingleTickerProviderStateMixin { final MainController _mainController = Get.put(MainController()); final HomeController _homeController = Get.put(HomeController()); final HotController _hotController = Get.put(HotController()); + final DynamicsController _dynamicController = Get.put(DynamicsController()); + PageController? _pageController; late AnimationController? _animationController; @@ -82,6 +85,22 @@ class _MainAppState extends State with SingleTickerProviderStateMixin { } else { _hotController.flag = false; } + + if (currentPage is DynamicsPage) { + if (_dynamicController.flag) { + // 单击返回顶部 双击并刷新 + if (DateTime.now().millisecondsSinceEpoch - _lastSelectTime! < 500) { + _dynamicController.onRefresh(); + } else { + await Future.delayed(const Duration(microseconds: 300)); + _dynamicController.animateToTop(); + } + _lastSelectTime = DateTime.now().millisecondsSinceEpoch; + } + _dynamicController.flag = true; + } else { + _dynamicController.flag = false; + } } @override