Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .changeset/v6-posthog-ios-4.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

- **Breaking:** bump minimum iOS deployment target from 13.0 to 15.0 and macOS from 10.15 to 11.0, and require Xcode 26, adopting `posthog-ios` 4.x
- **Breaking:** remove `PostHogConfig.apiKey` and the `com.posthog.posthog.API_KEY` manifest/Info.plist key — use `projectToken` and `com.posthog.posthog.PROJECT_TOKEN`
- **Breaking:** remove `Posthog().getFeatureFlagPayload()` — use `getFeatureFlagResult(key, sendEvent: false)` and read `payload`
- **Breaking:** remove `Posthog().getFeatureFlagPayload()` — use `getFeatureFlagResult(key, sendFeatureFlagEvent: false)` and read `payload`
- **Breaking:** remove the `PostHogSessionReplayConfig.debouncerDelay` setter — use `PostHogSessionReplayConfig.throttleDelay`
- **Breaking:** remove `PostHogDataMode.cellular` — use `PostHogDataMode.any`, which it always behaved like
- Declare Android `minSdkVersion` 23 to match `posthog-android`, which has required it since 3.39.0. Apps on minSdk 21 or 22 already could not build with this plugin, so nothing changes for them
5 changes: 5 additions & 0 deletions .changeset/v6-send-feature-flag-event-param.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"posthog_flutter": major
---

