| // Copyright 2017 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| // ignore_for_file: public_member_api_docs |
| |
| import 'dart:async'; |
| import 'dart:io'; |
| |
| import 'package:connectivity/connectivity.dart'; |
| import 'package:flutter/foundation.dart'; |
| import 'package:flutter/material.dart'; |
| import 'package:flutter/services.dart'; |
| |
| // Sets a platform override for desktop to avoid exceptions. See |
| // https://flutter.dev/desktop#target-platform-override for more info. |
| void _enablePlatformOverrideForDesktop() { |
| if (!kIsWeb && (Platform.isWindows || Platform.isLinux)) { |
| debugDefaultTargetPlatformOverride = TargetPlatform.fuchsia; |
| } |
| } |
| |
| void main() { |
| _enablePlatformOverrideForDesktop(); |
| runApp(MyApp()); |
| } |
| |
| class MyApp extends StatelessWidget { |
| // This widget is the root of your application. |
| @override |
| Widget build(BuildContext context) { |
| return MaterialApp( |
| title: 'Flutter Demo', |
| theme: ThemeData( |
| primarySwatch: Colors.blue, |
| ), |
| home: MyHomePage(title: 'Flutter Demo Home Page'), |
| ); |
| } |
| } |
| |
| class MyHomePage extends StatefulWidget { |
| MyHomePage({Key key, this.title}) : super(key: key); |
| |
| final String title; |
| |
| @override |
| _MyHomePageState createState() => _MyHomePageState(); |
| } |
| |
| class _MyHomePageState extends State<MyHomePage> { |
| String _connectionStatus = 'Unknown'; |
| final Connectivity _connectivity = Connectivity(); |
| StreamSubscription<ConnectivityResult> _connectivitySubscription; |
| |
| @override |
| void initState() { |
| super.initState(); |
| initConnectivity(); |
| _connectivitySubscription = |
| _connectivity.onConnectivityChanged.listen(_updateConnectionStatus); |
| } |
| |
| @override |
| void dispose() { |
| _connectivitySubscription.cancel(); |
| super.dispose(); |
| } |
| |
| // Platform messages are asynchronous, so we initialize in an async method. |
| Future<void> initConnectivity() async { |
| ConnectivityResult result; |
| // Platform messages may fail, so we use a try/catch PlatformException. |
| try { |
| result = await _connectivity.checkConnectivity(); |
| } on PlatformException catch (e) { |
| print(e.toString()); |
| } |
| |
| // If the widget was removed from the tree while the asynchronous platform |
| // message was in flight, we want to discard the reply rather than calling |
| // setState to update our non-existent appearance. |
| if (!mounted) { |
| return Future.value(null); |
| } |
| |
| return _updateConnectionStatus(result); |
| } |
| |
| @override |
| Widget build(BuildContext context) { |
| return Scaffold( |
| appBar: AppBar( |
| title: const Text('Plugin example app'), |
| ), |
| body: Center(child: Text('Connection Status: $_connectionStatus')), |
| ); |
| } |
| |
| Future<void> _updateConnectionStatus(ConnectivityResult result) async { |
| switch (result) { |
| case ConnectivityResult.wifi: |
| String wifiName, wifiBSSID, wifiIP; |
| |
| try { |
| if (Platform.isIOS) { |
| LocationAuthorizationStatus status = |
| await _connectivity.getLocationServiceAuthorization(); |
| if (status == LocationAuthorizationStatus.notDetermined) { |
| status = |
| await _connectivity.requestLocationServiceAuthorization(); |
| } |
| if (status == LocationAuthorizationStatus.authorizedAlways || |
| status == LocationAuthorizationStatus.authorizedWhenInUse) { |
| wifiName = await _connectivity.getWifiName(); |
| } else { |
| wifiName = await _connectivity.getWifiName(); |
| } |
| } else { |
| wifiName = await _connectivity.getWifiName(); |
| } |
| } on PlatformException catch (e) { |
| print(e.toString()); |
| wifiName = "Failed to get Wifi Name"; |
| } |
| |
| try { |
| if (Platform.isIOS) { |
| LocationAuthorizationStatus status = |
| await _connectivity.getLocationServiceAuthorization(); |
| if (status == LocationAuthorizationStatus.notDetermined) { |
| status = |
| await _connectivity.requestLocationServiceAuthorization(); |
| } |
| if (status == LocationAuthorizationStatus.authorizedAlways || |
| status == LocationAuthorizationStatus.authorizedWhenInUse) { |
| wifiBSSID = await _connectivity.getWifiBSSID(); |
| } else { |
| wifiBSSID = await _connectivity.getWifiBSSID(); |
| } |
| } else { |
| wifiBSSID = await _connectivity.getWifiBSSID(); |
| } |
| } on PlatformException catch (e) { |
| print(e.toString()); |
| wifiBSSID = "Failed to get Wifi BSSID"; |
| } |
| |
| try { |
| wifiIP = await _connectivity.getWifiIP(); |
| } on PlatformException catch (e) { |
| print(e.toString()); |
| wifiIP = "Failed to get Wifi IP"; |
| } |
| |
| setState(() { |
| _connectionStatus = '$result\n' |
| 'Wifi Name: $wifiName\n' |
| 'Wifi BSSID: $wifiBSSID\n' |
| 'Wifi IP: $wifiIP\n'; |
| }); |
| break; |
| case ConnectivityResult.mobile: |
| case ConnectivityResult.none: |
| setState(() => _connectionStatus = result.toString()); |
| break; |
| default: |
| setState(() => _connectionStatus = 'Failed to get connectivity.'); |
| break; |
| } |
| } |
| } |