feat(flutter): 剧场页搜索与吸顶筛选精致化

This commit is contained in:
Zhou Weidong committed 2026-10-20 14:52:41 +08:00
1 parent f9d4f982f0
commit 5283ab2549
3 files changed
+204 -33

No files matched your search

@@ -10,6 +10,7 @@ import 'package:fruitshorts/core/data/repositories/category_repository.dart';
import 'package:fruitshorts/core/data/repositories/favorite_repository.dart';
import 'package:fruitshorts/core/data/repositories/playback_repository.dart';
import 'package:fruitshorts/core/data/repositories/watch_history_repository.dart';
import 'package:fruitshorts/core/theme/app_colors.dart';
import 'package:shared_preferences_platform_interface/in_memory_shared_preferences_async.dart';
import 'package:shared_preferences_platform_interface/shared_preferences_async_platform_interface.dart';
@@ -170,6 +171,65 @@ void main() {
expect(counter.categoryLoads + counter.feedLoads, greaterThan(before));
expect(find.byType(RefreshProgressIndicator), findsNothing);
});
testWidgets('should_style_search_shell_and_focus_border', (tester) async {
await _pumpTheater(tester, categoryRepository: _GridCategoryRepository());
BoxDecoration shell() =>
tester
.widget<AnimatedContainer>(
find.byKey(const Key('discover-search-shell')),
)
.decoration!
as BoxDecoration;
expect(shell().borderRadius, BorderRadius.circular(20));
expect((shell().border! as Border).top.color, AppColors.border);
await tester.tap(find.byKey(const Key('discover-search')));
await tester.pump(const Duration(milliseconds: 200));
expect((shell().border! as Border).top.color, AppColors.blue);
});
testWidgets('should_pin_theater_filters_when_scrolling', (tester) async {
await _pumpTheater(
tester,
categoryRepository: _GridCategoryRepository(
discoverFeed: _tallDiscoverFeed,
),
);
BoxDecoration header() =>
tester
.widget<AnimatedContainer>(
find.byKey(const Key('theater-sticky-header')),
)
.decoration!
as BoxDecoration;
final before = tester.getRect(
find.byKey(const Key('theater-sticky-header')),
);
expect(header().color, Colors.transparent);
await tester.drag(_verticalFeed, const Offset(0, -220));
await tester.pumpAndSettle();
final after = tester.getRect(
find.byKey(const Key('theater-sticky-header')),
);
expect(after.top, closeTo(before.top, 0.5));
expect(header().color, AppColors.ink);
});
testWidgets('should_use_compact_refresh_indicator', (tester) async {
await _pumpTheater(tester, categoryRepository: _GridCategoryRepository());
final indicator = tester.widget<RefreshIndicator>(
find.byKey(const Key('discover-refresh')),
);
expect(indicator.color, AppColors.blue);
expect(indicator.strokeWidth, 2);
expect(indicator.edgeOffset, 110);
});
}
final Finder _verticalFeed = find.byWidgetPredicate(