| # connectivity |
| |
| This plugin allows Flutter apps to discover network connectivity and configure |
| themselves accordingly. It can distinguish between cellular vs WiFi connection. |
| This plugin works for iOS and Android. |
| |
| > Note that on Android, this does not guarantee connection to Internet. For instance, |
| the app might have wifi access but it might be a VPN or a hotel WiFi with no access. |
| |
| ## Usage |
| |
| Sample usage to check current status: |
| |
| ```dart |
| import 'package:connectivity/connectivity.dart'; |
| |
| var connectivityResult = await (Connectivity().checkConnectivity()); |
| if (connectivityResult == ConnectivityResult.mobile) { |
| // I am connected to a mobile network. |
| } else if (connectivityResult == ConnectivityResult.wifi) { |
| // I am connected to a wifi network. |
| } |
| ``` |
| |
| > Note that you should not be using the current network status for deciding |
| whether you can reliably make a network connection. Always guard your app code |
| against timeouts and errors that might come from the network layer. |
| |
| You can also listen for network state changes by subscribing to the stream |
| exposed by connectivity plugin: |
| |
| ```dart |
| import 'package:connectivity/connectivity.dart'; |
| |
| @override |
| initState() { |
| super.initState(); |
| |
| subscription = Connectivity().onConnectivityChanged.listen((ConnectivityResult result) { |
| // Got a new connectivity status! |
| }) |
| } |
| |
| // Be sure to cancel subscription after you are done |
| @override |
| dispose() { |
| super.dispose(); |
| |
| subscription.cancel(); |
| } |
| ``` |
| |
| Note that connectivity changes are no longer communicated to Android apps in the background starting with Android O. *You should always check for connectivity status when your app is resumed.* The broadcast is only useful when your application is in the foreground. |
| |
| You can get wi-fi related information using: |
| |
| ```dart |
| import 'package:connectivity/connectivity.dart'; |
| |
| var wifiBSSID = await (Connectivity().getWifiBSSID()); |
| var wifiIP = await (Connectivity().getWifiIP());network |
| var wifiName = await (Connectivity().getWifiName());wifi network |
| ``` |
| |
| ### iOS 12 |
| |
| To use `.getWifiBSSID()` and `.getWifiName()` on iOS >= 12, the `Access WiFi information capability` in XCode must be enabled. Otherwise, both methods will return null. |
| |
| ### iOS 13 |
| |
| The methods `.getWifiBSSID()` and `.getWifiName()` utilize the [`CNCopyCurrentNetworkInfo`](https://developer.apple.com/documentation/systemconfiguration/1614126-cncopycurrentnetworkinfo) function on iOS. |
| |
| As of iOS 13, Apple announced that these APIs will no longer return valid information. |
| An app linked against iOS 12 or earlier receives pseudo-values such as: |
| |
| * SSID: "Wi-Fi" or "WLAN" ("WLAN" will be returned for the China SKU). |
| |
| * BSSID: "00:00:00:00:00:00" |
| |
| An app linked against iOS 13 or later receives `null`. |
| |
| The `CNCopyCurrentNetworkInfo` will work for Apps that: |
| |
| * The app uses Core Location, and has the user’s authorization to use location information. |
| |
| * The app uses the NEHotspotConfiguration API to configure the current Wi-Fi network. |
| |
| * The app has active VPN configurations installed. |
| |
| If your app falls into the last two categories, it will work as it is. If your app doesn't fall into the last two categories, |
| and you still need to access the wifi information, you should request user's authorization to use location information. |
| |
| There is a helper method provided in this plugin to request the location authorization: `requestLocationServiceAuthorization`. |
| To request location authorization, make sure to add the following keys to your _Info.plist_ file, located in `<project root>/ios/Runner/Info.plist`: |
| |
| * `NSLocationAlwaysAndWhenInUseUsageDescription` - describe why the app needs access to the user’s location information all the time (foreground and background). This is called _Privacy - Location Always and When In Use Usage Description_ in the visual editor. |
| * `NSLocationWhenInUseUsageDescription` - describe why the app needs access to the user’s location information when the app is running in the foreground. This is called _Privacy - Location When In Use Usage Description_ in the visual editor. |
| |
| ## Getting Started |
| |
| For help getting started with Flutter, view our online |
| [documentation](http://flutter.io/). |
| |
| For help on editing plugin code, view the [documentation](https://flutter.io/platform-plugins/#edit-code). |