feat(app): 搜索改为调用后端并渲染卡片结果

This commit is contained in:
Zhou Weidong committed 2026-10-20 04:34:12 +08:00
1 parent 730e38622f
commit ade0cc3566
13 files changed
+424 -20

No files matched your search

+17 -2
View File
@@ -8,8 +8,10 @@ import '../../core/config/app_config.dart';
import '../../core/data/models/drama.dart';
import '../../core/data/models/home_feed.dart';
import '../../core/data/models/watch_progress.dart';
import '../../core/data/repositories/search_repository.dart';
import '../../core/data/repositories/watch_history_repository.dart';
import '../../core/data/services/category_controller.dart';
import '../../core/formatting/error_text.dart';
import '../../core/theme/app_colors.dart';
import '../../core/theme/app_dimens.dart';
import '../../core/theme/app_theme.dart';
@@ -30,6 +32,7 @@ class DiscoverPage extends StatefulWidget {
required this.duration,
this.focusSearch = false,
this.history,
this.searchRepository,
this.embedded = false,
this.active = true,
this.searchRequest = 0,
@@ -48,6 +51,7 @@ class DiscoverPage extends StatefulWidget {
final Duration duration;
final bool focusSearch;
final WatchHistoryRepository? history;
final SearchRepository? searchRepository;
final bool embedded;
final bool active;
final int searchRequest;
@@ -74,6 +78,7 @@ class _DiscoverPageState extends State<DiscoverPage> {
logic = DiscoverBinding().create(
drama: widget.drama,
history: widget.history ?? context.read<WatchHistoryRepository>(),
search: widget.searchRepository ?? context.read<SearchRepository>(),
);
if (widget.focusSearch) {
logic.searchOpen = true;
@@ -115,7 +120,7 @@ class _DiscoverPageState extends State<DiscoverPage> {
final l10n = AppLocalizations.of(context)!;
final categories = context.watch<CategoryController>();
final allDramas = [...?widget.dramas, ...categories.visibleDramas];
final visible = logic.filtered(categories.visibleDramas);
final visible = logic.visibleDramas(categories.visibleDramas);
final content = SafeArea(
bottom: !widget.embedded,
child: Column(
@@ -235,7 +240,10 @@ class _DiscoverPageState extends State<DiscoverPage> {
l10n: l10n,
categories: categories,
dramas: visible,
searching: logic.search.text.trim().isNotEmpty,
searching: logic.hasSearchQuery,
searchLoading: logic.searchLoading,
searchError: logic.searchError,
onRetrySearch: () => logic.retrySearch(),
onOpen: (drama) => logic.openCard(
context,
drama,
@@ -329,6 +337,7 @@ class _DiscoverPageState extends State<DiscoverPage> {
controller: logic.search,
focusNode: logic.searchFocus,
onChanged: (_) => logic.onSearchChanged(),
onTapOutside: (_) => logic.searchFocus.unfocus(),
textInputAction: TextInputAction.search,
style: const TextStyle(color: AppColors.onSurface, fontSize: 13),
@@ -343,6 +352,12 @@ class _DiscoverPageState extends State<DiscoverPage> {
color: AppColors.subtle,
size: 17,
),
suffixIcon: logic.searchLoading
? const Padding(
padding: EdgeInsets.all(11),
child: CircularProgressIndicator(strokeWidth: 2),
)
: null,
contentPadding: const EdgeInsets.symmetric(horizontal: 12),
enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(20),