From eccd3c6dc1b5a6b17f7647b47e191a778df9db33 Mon Sep 17 00:00:00 2001 From: Zhou Weidong <502333560@qq.com> Date: Tue, 20 Oct 2026 14:58:18 +0800 Subject: [PATCH] =?UTF-8?q?fix(flutter):=20=E5=89=A7=E5=9C=BA=E6=90=9C?= =?UTF-8?q?=E7=B4=A2=E6=A1=86=E6=94=B9=E4=B8=BA=E6=B5=85=E7=81=B0=E8=83=B6?= =?UTF-8?q?=E5=9B=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../widgets/discover_search_field.dart | 98 ++++++++++--------- test/discover/home_all_dramas_grid_test.dart | 10 +- 2 files changed, 61 insertions(+), 47 deletions(-) diff --git a/lib/pages/discover/widgets/discover_search_field.dart b/lib/pages/discover/widgets/discover_search_field.dart index 3ba4707..4fd553c 100644 --- a/lib/pages/discover/widgets/discover_search_field.dart +++ b/lib/pages/discover/widgets/discover_search_field.dart @@ -5,11 +5,14 @@ import 'package:flutter/material.dart'; import '../../../core/theme/app_colors.dart'; import '../../../l10n/app_localizations.dart'; -const double _searchHeight = 40; -const double _searchRadius = 20; +const double _searchHeight = 44; +const double _searchRadius = 22; +const double _searchPadding = 14; +const double _iconSize = 18; +const double _iconGap = 8; const Duration _focusTransition = Duration(milliseconds: 160); -/// 剧场顶部整行搜索框:白底细边,聚焦时主题色描边与更深的阴影。 +/// 剧场顶部整行搜索框:浅灰胶囊,聚焦时变白并显示主题色描边。 class DiscoverSearchField extends StatefulWidget { const DiscoverSearchField({ super.key, @@ -69,57 +72,62 @@ class _DiscoverSearchFieldState extends State { duration: _focusTransition, curve: Curves.easeOut, height: _searchHeight, + padding: const EdgeInsets.symmetric(horizontal: _searchPadding), decoration: BoxDecoration( - color: AppColors.card, + color: _focused ? AppColors.card : AppColors.commentInput, borderRadius: BorderRadius.circular(_searchRadius), border: Border.all( - color: _focused ? AppColors.blue : AppColors.border, + color: _focused ? AppColors.blue : Colors.transparent, ), - boxShadow: [ - BoxShadow( - color: _focused - ? AppColors.blue.withValues(alpha: 0.18) - : Colors.black.withValues(alpha: 0.04), - blurRadius: _focused ? 10 : 4, - offset: const Offset(0, 2), - ), - ], ), - child: TextField( - key: const Key('discover-search'), - controller: widget.controller, - focusNode: widget.focusNode, - onChanged: widget.onChanged, - onTapOutside: (_) => widget.focusNode.unfocus(), - textInputAction: TextInputAction.search, - style: const TextStyle(color: AppColors.onSurface, fontSize: 14), - decoration: InputDecoration( - isDense: true, - filled: false, - hintText: AppLocalizations.of(context)!.searchDiscover, - hintStyle: const TextStyle(color: AppColors.subtle, fontSize: 13.5), - prefixIcon: const Icon( + child: Row( + children: [ + const Icon( Icons.search_rounded, color: AppColors.subtle, - size: 17, + size: _iconSize, ), - suffixIcon: widget.loading - ? const SizedBox.square( - dimension: 18, - child: Center( - child: CircularProgressIndicator(strokeWidth: 2), - ), - ) - : null, - suffixIconConstraints: const BoxConstraints( - minWidth: 0, - minHeight: 0, + const SizedBox(width: _iconGap), + Expanded( + child: TextField( + key: const Key('discover-search'), + controller: widget.controller, + focusNode: widget.focusNode, + onChanged: widget.onChanged, + onTapOutside: (_) => widget.focusNode.unfocus(), + textInputAction: TextInputAction.search, + textAlignVertical: TextAlignVertical.center, + style: const TextStyle( + color: AppColors.onSurface, + fontSize: 14, + ), + decoration: InputDecoration( + isDense: true, + hintText: AppLocalizations.of(context)!.searchDiscover, + hintStyle: const TextStyle( + color: AppColors.subtle, + fontSize: 14, + ), + border: InputBorder.none, + enabledBorder: InputBorder.none, + focusedBorder: InputBorder.none, + contentPadding: EdgeInsets.zero, + suffixIcon: widget.loading + ? const SizedBox.square( + dimension: 18, + child: Center( + child: CircularProgressIndicator(strokeWidth: 2), + ), + ) + : null, + suffixIconConstraints: const BoxConstraints( + minWidth: 0, + minHeight: 0, + ), + ), + ), ), - contentPadding: const EdgeInsets.symmetric(horizontal: 12), - border: InputBorder.none, - enabledBorder: InputBorder.none, - focusedBorder: InputBorder.none, - ), + ], ), ), ); diff --git a/test/discover/home_all_dramas_grid_test.dart b/test/discover/home_all_dramas_grid_test.dart index 4dc97f7..982c8a6 100644 --- a/test/discover/home_all_dramas_grid_test.dart +++ b/test/discover/home_all_dramas_grid_test.dart @@ -182,12 +182,18 @@ void main() { .decoration! as BoxDecoration; - expect(shell().borderRadius, BorderRadius.circular(20)); - expect((shell().border! as Border).top.color, AppColors.border); + expect(shell().borderRadius, BorderRadius.circular(22)); + expect(shell().color, AppColors.commentInput); + expect((shell().border! as Border).top.color, Colors.transparent); + expect( + tester.getSize(find.byKey(const Key('discover-search-shell'))).height, + 44, + ); await tester.tap(find.byKey(const Key('discover-search'))); await tester.pump(const Duration(milliseconds: 200)); + expect(shell().color, AppColors.card); expect((shell().border! as Border).top.color, AppColors.blue); });