Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
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
Prev Previous commit
Next Next commit
separate web and non web components
  • Loading branch information
denrase committed Dec 18, 2023
commit d6edcbbb5ee6784d01b78bcb2aa8910b5e224ac8
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
import 'package:meta/meta.dart';
import '../../../sentry_flutter.dart';
import 'connectivity_provider.dart';

class ConnectivityIntegration extends Integration<SentryFlutterOptions> {
Hub? _hub;
ConnectivityProvider? _connectivityProvider;

@override
void call(Hub hub, SentryFlutterOptions options) {
_hub = hub;
_connectivityProvider = ConnectivityProvider();
_connectivityProvider?.listen((connectivity) {
addBreadcrumb(connectivity);
});
options.sdk.addIntegration('connectivityIntegration');
}

@override
void close() {
_hub = null;
_connectivityProvider?.cancel();
}

@internal
@visibleForTesting
void addBreadcrumb(String connectivity) {
_hub?.addBreadcrumb(
Breadcrumb(
category: 'device.connectivity',
level: SentryLevel.info,
type: 'connectivity',
data: {'connectivity': connectivity}),
);
}
}


Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@

import 'noop_connectivity_provider.dart'
if (dart.library.html) 'web_connectivity_provider.dart';

abstract class ConnectivityProvider {
factory ConnectivityProvider() => connectivityProvider();

void listen(void Function(String connectivity) onChange);
void cancel();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@

import 'connectivity_provider.dart';

ConnectivityProvider connectivityProvider() {
return NoOpConnectivityProvider();
}

class NoOpConnectivityProvider implements ConnectivityProvider {

@override
void listen(void Function(String connectivity) onChange) {
// NoOp
}

@override
void cancel() {
// NoOp
}
}
Original file line number Diff line number Diff line change
@@ -1,22 +1,23 @@
import 'dart:async';
import 'dart:html' as html;

import 'package:meta/meta.dart';
import '../../sentry_flutter.dart';
import 'connectivity_provider.dart';

ConnectivityProvider connectivityProvider() {
return WebConnectivityProvider();
}

class WebConnectivityProvider implements ConnectivityProvider {

class ConnectivityIntegration extends Integration<SentryFlutterOptions> {
Hub? _hub;
html.NetworkInformation? _networkInformation;
String? _oldResult = 'none';
String? _oldResult;

StreamSubscription<html.Event>? _networkInfoSub;
StreamSubscription<html.Event>? _onOnlineSub;
StreamSubscription<html.Event>? _onOfflineSub;

@override
void call(Hub hub, SentryFlutterOptions options) {
_hub = hub;

void listen(void Function(String connectivity) onChange) {
final supportsNetworkInformation = html.window.navigator.connection != null;
if (supportsNetworkInformation) {
_networkInformation = html.window.navigator.connection;
Expand All @@ -26,26 +27,23 @@ class ConnectivityIntegration extends Integration<SentryFlutterOptions> {
final newResult = _networkInformation?.toConnectivityResult();
if (newResult != null && _oldResult != newResult) {
_oldResult = newResult;
addBreadcrumb(newResult);
onChange(newResult);
}
});
} else {
// Fallback to onLine/onOffline API
_oldResult = (html.window.navigator.onLine ?? false) ? 'wifi' : 'none';
_onOnlineSub = html.window.onOnline.listen((_) {
addBreadcrumb('wifi');
onChange('wifi');
});
_onOfflineSub = html.window.onOffline.listen((_) {
addBreadcrumb('none');
onChange('none');
});
}
options.sdk.addIntegration('connectivityIntegration');
}

@override
void close() {
_hub = null;

void cancel() {
_networkInfoSub?.cancel();
_networkInfoSub = null;

Expand All @@ -55,21 +53,9 @@ class ConnectivityIntegration extends Integration<SentryFlutterOptions> {
_onOfflineSub?.cancel();
_onOfflineSub = null;

_oldResult = 'none';
_oldResult = null;
_networkInformation = null;
}

@internal
@visibleForTesting
void addBreadcrumb(String result) {
_hub?.addBreadcrumb(
Breadcrumb(
category: 'device.connectivity',
level: SentryLevel.info,
type: 'connectivity',
data: {'connectivity': result}),
);
}
}

// Source: https://github.com/fluttercommunity/plus_plugins/blob/258f7b8b461f6d78028354f95d24014b240a80f0/packages/connectivity_plus/connectivity_plus/lib/src/web/utils/connectivity_result.dart#L8
Expand Down
2 changes: 1 addition & 1 deletion flutter/lib/src/sentry_flutter.dart
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import '../sentry_flutter.dart';
import 'event_processor/android_platform_exception_event_processor.dart';
import 'event_processor/flutter_exception_event_processor.dart';
import 'event_processor/platform_exception_event_processor.dart';
import 'integrations/connectivity_integration.dart';
import 'integrations/connectivity/connectivity_integration.dart';
import 'integrations/screenshot_integration.dart';
import 'native/factory.dart';
import 'native/native_scope_observer.dart';
Expand Down
1 change: 0 additions & 1 deletion flutter/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ dependencies:
package_info_plus: '>=1.0.0 <=5.0.1'
meta: ^1.3.0
ffi: ^2.0.0
connectivity_plus: ^5.0.2

dev_dependencies:
build_runner: ^2.4.2
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import 'package:flutter/widgets.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
import 'package:sentry/sentry.dart';
import 'package:sentry_flutter/src/integrations/connectivity_integration.dart';
import 'package:sentry_flutter/src/integrations/connectivity/connectivity_integration.dart';
import 'package:sentry_flutter/src/sentry_flutter_options.dart';

import '../mocks.dart';
Expand Down
2 changes: 1 addition & 1 deletion flutter/test/sentry_flutter_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import 'package:flutter_test/flutter_test.dart';
import 'package:package_info_plus/package_info_plus.dart';
import 'package:sentry_flutter/sentry_flutter.dart';
import 'package:sentry_flutter/src/integrations/connectivity_integration.dart';
import 'package:sentry_flutter/src/integrations/connectivity/connectivity_integration.dart';
import 'package:sentry_flutter/src/integrations/integrations.dart';
import 'package:sentry_flutter/src/integrations/screenshot_integration.dart';
import 'package:sentry_flutter/src/profiling.dart';
Expand Down