opt: dyn tab

opt: reload

Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
bggRGjQaUbCoE
2025-04-15 16:19:33 +08:00
parent 2b567e7cb3
commit 14f8ec37c5
11 changed files with 65 additions and 25 deletions

View File

@@ -45,7 +45,7 @@ class PBadge extends StatelessWidget {
// 前景色
Color color = t.onPrimary;
// 边框色
Color? borderColor;
Color borderColor = Colors.transparent;
if (type == 'gray') {
bgColor = Colors.black45;
color = Colors.white;
@@ -77,7 +77,7 @@ class PBadge extends StatelessWidget {
decoration: BoxDecoration(
borderRadius: br,
color: bgColor,
border: borderColor != null ? Border.all(color: borderColor) : null,
border: Border.all(color: borderColor),
),
child: Text(
text!,

View File

@@ -499,4 +499,10 @@ https://api.bilibili.com/x/v2/reply/reply?oid=$oid&pn=1&ps=20&root=${rpid ?? rep
SmartDialog.showToast(res['msg']);
}
}
@override
Future onReload() {
scrollController.jumpToTop();
return super.onReload();
}
}

View File

@@ -171,10 +171,12 @@ class DynamicsController extends GetxController
}
onSelectUp(mid) async {
if (mid == this.mid.value) {
this.mid.refresh();
if (this.mid == mid) {
tabController.index = (mid == -1 ? 0 : 4);
controller.onReload();
return;
}
this.mid.value = mid;
tabController.index = (mid == -1 ? 0 : 4);
}
@@ -194,9 +196,10 @@ class DynamicsController extends GetxController
@override
FutureOr<void> toTopOrRefresh() {
if (scrollController.hasClients && controller.scrollController.hasClients) {
final ctr = controller;
if (scrollController.hasClients && ctr.scrollController.hasClients) {
if (scrollController.position.pixels == 0 &&
controller.scrollController.position.pixels == 0) {
ctr.scrollController.position.pixels == 0) {
return onRefresh();
} else {
animateToTop();

View File

@@ -3,6 +3,7 @@ import 'package:PiliPlus/http/msg.dart';
import 'package:PiliPlus/models/dynamics/result.dart';
import 'package:PiliPlus/pages/common/common_list_controller.dart';
import 'package:PiliPlus/pages/main/controller.dart';
import 'package:PiliPlus/utils/extension.dart';
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
import 'package:get/get.dart';
@@ -62,4 +63,10 @@ class DynamicsTabController
SmartDialog.showToast(res['msg']);
}
}
@override
Future onReload() {
scrollController.jumpToTop();
return super.onReload();
}
}

View File

@@ -60,9 +60,11 @@ class _DynamicsTabPageState
super.initState();
if (widget.dynamicsType == 'up') {
_listener = dynamicsController.mid.listen((mid) {
controller.mid = mid;
controller.scrollController.jumpTo(0);
controller.onReload();
if (mid != -1) {
controller
..mid = mid
..onReload();
}
});
}
dynamicsWaterfallFlow = GStorage.setting

View File

@@ -1,11 +1,9 @@
import 'package:PiliPlus/models/common/dynamics_type.dart';
import 'package:PiliPlus/models/common/up_panel_position.dart';
import 'package:PiliPlus/pages/dynamics/create_dyn_panel.dart';
import 'package:PiliPlus/pages/dynamics/tab/controller.dart';
import 'package:easy_debounce/easy_throttle.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:PiliPlus/utils/feed_back.dart';
import 'package:PiliPlus/utils/storage.dart';
import 'package:material_design_icons_flutter/material_design_icons_flutter.dart';
@@ -161,9 +159,7 @@ class _DynamicsPageState extends State<DynamicsPage>
DynamicsType.values.map((e) => Tab(text: e.labels)).toList(),
onTap: (index) {
if (!_dynamicsController.tabController.indexIsChanging) {
feedBack();
Get.find<DynamicsTabController>(tag: tabsConfig[index]['tag'])
.animateToTop();
_dynamicsController.animateToTop();
}
},
),

View File

@@ -172,4 +172,10 @@ class FavDetailController
}
}
}
@override
Future onReload() {
scrollController.jumpToTop();
return super.onReload();
}
}

View File

@@ -192,4 +192,10 @@ class HistoryController extends MultiSelectController<HistoryData, HisListItem>
tabController?.dispose();
super.onClose();
}
@override
Future onReload() {
scrollController.jumpToTop();
return super.onReload();
}
}

View File

@@ -233,4 +233,10 @@ class LaterController extends MultiSelectController<Map, HotVideoItemModel> {
}
}
}
@override
Future onReload() {
scrollController.jumpToTop();
return super.onReload();
}
}

View File

@@ -132,6 +132,8 @@ class _SearchResultPageState extends State<SearchResultPage>
),
),
Expanded(
child: Material(
color: Colors.transparent,
child: tabBarView(
controller: _tabController,
children: SearchType.values
@@ -145,6 +147,7 @@ class _SearchResultPageState extends State<SearchResultPage>
.toList(),
),
),
),
],
),
);

View File

@@ -23,6 +23,11 @@ extension ScrollControllerExt on ScrollController {
duration: const Duration(milliseconds: 500), curve: Curves.easeInOut);
}
}
void jumpToTop() {
if (!hasClients) return;
jumpTo(0);
}
}
extension IterableExt<T> on Iterable<T>? {