From e42eec329d6abce88ad20da98740c98b527c6de7 Mon Sep 17 00:00:00 2001 From: Andre Paraense Date: Tue, 11 Feb 2020 12:27:58 +0000 Subject: [PATCH] Bug calling platform channel outside main UI --- .../LaunchdarklyFlutterPlugin.java | 40 ++++++++++++++----- example/lib/main.dart | 6 +-- .../SwiftLaunchdarklyFlutterPlugin.swift | 8 +++- 3 files changed, 39 insertions(+), 15 deletions(-) diff --git a/android/src/main/java/com/oakam/launchdarkly_flutter/LaunchdarklyFlutterPlugin.java b/android/src/main/java/com/oakam/launchdarkly_flutter/LaunchdarklyFlutterPlugin.java index 3dbc485..5c1ca3e 100644 --- a/android/src/main/java/com/oakam/launchdarkly_flutter/LaunchdarklyFlutterPlugin.java +++ b/android/src/main/java/com/oakam/launchdarkly_flutter/LaunchdarklyFlutterPlugin.java @@ -1,6 +1,9 @@ package com.oakam.launchdarkly_flutter; import android.app.Activity; +import android.os.Handler; +import android.os.Looper; +import android.util.Log; import androidx.annotation.NonNull; @@ -136,11 +139,19 @@ public void onMethodCall(@NonNull MethodCall call, @NonNull Result result) { FeatureFlagChangeListener listener = new FeatureFlagChangeListener() { @Override - public void onFeatureFlagChange(String flagKey) { - Map arguments = new HashMap<>(); - arguments.put("flagKey",flagKey); - - channel.invokeMethod("callbackRegisterFeatureFlagListener",arguments); + public void onFeatureFlagChange(final String flagKey) { + new Handler(Looper.getMainLooper()).post(new Runnable() { + @Override + public void run() { + Map arguments = new HashMap<>(); + arguments.put("flagKey",flagKey); + try{ + channel.invokeMethod("callbackRegisterFeatureFlagListener",arguments); + }catch (Exception e){ + Log.e("FeatureFlagsListener", e.getMessage()); + } + } + }); } }; @@ -162,11 +173,20 @@ public void onFeatureFlagChange(String flagKey) { LDAllFlagsListener listener = new LDAllFlagsListener() { @Override - public void onChange(List flagKeys) { - Map> arguments = new HashMap<>(); - arguments.put("flagKeys",flagKeys); - - channel.invokeMethod("callbackAllFlagsListener",arguments); + public void onChange(final List flagKeys) { + new Handler(Looper.getMainLooper()).post(new Runnable() { + @Override + public void run() { + Map> arguments = new HashMap<>(); + arguments.put("flagKeys",flagKeys); + + try{ + channel.invokeMethod("callbackAllFlagsListener",arguments); + }catch (Exception e){ + Log.e("callAllFlagsListener", e.getMessage()); + } + } + }); } }; diff --git a/example/lib/main.dart b/example/lib/main.dart index 037ad7b..347db90 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -17,9 +17,9 @@ class _MyAppState extends State { bool _listenerAllFlagsRegistered = false; LaunchdarklyFlutter launchdarklyFlutter; - String mobileKey = 'mob-6924202b-5eb3-4eb7-b665-0b74c7720960'; - String userId = '1'; - String flagKey = 'w-0-on-the-app'; + String mobileKey = 'YOUR_MOBILE_KEY'; + String userId = 'USER_ID'; + String flagKey = 'FLAG_KEY'; @override void initState() { diff --git a/ios/Classes/SwiftLaunchdarklyFlutterPlugin.swift b/ios/Classes/SwiftLaunchdarklyFlutterPlugin.swift index 2b89950..69f784b 100644 --- a/ios/Classes/SwiftLaunchdarklyFlutterPlugin.swift +++ b/ios/Classes/SwiftLaunchdarklyFlutterPlugin.swift @@ -91,7 +91,9 @@ import LaunchDarkly LDClient.shared.observe(keys: [flagKey], owner: flagObserverOwner, handler: { (changedFlags) in if changedFlags[flagKey] != nil { let flagKeyMap = ["flagKey": flagKey] - FlutterChannel.shared.channel?.invokeMethod("callbackRegisterFeatureFlagListener", arguments: flagKeyMap) + DispatchQueue.main.async { + FlutterChannel.shared.channel?.invokeMethod("callbackRegisterFeatureFlagListener", arguments: flagKeyMap) + } } }) @@ -123,7 +125,9 @@ import LaunchDarkly allFlagsChanged.append(key) } let flagKeyMap = ["flagKeys": allFlagsChanged] - FlutterChannel.shared.channel?.invokeMethod("callbackAllFlagsListener", arguments: flagKeyMap) + DispatchQueue.main.async { + FlutterChannel.shared.channel?.invokeMethod("callbackAllFlagsListener", arguments: flagKeyMap) + } } FlutterChannel.shared.listeners[listenerId] = allFlagsObserverOwner;