diff --git a/CHANGELOG.md b/CHANGELOG.md index e8e329f..2228f4c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,7 @@ ## Next +- add flush method ([#92](https://github.com/PostHog/posthog-flutter/pull/92)) + ## 4.1.0 - add unregister method ([#86](https://github.com/PostHog/posthog-flutter/pull/86)) diff --git a/README.md b/README.md index 2d4f1f9..7fd4d1c 100644 --- a/README.md +++ b/README.md @@ -22,11 +22,13 @@ To use this plugin, add `posthog_flutter` as a [dependency in your pubspec.yaml | `enable` | X | X | X | | `debug` | X | X | X | | `register` | X | X | X | -| `register` | X | X | X | +| `unregister` | X | X | X | +| `flush` | X | X | X | +| `isFeatureEnabled` | X | X | X | | `reloadFeatureFlags` | X | X | X | | `getFeatureFlag` | X | X | X | -| `group` | X | X | X | | `getFeatureFlagPayload` | X | X | X | +| `group` | X | X | X | ### Example diff --git a/android/src/main/kotlin/com/posthog/posthog_flutter/PosthogFlutterPlugin.kt b/android/src/main/kotlin/com/posthog/posthog_flutter/PosthogFlutterPlugin.kt index 589cd0e..72c0caa 100644 --- a/android/src/main/kotlin/com/posthog/posthog_flutter/PosthogFlutterPlugin.kt +++ b/android/src/main/kotlin/com/posthog/posthog_flutter/PosthogFlutterPlugin.kt @@ -126,7 +126,9 @@ class PosthogFlutterPlugin : FlutterPlugin, MethodCallHandler { "debug" -> { debug(call, result) } - + "flush" -> { + flush(result) + } else -> { result.notImplemented() } @@ -299,4 +301,13 @@ class PosthogFlutterPlugin : FlutterPlugin, MethodCallHandler { result.error("PosthogFlutterException", e.localizedMessage, null) } } + + private fun flush(result: Result) { + try { + PostHog.flush() + result.success(null) + } catch (e: Throwable) { + result.error("PosthogFlutterException", e.localizedMessage, null) + } + } } diff --git a/example/lib/main.dart b/example/lib/main.dart index 2dd3424..40e1795 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -152,6 +152,12 @@ class _MyAppState extends State { }, child: const Text("Reset"), ), + ElevatedButton( + onPressed: () async { + await _posthogFlutterPlugin.flush(); + }, + child: const Text("Flush"), + ), ElevatedButton( onPressed: () async { final result = diff --git a/ios/Classes/PosthogFlutterPlugin.swift b/ios/Classes/PosthogFlutterPlugin.swift index 9f470a2..6fbfdb1 100644 --- a/ios/Classes/PosthogFlutterPlugin.swift +++ b/ios/Classes/PosthogFlutterPlugin.swift @@ -65,23 +65,25 @@ public class PosthogFlutterPlugin: NSObject, FlutterPlugin { case "alias": alias(call, result: result) case "distinctId": - distinctId(call, result: result) + distinctId(result) case "reset": - reset(call, result: result) + reset(result) case "enable": - enable(call, result: result) + enable(result) case "disable": - disable(call, result: result) + disable(result) case "debug": debug(call, result: result) case "reloadFeatureFlags": - reloadFeatureFlags(call, result: result) + reloadFeatureFlags(result) case "group": group(call, result: result) case "register": register(call, result: result) case "unregister": unregister(call, result: result) + case "flush": + flush(result) default: result(FlutterMethodNotImplemented) } @@ -97,7 +99,7 @@ public class PosthogFlutterPlugin: NSObject, FlutterPlugin { let value = PostHogSDK.shared.getFeatureFlag(featureFlagKey) result(value) } else { - _badArgumentError(result: result) + _badArgumentError(result) } } @@ -111,7 +113,7 @@ public class PosthogFlutterPlugin: NSObject, FlutterPlugin { let value = PostHogSDK.shared.isFeatureEnabled(featureFlagKey) result(value) } else { - _badArgumentError(result: result) + _badArgumentError(result) } } @@ -125,7 +127,7 @@ public class PosthogFlutterPlugin: NSObject, FlutterPlugin { let value = PostHogSDK.shared.getFeatureFlagPayload(featureFlagKey) result(value) } else { - _badArgumentError(result: result) + _badArgumentError(result) } } @@ -146,7 +148,7 @@ public class PosthogFlutterPlugin: NSObject, FlutterPlugin { ) result(nil) } else { - _badArgumentError(result: result) + _badArgumentError(result) } } @@ -164,7 +166,7 @@ public class PosthogFlutterPlugin: NSObject, FlutterPlugin { ) result(nil) } else { - _badArgumentError(result: result) + _badArgumentError(result) } } @@ -182,7 +184,7 @@ public class PosthogFlutterPlugin: NSObject, FlutterPlugin { ) result(nil) } else { - _badArgumentError(result: result) + _badArgumentError(result) } } @@ -196,38 +198,26 @@ public class PosthogFlutterPlugin: NSObject, FlutterPlugin { PostHogSDK.shared.alias(alias) result(nil) } else { - _badArgumentError(result: result) + _badArgumentError(result) } } - private func distinctId( - _: FlutterMethodCall, - result: @escaping FlutterResult - ) { + private func distinctId(_ result: @escaping FlutterResult) { let val = PostHogSDK.shared.getDistinctId() result(val) } - private func reset( - _: FlutterMethodCall, - result: @escaping FlutterResult - ) { + private func reset(_ result: @escaping FlutterResult) { PostHogSDK.shared.reset() result(nil) } - private func enable( - _: FlutterMethodCall, - result: @escaping FlutterResult - ) { + private func enable(_ result: @escaping FlutterResult) { PostHogSDK.shared.optIn() result(nil) } - private func disable( - _: FlutterMethodCall, - result: @escaping FlutterResult - ) { + private func disable(_ result: @escaping FlutterResult) { PostHogSDK.shared.optOut() result(nil) } @@ -242,13 +232,11 @@ public class PosthogFlutterPlugin: NSObject, FlutterPlugin { PostHogSDK.shared.debug(debug) result(nil) } else { - _badArgumentError(result: result) + _badArgumentError(result) } } - private func reloadFeatureFlags( - _: FlutterMethodCall, - result: @escaping FlutterResult + private func reloadFeatureFlags(_ result: @escaping FlutterResult ) { PostHogSDK.shared.reloadFeatureFlags() result(nil) @@ -266,7 +254,7 @@ public class PosthogFlutterPlugin: NSObject, FlutterPlugin { PostHogSDK.shared.group(type: groupType, key: groupKey, groupProperties: groupProperties) result(nil) } else { - _badArgumentError(result: result) + _badArgumentError(result) } } @@ -281,7 +269,7 @@ public class PosthogFlutterPlugin: NSObject, FlutterPlugin { PostHogSDK.shared.register([key: value]) result(nil) } else { - _badArgumentError(result: result) + _badArgumentError(result) } } @@ -295,12 +283,17 @@ public class PosthogFlutterPlugin: NSObject, FlutterPlugin { PostHogSDK.shared.unregister(key) result(nil) } else { - _badArgumentError(result: result) + _badArgumentError(result) } } + + private func flush(_ result: @escaping FlutterResult) { + PostHogSDK.shared.flush() + result(nil) + } // Return bad Arguments error - private func _badArgumentError(result: @escaping FlutterResult) { + private func _badArgumentError(_ result: @escaping FlutterResult) { result(FlutterError( code: "PosthogFlutterException", message: "Missing arguments!", details: nil )) diff --git a/lib/src/posthog.dart b/lib/src/posthog.dart index 1b06e20..65c5ffe 100644 --- a/lib/src/posthog.dart +++ b/lib/src/posthog.dart @@ -117,5 +117,9 @@ class Posthog { return _posthog.getFeatureFlagPayload(key: key); } + Future flush() async { + return _posthog.flush(); + } + Posthog._internal(); } diff --git a/lib/src/posthog_flutter_io.dart b/lib/src/posthog_flutter_io.dart index 5c83223..ab342cc 100644 --- a/lib/src/posthog_flutter_io.dart +++ b/lib/src/posthog_flutter_io.dart @@ -202,6 +202,15 @@ class PosthogFlutterIO extends PosthogFlutterPlatformInterface { } } + @override + Future flush() async { + try { + return await _methodChannel.invokeMethod('flush'); + } on PlatformException catch (exception) { + _printIfDebug('Exeption on flush: $exception'); + } + } + void _printIfDebug(String message) { if (kDebugMode) { print(message); diff --git a/lib/src/posthog_flutter_platform_interface.dart b/lib/src/posthog_flutter_platform_interface.dart index c152b2d..6797cd1 100644 --- a/lib/src/posthog_flutter_platform_interface.dart +++ b/lib/src/posthog_flutter_platform_interface.dart @@ -107,5 +107,9 @@ abstract class PosthogFlutterPlatformInterface extends PlatformInterface { 'getFeatureFlagPayload() has not been implemented.'); } - // TODO: missing unregister, flush, capture with more parameters, close + Future flush() { + throw UnimplementedError('flush() has not been implemented.'); + } + + // TODO: missing capture with more parameters, close } diff --git a/lib/src/posthog_flutter_web_handler.dart b/lib/src/posthog_flutter_web_handler.dart index 97d0a98..70843bd 100644 --- a/lib/src/posthog_flutter_web_handler.dart +++ b/lib/src/posthog_flutter_web_handler.dart @@ -90,6 +90,10 @@ Future handleWebMethodCall(MethodCall call, JsObject context) async { call.arguments['key'], ]); break; + case 'flush': + // not supported on Web + // analytics.callMethod('flush'); + break; default: throw PlatformException( code: 'Unimplemented',