- **Breaking:** `getFeatureFlagResult(sendEvent:)` is now `getFeatureFlagResult(sendFeatureFlagEvent:)`, matching `PostHogConfig.sendFeatureFlagEvent` and the native SDKs
6 changes: 3 additions & 3 deletions api/posthog_flutter.api.json
Original file line number Diff line number Diff line change
Expand Up @@ -897,7 +897,7 @@
"isExperimental": false,
"isNamed": true,
"isRequired": false,
"name": "sendEvent",
"name": "sendFeatureFlagEvent",
"relativePath": "lib/src/posthog_flutter_platform_interface.dart",
"typeName": "bool"
}
Expand Down Expand Up @@ -1858,7 +1858,7 @@
"isExperimental": false,
"isNamed": true,
"isRequired": false,
"name": "sendEvent",
"name": "sendFeatureFlagEvent",
"relativePath": "lib/src/posthog_flutter_platform_interface.dart",
"typeName": "bool"
}
Expand Down Expand Up @@ -4704,7 +4704,7 @@
"isExperimental": false,
"isNamed": true,
"isRequired": false,
"name": "sendEvent",
"name": "sendFeatureFlagEvent",
"relativePath": "lib/src/posthog.dart",
"typeName": "bool"
}
Expand Down
5 changes: 3 additions & 2 deletions posthog_flutter/lib/posthog_flutter_web.dart
Original file line number Diff line number Diff line change
Expand Up @@ -406,10 +406,11 @@ class PosthogFlutterWeb extends PosthogFlutterPlatformInterface {
@override
Future<PostHogFeatureFlagResult?> getFeatureFlagResult({
required String key,
bool sendEvent = true,
bool sendFeatureFlagEvent = true,
}) async {
final result = await handleWebMethodCall(
MethodCall('getFeatureFlagResult', {'key': key, 'sendEvent': sendEvent}),
MethodCall('getFeatureFlagResult',
{'key': key, 'sendEvent': sendFeatureFlagEvent}),
);

// Web SDK returns: { key, enabled, variant, payload }
Expand Down
11 changes: 6 additions & 5 deletions posthog_flutter/lib/src/posthog.dart
Original file line number Diff line number Diff line change
Expand Up @@ -720,9 +720,9 @@ class Posthog {
/// This is the canonical method for getting feature flag data.
/// Returns `null` if the flag does not exist or cannot be loaded.
///
/// Set [sendEvent] to `false` to suppress the `$feature_flag_called` event.
/// This is useful when you only need the payload and do not want to emit the
/// event.
/// Set [sendFeatureFlagEvent] to `false` to suppress the
/// `$feature_flag_called` event. This is useful when you only need the
/// payload and do not want to emit the event.
///
/// **Example:**
/// ```dart
Expand All @@ -734,9 +734,10 @@ class Posthog {
/// ```
Future<PostHogFeatureFlagResult?> getFeatureFlagResult(
String key, {
bool sendEvent = true,
bool sendFeatureFlagEvent = true,
}) =>
_posthog.getFeatureFlagResult(key: key, sendEvent: sendEvent);
_posthog.getFeatureFlagResult(
key: key, sendFeatureFlagEvent: sendFeatureFlagEvent);

/// Flushes queued events immediately where supported by the platform.
///
Expand Down
4 changes: 2 additions & 2 deletions posthog_flutter/lib/src/posthog_flutter_io.dart
Original file line number Diff line number Diff line change
Expand Up @@ -670,7 +670,7 @@ class PosthogFlutterIO extends PosthogFlutterPlatformInterface {
@override
Future<PostHogFeatureFlagResult?> getFeatureFlagResult({
required String key,
bool sendEvent = true,
bool sendFeatureFlagEvent = true,
}) async {
if (!isSupportedPlatform()) {
return null;
Expand All @@ -679,7 +679,7 @@ class PosthogFlutterIO extends PosthogFlutterPlatformInterface {
try {
final result = await _methodChannel.invokeMethod('getFeatureFlagResult', {
'key': key,
'sendEvent': sendEvent,
'sendEvent': sendFeatureFlagEvent,
});

// Native returns: { key, enabled, variant, payload }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -206,7 +206,7 @@ abstract class PosthogFlutterPlatformInterface extends PlatformInterface {

Future<PostHogFeatureFlagResult?> getFeatureFlagResult({
required String key,
bool sendEvent = true,
bool sendFeatureFlagEvent = true,
}) {
throw UnimplementedError(
'getFeatureFlagResult() has not been implemented.',
Expand Down
2 changes: 1 addition & 1 deletion posthog_flutter/test/posthog_flutter_io_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ void main() {
};
});
final result = await posthogFlutterIO.getFeatureFlagResult(
key: 'flag', sendEvent: false);
key: 'flag', sendFeatureFlagEvent: false);
expect(result, isNotNull);
expect(result!.key, 'flag');
expect(result.enabled, enabled);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -259,9 +259,10 @@ class PosthogFlutterPlatformFake extends PosthogFlutterPlatformInterface {
@override
Future<PostHogFeatureFlagResult?> getFeatureFlagResult({
required String key,
bool sendEvent = true,
bool sendFeatureFlagEvent = true,
}) async {
getFeatureFlagResultCalls.add({'key': key, 'sendEvent': sendEvent});
getFeatureFlagResultCalls
.add({'key': key, 'sendFeatureFlagEvent': sendFeatureFlagEvent});

return featureFlagResult;
}
Expand Down
16 changes: 9 additions & 7 deletions posthog_flutter/test/posthog_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -375,7 +375,7 @@ void main() {
final result = await Posthog().getFeatureFlagResult('non-existent');
expect(result, isNull);
expect(fakePlatformInterface.getFeatureFlagResultCalls, [
{'key': 'non-existent', 'sendEvent': true}
{'key': 'non-existent', 'sendFeatureFlagEvent': true}
]);
});

Expand All @@ -390,24 +390,26 @@ void main() {
expect(
await Posthog().getFeatureFlagResult('variant-flag'), same(expected));
expect(fakePlatformInterface.getFeatureFlagResultCalls, [
{'key': 'variant-flag', 'sendEvent': true}
{'key': 'variant-flag', 'sendFeatureFlagEvent': true}
]);
});

test('passes sendEvent=true by default', () async {
test('passes sendFeatureFlagEvent=true by default', () async {
await Posthog().getFeatureFlagResult('test');

expect(
fakePlatformInterface.getFeatureFlagResultCalls.last['sendEvent'],
fakePlatformInterface
.getFeatureFlagResultCalls.last['sendFeatureFlagEvent'],
isTrue,
);
});

test('passes sendEvent=false when specified', () async {
await Posthog().getFeatureFlagResult('test', sendEvent: false);
test('passes sendFeatureFlagEvent=false when specified', () async {
await Posthog().getFeatureFlagResult('test', sendFeatureFlagEvent: false);

expect(
fakePlatformInterface.getFeatureFlagResultCalls.last['sendEvent'],
fakePlatformInterface
.getFeatureFlagResultCalls.last['sendFeatureFlagEvent'],
isFalse,
);
});
Expand Down
Loading