import 'dart:async'; import 'package:buzz/features/settings/settings_page.dart'; import 'package:buzz/shared/community/community_membership_provider.dart'; import 'package:buzz/shared/theme/theme.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:shared_preferences/shared_preferences.dart'; void main() { testWidgets('settings remains usable while package metadata loads', ( tester, ) async { final metadata = Completer>(); const channel = MethodChannel('dev.fluttercommunity.plus/package_info'); tester.binding.defaultBinaryMessenger.setMockMethodCallHandler( channel, (_) => metadata.future, ); addTearDown( () => tester.binding.defaultBinaryMessenger.setMockMethodCallHandler( channel, null, ), ); SharedPreferences.setMockInitialValues({}); final prefs = await SharedPreferences.getInstance(); await tester.pumpWidget( ProviderScope( overrides: [ savedPrefsProvider.overrideWithValue(prefs), currentCommunityRoleProvider.overrideWithValue( const AsyncData(CommunityMemberRole.admin), ), ], child: MaterialApp( theme: AppTheme.light(), builder: (context, child) => MediaQuery( data: MediaQuery.of( context, ).copyWith(textScaler: TextScaler.linear(2)), child: child!, ), home: SettingsPage( profileHeader: const SizedBox.shrink(), identityRecoveryPageBuilder: (_) => const SizedBox.shrink(), ), ), ), ); expect(find.text('Invite to community'), findsNothing); expect(find.text('v0.16.0 (432)'), findsNothing); expect(find.byTooltip('Close settings'), findsOneWidget); metadata.complete({ 'appName': 'Buzz', 'packageName': 'xyz.block.buzz', 'version': '0.16.0', 'buildNumber': '432', 'buildSignature': '', }); await tester.pumpAndSettle(); expect(find.text('v0.16.0 (432)'), findsOneWidget); expect(tester.takeException(), isNull); }); }