// Author: fruit.com.cn import 'dart:async'; import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:fruitshorts/core/data/models/drama.dart'; import 'package:fruitshorts/core/data/models/home_feed.dart'; import 'package:fruitshorts/core/data/repositories/catalog_repository.dart'; import 'package:fruitshorts/core/data/services/catalog_controller.dart'; import 'package:fruitshorts/l10n/app_localizations.dart'; import 'package:fruitshorts/pages/home/home_view.dart'; import 'package:provider/provider.dart'; void main() { testWidgets( 'should_keep_splash_with_loading_until_home_feed_settles', (tester) async { final repository = _PendingCatalog(); await tester.pumpWidget( MaterialApp( localizationsDelegates: AppLocalizations.localizationsDelegates, supportedLocales: AppLocalizations.supportedLocales, home: ChangeNotifierProvider( create: (_) => CatalogController(repository)..load(), child: const HomePage(), ), ), ); expect(find.byKey(const Key('splash-screen')), findsOneWidget); expect(find.byKey(const Key('splash-loading')), findsOneWidget); expect(find.byKey(const Key('home-empty')), findsNothing); final clip = tester.widget(find.byType(ClipRRect)); expect(clip.borderRadius, BorderRadius.circular(18)); repository.pending.complete(const HomeFeed()); await tester.pump(); await tester.pump(); expect(find.byKey(const Key('splash-screen')), findsNothing); expect(find.byKey(const Key('home-empty')), findsOneWidget); }, ); } class _PendingCatalog implements CatalogRepository { final Completer pending = Completer(); @override Future fetchHomeFeed() => pending.future; @override Future fetchDiscoverFeed() => pending.future; @override Future fetchDrama(String dramaId) => Future.error(StateError('unused')); }