refactor dyn page

Signed-off-by: dom <githubaccount56556@proton.me>
This commit is contained in:
dom
2026-06-24 10:47:27 +08:00
parent 63fa031137
commit ebcbe8143b
10 changed files with 385 additions and 492 deletions

View File

@@ -1,5 +1,3 @@
import 'dart:async' show StreamSubscription;
import 'package:PiliPlus/http/dynamics.dart';
import 'package:PiliPlus/http/loading_state.dart';
import 'package:PiliPlus/http/msg.dart';
@@ -17,53 +15,41 @@ import 'package:get/get.dart';
class DynamicsTabController
extends CommonListController<DynamicsDataModel, DynamicItemModel>
with AccountMixin, CommonReloadMixin {
DynamicsTabController({required this.dynamicsType});
final DynamicsTabType dynamicsType;
String offset = '';
int? mid;
late int flag = 0;
int hostMid = -1;
String? offset;
final Rx<DynamicsTabType> dynamicsType = Rx(.all);
late final MainController mainController = Get.find<MainController>();
final dynamicsController = Get.find<DynamicsController>();
StreamSubscription? _listener;
late final outerController = Get.find<DynamicsController>();
late final MainController _mainController = Get.find<MainController>();
@override
void onInit() {
super.onInit();
queryData();
if (dynamicsType == .up) {
_listener = dynamicsController.mid.listen((mid) {
if (mid != -1) {
flag++;
this.mid = mid;
onReload();
}
});
}
}
@override
Future<void> onRefresh() {
if (dynamicsType == .all) {
mainController.setDynCount();
if (dynamicsType.value == .all) {
_mainController.setDynCount();
}
offset = '';
offset = null;
return super.onRefresh();
}
@override
List<DynamicItemModel>? getDataList(DynamicsDataModel response) {
offset = response.offset ?? '';
offset = response.offset;
return response.items;
}
@override
Future<LoadingState<DynamicsDataModel>> customGetData() =>
DynamicsHttp.followDynamic(
type: dynamicsType,
offset: offset,
mid: mid,
tempBannedList: dynamicsController.tempBannedList,
hostMid: hostMid,
type: dynamicsType.value,
tempBannedList: outerController.tempBannedList,
);
Future<void> onRemove(int index, dynamic dynamicId) async {
@@ -79,7 +65,7 @@ class DynamicsTabController
}
void onBlock(int index) {
if (dynamicsType != .up) {
if (dynamicsType.value != .up) {
loadingState
..value.data!.removeAt(index)
..refresh();
@@ -101,10 +87,4 @@ class DynamicsTabController
@override
void onChangeAccount(bool isLogin) => onReload();
@override
void onClose() {
_listener?.cancel();
super.onClose();
}
}

View File

@@ -2,12 +2,9 @@ import 'package:PiliPlus/common/widgets/flutter/refresh_indicator.dart';
import 'package:PiliPlus/common/widgets/loading_widget/http_error.dart';
import 'package:PiliPlus/common/widgets/scroll_physics.dart';
import 'package:PiliPlus/http/loading_state.dart';
import 'package:PiliPlus/models/common/dynamic/dynamics_type.dart';
import 'package:PiliPlus/models/dynamics/result.dart';
import 'package:PiliPlus/pages/dynamics/controller.dart';
import 'package:PiliPlus/pages/dynamics/widgets/dynamic_panel.dart';
import 'package:PiliPlus/pages/dynamics_tab/controller.dart';
import 'package:PiliPlus/utils/extension/get_ext.dart';
import 'package:PiliPlus/utils/global_data.dart';
import 'package:PiliPlus/utils/waterfall.dart';
import 'package:flutter/material.dart';
@@ -15,53 +12,24 @@ import 'package:get/get.dart';
import 'package:waterfall_flow/waterfall_flow.dart'
hide SliverWaterfallFlowDelegateWithMaxCrossAxisExtent;
class DynamicsTabPage extends StatefulWidget {
const DynamicsTabPage({super.key, required this.dynamicsType});
class DynamicsTabPage extends StatelessWidget with DynMixin {
DynamicsTabPage({
super.key,
required this.controller,
});
final DynamicsTabType dynamicsType;
@override
State<DynamicsTabPage> createState() => _DynamicsTabPageState();
}
class _DynamicsTabPageState extends State<DynamicsTabPage>
with AutomaticKeepAliveClientMixin, DynMixin {
DynamicsController dynamicsController = Get.putOrFind(DynamicsController.new);
late final DynamicsTabController controller;
@override
bool get wantKeepAlive => widget.dynamicsType == .all;
@override
void initState() {
super.initState();
controller = Get.putOrFind(
() =>
DynamicsTabController(dynamicsType: widget.dynamicsType)
..mid = dynamicsController.mid.value,
tag: widget.dynamicsType.name,
);
}
final DynamicsTabController controller;
@override
Widget build(BuildContext context) {
super.build(context);
return refreshIndicator(
onRefresh: () {
dynamicsController.queryFollowUp();
return controller.onRefresh();
},
onRefresh: controller.outerController.onRefresh,
child: CustomScrollView(
key: switch (widget.dynamicsType) {
.all => null,
.up => PageStorageKey('${widget.dynamicsType}${controller.flag}'),
_ => PageStorageKey(widget.dynamicsType),
},
physics: ReloadScrollPhysics(controller: controller),
controller: controller.scrollController,
slivers: [
SliverPadding(
padding: const EdgeInsets.only(bottom: 100),
padding: const .only(bottom: 100),
sliver: buildPage(
Obx(() => _buildBody(controller.loadingState.value)),
),