Skip to content

Commit

Permalink
separate web and non web components
Browse files Browse the repository at this point in the history
  • Loading branch information
denrase committed Dec 18, 2023
1 parent 7156254 commit d6edcbb
Show file tree
Hide file tree
Showing 8 changed files with 84 additions and 32 deletions.
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

0 comments on commit d6edcbb

Please sign in to comment.