From c517df2c09359bc18333d523fe60936653e06436 Mon Sep 17 00:00:00 2001 From: bggRGjQaUbCoE Date: Fri, 11 Apr 2025 18:50:29 +0800 Subject: [PATCH] opt: keep member search page fix: search arc Signed-off-by: bggRGjQaUbCoE --- lib/pages/member_search/controller.dart | 4 +-- lib/pages/member_search/search_archive.dart | 26 +++++++++++++------ lib/pages/member_search/search_dynamic.dart | 28 ++++++++++++++------- 3 files changed, 39 insertions(+), 19 deletions(-) diff --git a/lib/pages/member_search/controller.dart b/lib/pages/member_search/controller.dart index c9db6434..128a6762 100644 --- a/lib/pages/member_search/controller.dart +++ b/lib/pages/member_search/controller.dart @@ -151,9 +151,9 @@ class MemberSearchController extends GetxController isEndArchive = true; } archiveState.value = LoadingState.success(vlist); - } else if (dynamicState.value is Success) { + } else if (archiveState.value is Success) { List currentList = - (dynamicState.value as Success).response; + (archiveState.value as Success).response; currentList.addAll(vlist!); if (currentList.length >= archiveCount.value) { isEndDynamic = true; diff --git a/lib/pages/member_search/search_archive.dart b/lib/pages/member_search/search_archive.dart index c2cf5b00..0d195832 100644 --- a/lib/pages/member_search/search_archive.dart +++ b/lib/pages/member_search/search_archive.dart @@ -9,7 +9,7 @@ import 'package:easy_debounce/easy_throttle.dart'; import 'package:flutter/material.dart'; import 'package:get/get_state_manager/src/rx_flutter/rx_obx_widget.dart'; -class SearchArchive extends StatelessWidget { +class SearchArchive extends StatefulWidget { const SearchArchive({ super.key, required this.ctr, @@ -17,9 +17,16 @@ class SearchArchive extends StatelessWidget { final MemberSearchController ctr; + @override + State createState() => _SearchArchiveState(); +} + +class _SearchArchiveState extends State + with AutomaticKeepAliveClientMixin { @override Widget build(BuildContext context) { - return Obx(() => _buildBody(context, ctr.archiveState.value)); + super.build(context); + return Obx(() => _buildBody(context, widget.ctr.archiveState.value)); } Widget _buildBody(BuildContext context, LoadingState loadingState) { @@ -28,7 +35,7 @@ class SearchArchive extends StatelessWidget { Success() => (loadingState.response as List?)?.isNotEmpty == true ? refreshIndicator( onRefresh: () async { - await ctr.refreshArchive(); + await widget.ctr.refreshArchive(); }, child: CustomScrollView( physics: const AlwaysScrollableScrollPhysics(), @@ -49,7 +56,7 @@ class SearchArchive extends StatelessWidget { if (index == loadingState.response.length - 1) { EasyThrottle.throttle('searchArchives', const Duration(milliseconds: 500), () { - ctr.searchArchives(false); + widget.ctr.searchArchives(false); }); } return VideoCardH( @@ -65,18 +72,21 @@ class SearchArchive extends StatelessWidget { ) : errorWidget( callback: () { - ctr.archiveState.value = LoadingState.loading(); - ctr.refreshArchive(); + widget.ctr.archiveState.value = LoadingState.loading(); + widget.ctr.refreshArchive(); }, ), Error() => errorWidget( errMsg: loadingState.errMsg, callback: () { - ctr.archiveState.value = LoadingState.loading(); - ctr.refreshArchive(); + widget.ctr.archiveState.value = LoadingState.loading(); + widget.ctr.refreshArchive(); }, ), LoadingState() => throw UnimplementedError(), }; } + + @override + bool get wantKeepAlive => true; } diff --git a/lib/pages/member_search/search_dynamic.dart b/lib/pages/member_search/search_dynamic.dart index 01bd78a3..9faba84a 100644 --- a/lib/pages/member_search/search_dynamic.dart +++ b/lib/pages/member_search/search_dynamic.dart @@ -11,7 +11,7 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:waterfall_flow/waterfall_flow.dart'; -class SearchDynamic extends StatelessWidget { +class SearchDynamic extends StatefulWidget { const SearchDynamic({ super.key, required this.ctr, @@ -19,9 +19,16 @@ class SearchDynamic extends StatelessWidget { final MemberSearchController ctr; + @override + State createState() => _SearchDynamicState(); +} + +class _SearchDynamicState extends State + with AutomaticKeepAliveClientMixin { @override Widget build(BuildContext context) { - return Obx(() => _buildBody(context, ctr.dynamicState.value)); + super.build(context); + return Obx(() => _buildBody(context, widget.ctr.dynamicState.value)); } Widget _buildBody(BuildContext context, LoadingState loadingState) { @@ -32,7 +39,7 @@ class SearchDynamic extends StatelessWidget { Success() => (loadingState.response as List?)?.isNotEmpty == true ? refreshIndicator( onRefresh: () async { - await ctr.refreshDynamic(); + await widget.ctr.refreshDynamic(); }, child: CustomScrollView( physics: const AlwaysScrollableScrollPhysics(), @@ -50,7 +57,7 @@ class SearchDynamic extends StatelessWidget { if (index == loadingState.response.length - 1) { EasyThrottle.throttle('member_dynamics', const Duration(milliseconds: 1000), () { - ctr.searchDynamic(false); + widget.ctr.searchDynamic(false); }); } return index == loadingState.response.length @@ -74,7 +81,7 @@ class SearchDynamic extends StatelessWidget { EasyThrottle.throttle('member_dynamics', const Duration(milliseconds: 1000), () { - ctr.searchDynamic(false); + widget.ctr.searchDynamic(false); }); } return DynamicPanel( @@ -94,18 +101,21 @@ class SearchDynamic extends StatelessWidget { ) : errorWidget( callback: () { - ctr.dynamicState.value = LoadingState.loading(); - ctr.refreshDynamic(); + widget.ctr.dynamicState.value = LoadingState.loading(); + widget.ctr.refreshDynamic(); }, ), Error() => errorWidget( errMsg: loadingState.errMsg, callback: () { - ctr.dynamicState.value = LoadingState.loading(); - ctr.refreshDynamic(); + widget.ctr.dynamicState.value = LoadingState.loading(); + widget.ctr.refreshDynamic(); }, ), LoadingState() => throw UnimplementedError(), }; } + + @override + bool get wantKeepAlive => true; }