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

@@ -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)),
),