import 'package:flutter/foundation.dart'; import 'package:flutter/services.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_local_notifications/flutter_local_notifications.dart'; import 'package:hepan_everyday/services/local_notification_service.dart'; void main() { TestWidgetsFlutterBinding.ensureInitialized(); test('transient native initialization failure can be retried', () async { debugDefaultTargetPlatformOverride = TargetPlatform.android; AndroidFlutterLocalNotificationsPlugin.registerWith(); const channel = MethodChannel('dexterous.com/flutter/local_notifications'); var attempts = 0; TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger .setMockMethodCallHandler(channel, (call) async { if (call.method == 'initialize') { attempts++; if (attempts == 1) { throw PlatformException(code: 'temporarily-unavailable'); } return true; } if (call.method == 'getNotificationAppLaunchDetails') { return {'notificationLaunchedApp': false}; } return null; }); addTearDown(() { debugDefaultTargetPlatformOverride = null; TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger .setMockMethodCallHandler(channel, null); }); final gateway = PluginReminderGateway(); await expectLater(gateway.initialize(), throwsA(isA())); await gateway.initialize(); expect(attempts, 2); }); }