fix(home): 修复目录错误态被占位层遮挡
This commit is contained in:
1 parent
bf47c065c9
commit
d4ce3a5d8b
2 files changed
+45
-3
No files matched your search
@@ -104,6 +104,7 @@ class _HomeFeedGridState extends State<HomeFeedGrid> {
|
|||||||
return _categoryPlaceholder(
|
return _categoryPlaceholder(
|
||||||
l10n,
|
l10n,
|
||||||
context.watch<CategoryController>(),
|
context.watch<CategoryController>(),
|
||||||
|
catalog,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
final category = shortcuts[index];
|
final category = shortcuts[index];
|
||||||
@@ -146,7 +147,11 @@ class _HomeFeedGridState extends State<HomeFeedGrid> {
|
|||||||
Widget _categoryPlaceholder(
|
Widget _categoryPlaceholder(
|
||||||
AppLocalizations l10n,
|
AppLocalizations l10n,
|
||||||
CategoryController controller,
|
CategoryController controller,
|
||||||
|
CatalogController catalog,
|
||||||
) {
|
) {
|
||||||
|
if (catalog.error != null) {
|
||||||
|
return _catalogErrorState(l10n, catalog);
|
||||||
|
}
|
||||||
if (controller.loading) {
|
if (controller.loading) {
|
||||||
return const DramaGridSkeleton(
|
return const DramaGridSkeleton(
|
||||||
key: Key('home-grid-skeleton'),
|
key: Key('home-grid-skeleton'),
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import 'dart:async';
|
|||||||
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_test/flutter_test.dart';
|
import 'package:flutter_test/flutter_test.dart';
|
||||||
|
import 'package:provider/provider.dart';
|
||||||
import 'package:fruitshorts/app.dart';
|
import 'package:fruitshorts/app.dart';
|
||||||
import 'package:fruitshorts/core/config/app_config.dart';
|
import 'package:fruitshorts/core/config/app_config.dart';
|
||||||
import 'package:fruitshorts/core/data/models/drama.dart';
|
import 'package:fruitshorts/core/data/models/drama.dart';
|
||||||
@@ -13,6 +14,8 @@ import 'package:fruitshorts/core/data/repositories/catalog_repository.dart';
|
|||||||
import 'package:fruitshorts/core/data/repositories/favorite_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/playback_repository.dart';
|
||||||
import 'package:fruitshorts/core/data/repositories/watch_history_repository.dart';
|
import 'package:fruitshorts/core/data/repositories/watch_history_repository.dart';
|
||||||
|
import 'package:fruitshorts/core/data/services/catalog_controller.dart';
|
||||||
|
import 'package:fruitshorts/core/data/services/category_controller.dart';
|
||||||
import 'package:shared_preferences_platform_interface/in_memory_shared_preferences_async.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';
|
import 'package:shared_preferences_platform_interface/shared_preferences_async_platform_interface.dart';
|
||||||
|
|
||||||
@@ -51,7 +54,11 @@ void main() {
|
|||||||
expect(find.byType(CircularProgressIndicator), findsNothing);
|
expect(find.byType(CircularProgressIndicator), findsNothing);
|
||||||
|
|
||||||
repository.complete(_feed);
|
repository.complete(_feed);
|
||||||
await tester.pumpAndSettle();
|
await _pumpForAppData(tester);
|
||||||
|
await _pumpUntilFound(
|
||||||
|
tester,
|
||||||
|
find.byKey(const Key('home-feed-card-the-signal-demo')),
|
||||||
|
);
|
||||||
|
|
||||||
expect(find.byKey(const Key('startup-splash')), findsNothing);
|
expect(find.byKey(const Key('startup-splash')), findsNothing);
|
||||||
expect(find.byKey(const Key('home-grid-skeleton')), findsNothing);
|
expect(find.byKey(const Key('home-grid-skeleton')), findsNothing);
|
||||||
@@ -62,7 +69,8 @@ void main() {
|
|||||||
tester,
|
tester,
|
||||||
) async {
|
) async {
|
||||||
await _pumpApp(tester, _FailingCatalogRepository());
|
await _pumpApp(tester, _FailingCatalogRepository());
|
||||||
await tester.pumpAndSettle();
|
await _pumpForAppData(tester);
|
||||||
|
await _pumpUntilFound(tester, find.byKey(const Key('home-grid-error')));
|
||||||
|
|
||||||
expect(find.byKey(const Key('home-grid-header')), findsOneWidget);
|
expect(find.byKey(const Key('home-grid-header')), findsOneWidget);
|
||||||
expect(find.byKey(const Key('home-grid-error')), findsOneWidget);
|
expect(find.byKey(const Key('home-grid-error')), findsOneWidget);
|
||||||
@@ -72,7 +80,8 @@ void main() {
|
|||||||
|
|
||||||
testWidgets('should_show_catalog_empty_state_inside_grid', (tester) async {
|
testWidgets('should_show_catalog_empty_state_inside_grid', (tester) async {
|
||||||
await _pumpApp(tester, _EmptyCatalogRepository());
|
await _pumpApp(tester, _EmptyCatalogRepository());
|
||||||
await tester.pumpAndSettle();
|
await _pumpForAppData(tester);
|
||||||
|
await _pumpUntilFound(tester, find.byKey(const Key('home-grid-empty')));
|
||||||
|
|
||||||
expect(find.byKey(const Key('home-grid-header')), findsOneWidget);
|
expect(find.byKey(const Key('home-grid-header')), findsOneWidget);
|
||||||
expect(find.byKey(const Key('home-grid-empty')), findsOneWidget);
|
expect(find.byKey(const Key('home-grid-empty')), findsOneWidget);
|
||||||
@@ -99,6 +108,34 @@ Future<void> _pumpApp(WidgetTester tester, CatalogRepository repository) async {
|
|||||||
await tester.pump();
|
await tester.pump();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future<void> _pumpUntilFound(WidgetTester tester, Finder finder) async {
|
||||||
|
for (var frame = 0; frame < 40; frame++) {
|
||||||
|
if (finder.evaluate().isNotEmpty) return;
|
||||||
|
await tester.pump(const Duration(milliseconds: 16));
|
||||||
|
}
|
||||||
|
await tester.pump();
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> _pumpForAppData(WidgetTester tester) async {
|
||||||
|
await tester.runAsync(
|
||||||
|
() => Future<void>.delayed(Duration.zero),
|
||||||
|
);
|
||||||
|
for (var frame = 0; frame < 40; frame++) {
|
||||||
|
final root = find.byKey(const Key('home-tabs'));
|
||||||
|
if (root.evaluate().isNotEmpty) {
|
||||||
|
final context = tester.element(root);
|
||||||
|
final catalog = context.read<CatalogController>();
|
||||||
|
final categories = context.read<CategoryController>();
|
||||||
|
if (catalog.settled && !catalog.loading && !categories.loading) {
|
||||||
|
await tester.pump();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
await tester.pump(const Duration(milliseconds: 16));
|
||||||
|
}
|
||||||
|
await tester.pump();
|
||||||
|
}
|
||||||
|
|
||||||
final _feed = HomeFeed(
|
final _feed = HomeFeed(
|
||||||
sections: [
|
sections: [
|
||||||
FeedSection(code: 'hot', title: 'Hot', dramas: [demoDramas.first]),
|
FeedSection(code: 'hot', title: 'Hot', dramas: [demoDramas.first]),
|
||||||
|
|||||||
Reference in new issue
Block a user