11import 'dart:ui' ;
2- import 'package:flutter/services.dart' ;
32import 'package:workmanager_platform_interface/workmanager_platform_interface.dart' ;
43
54/// Apple (iOS/macOS) implementation of [WorkmanagerPlatform] .
65class WorkmanagerApple extends WorkmanagerPlatform {
7- /// The method channel used to interact with the native platform.
8- static const MethodChannel _channel = MethodChannel (
9- 'dev.fluttercommunity.workmanager/foreground_channel_work_manager' ,
10- );
6+ /// The Pigeon API instance for type-safe communication.
7+ final WorkmanagerHostApi _api = WorkmanagerHostApi ();
118
129 /// Constructs a WorkmanagerApple instance.
1310 WorkmanagerApple () : super ();
@@ -23,10 +20,10 @@ class WorkmanagerApple extends WorkmanagerPlatform {
2320 bool isInDebugMode = false ,
2421 }) async {
2522 final callback = PluginUtilities .getCallbackHandle (callbackDispatcher);
26- await _channel. invokeMethod ( ' initialize' , {
27- ' callbackHandle' : callback! .toRawHandle (),
28- ' isInDebugMode' : isInDebugMode,
29- } );
23+ await _api. initialize ( InitializeRequest (
24+ callbackHandle: callback! .toRawHandle (),
25+ isInDebugMode: isInDebugMode,
26+ ) );
3027 }
3128
3229 @override
@@ -42,12 +39,22 @@ class WorkmanagerApple extends WorkmanagerPlatform {
4239 String ? tag,
4340 OutOfQuotaPolicy ? outOfQuotaPolicy,
4441 }) async {
45- await _channel.invokeMethod ('registerOneOffTask' , {
46- 'uniqueName' : uniqueName,
47- 'taskName' : taskName,
48- 'inputData' : inputData,
49- 'initialDelaySeconds' : initialDelay? .inSeconds,
50- });
42+ await _api.registerOneOffTask (OneOffTaskRequest (
43+ uniqueName: uniqueName,
44+ taskName: taskName,
45+ inputData: inputData? .cast <String ?, Object ?>(),
46+ initialDelaySeconds: initialDelay? .inSeconds,
47+ constraints: constraints,
48+ existingWorkPolicy: existingWorkPolicy,
49+ backoffPolicy: backoffPolicyDelay != null && backoffPolicy != null
50+ ? BackoffPolicyConfig (
51+ backoffPolicy: backoffPolicy,
52+ backoffDelayMillis: backoffPolicyDelay.inMilliseconds,
53+ )
54+ : null ,
55+ tag: tag,
56+ outOfQuotaPolicy: outOfQuotaPolicy,
57+ ));
5158 }
5259
5360 @override
@@ -64,12 +71,23 @@ class WorkmanagerApple extends WorkmanagerPlatform {
6471 Duration ? backoffPolicyDelay,
6572 String ? tag,
6673 }) async {
67- await _channel.invokeMethod ('registerPeriodicTask' , {
68- 'uniqueName' : uniqueName,
69- 'taskName' : taskName,
70- 'inputData' : inputData,
71- 'initialDelaySeconds' : initialDelay? .inSeconds,
72- });
74+ await _api.registerPeriodicTask (PeriodicTaskRequest (
75+ uniqueName: uniqueName,
76+ taskName: taskName,
77+ frequencySeconds: frequency? .inSeconds ?? 900 , // Default 15 minutes
78+ flexIntervalSeconds: flexInterval? .inSeconds,
79+ inputData: inputData? .cast <String ?, Object ?>(),
80+ initialDelaySeconds: initialDelay? .inSeconds,
81+ constraints: constraints,
82+ existingWorkPolicy: existingWorkPolicy,
83+ backoffPolicy: backoffPolicyDelay != null && backoffPolicy != null
84+ ? BackoffPolicyConfig (
85+ backoffPolicy: backoffPolicy,
86+ backoffDelayMillis: backoffPolicyDelay.inMilliseconds,
87+ )
88+ : null ,
89+ tag: tag,
90+ ));
7391 }
7492
7593 @override
@@ -80,21 +98,19 @@ class WorkmanagerApple extends WorkmanagerPlatform {
8098 Map <String , dynamic >? inputData,
8199 Constraints ? constraints,
82100 }) async {
83- await _channel. invokeMethod ( ' registerProcessingTask' , {
84- ' uniqueName' : uniqueName,
85- ' taskName' : taskName,
86- ' inputData' : inputData,
87- ' initialDelaySeconds' : initialDelay? .inSeconds,
88- ' networkType' : constraints? .networkType? .name ,
89- ' requiresCharging' : constraints? .requiresCharging,
90- } );
101+ await _api. registerProcessingTask ( ProcessingTaskRequest (
102+ uniqueName: uniqueName,
103+ taskName: taskName,
104+ inputData: inputData? . cast < String ?, Object ?>() ,
105+ initialDelaySeconds: initialDelay? .inSeconds,
106+ networkType: constraints? .networkType,
107+ requiresCharging: constraints? .requiresCharging,
108+ ) );
91109 }
92110
93111 @override
94112 Future <void > cancelByUniqueName (String uniqueName) async {
95- await _channel.invokeMethod ('cancelTaskByUniqueName' , {
96- 'uniqueName' : uniqueName,
97- });
113+ await _api.cancelByUniqueName (uniqueName);
98114 }
99115
100116 @override
@@ -105,18 +121,16 @@ class WorkmanagerApple extends WorkmanagerPlatform {
105121
106122 @override
107123 Future <void > cancelAll () async {
108- await _channel. invokeMethod ( 'cancelAllTasks' );
124+ await _api. cancelAll ( );
109125 }
110126
111127 @override
112128 Future <bool > isScheduledByUniqueName (String uniqueName) async {
113- // This functionality is not available on iOS
114- throw UnsupportedError ('isScheduledByUniqueName is not supported on iOS' );
129+ return await _api.isScheduledByUniqueName (uniqueName);
115130 }
116131
117132 @override
118133 Future <String > printScheduledTasks () async {
119- final result = await _channel.invokeMethod <String >('printScheduledTasks' );
120- return result ?? 'No scheduled tasks information available' ;
134+ return await _api.printScheduledTasks ();
121135 }
122136}
0 commit comments