Set up communication between TaskHandler and UI
masterThe plugin supports two-way communication between the TaskHandler (background isolate) and the main UI isolate.
1. Initialize the Communication Port
Call FlutterForegroundTask.initCommunicationPort() in your main() function before runApp().
2. Sending data from TaskHandler to UI
In your TaskHandler, use FlutterForegroundTask.sendDataToMain(data). The data must be a primitive type (int, double, bool), a String, or a Collection (Map, List).
3. Receiving data in the UI
In your UI (e.g., a State class), use FlutterForegroundTask.addTaskDataCallback(callback) to listen for data. Always call FlutterForegroundTask.removeTaskDataCallback(callback) in dispose() to prevent memory leaks.
4. Sending data from UI to TaskHandler
In your UI, use FlutterForegroundTask.sendDataToTask(data). In the TaskHandler, handle this in the onReceiveData(Object data) override.
// --- In main.dart ---
void main() {
FlutterForegroundTask.initCommunicationPort();
runApp(const ExampleApp());
}
// --- In your UI State ---
void _onReceiveTaskData(Object data) {
if (data is Map<String, dynamic>) {
print(data["timestampMillis"]);
}
}
@override
void initState() {
super.initState();
FlutterForegroundTask.addTaskDataCallback(_onReceiveTaskData);
}
@override
void dispose() {
FlutterForegroundTask.removeTaskDataCallback(_onReceiveTaskData);
super.dispose();
}
// --- In your TaskHandler ---
@override
void onRepeatEvent(DateTime timestamp) {
FlutterForegroundTask.sendDataToMain({"timestampMillis": timestamp.millisecondsSinceEpoch});
}
@override
void onReceiveData(Object data) {
print('Received from UI: $data');
}