initialize method
Implementation
@override
Future<void> initialize(ULinkConfig config) async {
// Set up event channel listeners BEFORE calling native initialize
// so the event sinks are active when the native SDK emits logs during init
_dynamicLinkSubscription =
dynamicLinkEventChannel.receiveBroadcastStream().listen(
(dynamic event) {
if (event != null) {
final linkData = ULinkResolvedData.fromJson(
Map<String, dynamic>.from(event),
);
_dynamicLinkController.add(linkData);
}
},
onError: (error) {
debugPrint('Dynamic link event channel error: $error');
},
);
_unifiedLinkSubscription =
unifiedLinkEventChannel.receiveBroadcastStream().listen(
(dynamic event) {
if (event != null) {
final linkData = ULinkResolvedData.fromJson(
Map<String, dynamic>.from(event),
);
_unifiedLinkController.add(linkData);
}
},
onError: (error) {
debugPrint('Unified link event channel error: $error');
},
);
_logSubscription = logEventChannel.receiveBroadcastStream().listen(
(dynamic event) {
if (event != null) {
final logEntry = ULinkLogEntry.fromMap(
Map<dynamic, dynamic>.from(event),
);
debugPrint('[ULink SDK] ${logEntry.level.toUpperCase()}: ${logEntry.message}');
_logController.add(logEntry);
}
},
onError: (error) {
debugPrint('Log event channel error: $error');
},
);
_reinstallSubscription =
reinstallEventChannel.receiveBroadcastStream().listen(
(dynamic event) {
if (event != null) {
final installationInfo = ULinkInstallationInfo.fromJson(
Map<String, dynamic>.from(event),
);
_reinstallController.add(installationInfo);
}
},
onError: (error) {
debugPrint('Reinstall event channel error: $error');
},
);
// Now call native initialize - event sinks are already active
await methodChannel.invokeMethod('initialize', {'config': config.toMap()});
}