diff --git a/lib/ui/widgets/connectivity_widget_wrapper_wrapper.dart b/lib/ui/widgets/connectivity_widget_wrapper_wrapper.dart index 3d579943fef519495068e6470e0f499e8fb344e9..b260027fb1d86ff61797e9df0def3f4b64df2bc7 100644 --- a/lib/ui/widgets/connectivity_widget_wrapper_wrapper.dart +++ b/lib/ui/widgets/connectivity_widget_wrapper_wrapper.dart @@ -1,8 +1,9 @@ import 'dart:io'; +import 'package:check_vpn_connection/check_vpn_connection.dart'; import 'package:connectivity_wrapper/connectivity_wrapper.dart'; import 'package:flutter/foundation.dart'; -import 'package:flutter/widgets.dart'; +import 'package:flutter/material.dart'; import '../ui_helpers.dart'; @@ -20,14 +21,14 @@ class ConnectivityWidgetWrapperWrapper extends ConnectivityWidgetWrapper { ? <AddressCheckOptions>[] : List<AddressCheckOptions>.unmodifiable( <AddressCheckOptions>[ - AddressCheckOptions( + /* AddressCheckOptions( hostname: 'duniter.org', port: 443, ), AddressCheckOptions( hostname: 'moneda-libre.org', port: 443, - ), + ), */ // Cloudflare AddressCheckOptions( address: InternetAddress( @@ -88,9 +89,33 @@ class ConnectivityWidgetWrapperWrapper extends ConnectivityWidgetWrapper { ); } + @override + Widget build(BuildContext context) { + return FutureBuilder<bool>( + future: CheckVpnConnection.isVpnActive(), + builder: (BuildContext context, AsyncSnapshot<bool> snapshot) { + if (snapshot.hasData && snapshot.data != null) { + final bool isVpnActive = snapshot.data!; + if (isVpnActive) { + return child; + } else { + return super.build(context); + } + } else { + return super.build(context); + } + }); + } + // This package does not work in IOS so we just return true // Also does not detect well in web production mode - static Future<bool> get isConnected => kIsWeb || isIOS - ? Future<bool>.value(true) - : ConnectivityWrapper.instance.isConnected; + static Future<bool> get isConnected async { + final bool vpn = await CheckVpnConnection.isVpnActive(); + if (vpn) { + return true; + } + return kIsWeb || isIOS + ? Future<bool>.value(true) + : ConnectivityWrapper.instance.isConnected; + } } diff --git a/pubspec.lock b/pubspec.lock index b3e393b07bc9c9fbd6dce72f6d8613894e801c7a..4eafcbb69d5f2bea6c3b8a8f4b37444d4525c471 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -201,6 +201,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.1" + check_vpn_connection: + dependency: "direct main" + description: + name: check_vpn_connection + sha256: "68029b66124eb5de2bc877f516ad9773f8b57e0a9ccf5c64609bb7cb8f14f3a0" + url: "https://pub.dev" + source: hosted + version: "0.0.2" checked_yaml: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index d2b3cc69ffc4d8afd14a2b5d63ce40aa7c865180..946074f34196658294052f7f46de89be9ef38956 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -93,6 +93,7 @@ dependencies: uni_links: ^0.5.1 feedback: ^2.6.0 sentry_dart_plugin: ^1.5.0 + check_vpn_connection: ^0.0.2 dev_dependencies: flutter_test: