From d681fb05eef9fdabd59ceb55b997861ef1616d18 Mon Sep 17 00:00:00 2001 From: vjrj <vjrj@comunes.org> Date: Wed, 2 Aug 2023 22:36:29 +0200 Subject: [PATCH] Fix for VPN issue #45 --- .../connectivity_widget_wrapper_wrapper.dart | 37 ++++++++++++++++--- pubspec.lock | 8 ++++ pubspec.yaml | 1 + 3 files changed, 40 insertions(+), 6 deletions(-) diff --git a/lib/ui/widgets/connectivity_widget_wrapper_wrapper.dart b/lib/ui/widgets/connectivity_widget_wrapper_wrapper.dart index 3d579943..b260027f 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 b3e393b0..4eafcbb6 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 d2b3cc69..946074f3 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: -- GitLab