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
14 changes: 9 additions & 5 deletions packages/core/lib/analytics.dart
Original file line number Diff line number Diff line change
Expand Up @@ -86,11 +86,15 @@ class Analytics with ClientMethods {
/// @param isReady
void _onStateReady() {
if (state.configuration.state.trackDeeplinks) {
AnalyticsPlatform.instance.linkStream.listen((event) {
if (state.configuration.state.trackDeeplinks) {
_trackDeepLinkEvent(DeepLinkData.fromJson(event));
}
});
try {
AnalyticsPlatform.instance.linkStream.listen((event) {
if (state.configuration.state.trackDeeplinks) {
_trackDeepLinkEvent(DeepLinkData.fromJson(event));
}
});
} on UnimplementedError {
// Deep link tracking not available on this platform (e.g. web)
}
}

for (var plugin in _pluginsToAdd) {
Expand Down
4 changes: 3 additions & 1 deletion packages/core/lib/analytics_web.dart
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,9 @@ class AnalyticsPlatformImpl extends AnalyticsPlatform {
/// Constructs a AnalyticsWeb
AnalyticsPlatformImpl();

/// Returns a [String] containing the version of the platform.
@override
Stream<Map<String, dynamic>> get linkStream => const Stream.empty();

@override
Future<NativeContext> getContext({bool collectDeviceId = false}) async =>
NativeContext(
Expand Down
33 changes: 27 additions & 6 deletions packages/core/test/analytics_test.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import 'package:segment_analytics/analytics.dart';
import 'package:segment_analytics/analytics_platform_interface.dart';
import 'package:segment_analytics/client.dart';
import 'package:segment_analytics/event.dart';
import 'package:segment_analytics/flush_policies/count_flush_policy.dart';
import 'package:segment_analytics/flush_policies/flush_policy.dart';
Expand Down Expand Up @@ -128,15 +127,37 @@ void main() {
);
});

test("it createClient", () async {
Analytics analytics = createClient(Configuration("123",
debug: false,
test("it creates Analytics with trackDeeplinks and lifecycle events enabled", () async {
final analytics = Analytics(
Configuration("123",
trackApplicationLifecycleEvents: true,
trackDeeplinks: true,
token: "abcdef12345")
);
token: "abcdef12345"),
Mocks.store(),
httpClient: (_) => httpClient);
await analytics.init();
expect(analytics, isA<Analytics>());
});

test("trackDeeplinks should not crash on platform without linkStream", () async {
// Reproduces https://github.com/segmentio/analytics_flutter/issues/191
// MockPlatform does not override linkStream, simulating web platform behavior
AnalyticsPlatform.instance = MockPlatform();

final analytics = Analytics(
Configuration("123",
trackApplicationLifecycleEvents: false,
trackDeeplinks: true),
Mocks.store(),
httpClient: (_) => httpClient);
await analytics.init();

// Allow _onStateReady to fire via state.ready.then()
await Future.delayed(Duration(milliseconds: 100));

// If we get here without UnimplementedError, the test passes
analytics.track("test event after deeplink init");
});
});
}

Expand Down