🛰️

flutterのwifiパッケージ「connectivity」で上手くいかなかったら

2020/12/22に公開

flutterのwifi系のパッケージで1日詰まった為、誰かのためにメモ

解決できる問題

flutterでwifiの接続状況を取得したい(wifi接続の有無,wifiの強度,通信方法の取得)
flutterで接続されているwifiの詳細情報を取得したい(wifi名,IP,BSSID取得)

本題

flutterのwifi系の情報を取得するパッケージは何個かあるが公式の物では「connectivity」がある。
Exampleなどを見ると「connectivity」で上の解決したいものを全て解決するように見える。
だが、よくよく調べてみると
あるタイミングでwifiに関するパッケージを二つに分けられ、「wifi_info_flutter」という別のパッケージがリリースされており、「connectivity」の機能が少し移植され
上記の問題を「connectivity」だけでは解決できなくなった。

wifiの接続状況を取得したい(wifi接続の有無,wifiの強度,通信方法の取得)
「connectivity」

接続されているwifiの詳細情報を取得したい(wifi名,IP,BSSID取得)
「wifi_info_flutter」

上記の通り移植されているがパッケージのREADMEなどが変更されておらず誤った方法で行うと
永遠に取得することができない。。

connectivity

wifiに繋がっているかどうかが返ってくる
https://pub.dev/packages/connectivity

import 'package:connectivity/connectivity.dart';

String wificonnect;
final Connectivity _connectivity = Connectivity();
wificonnect = await _connectivity.checkConnectivity();

wifi_info_flutter

wifiの名前が返ってくる
https://pub.dev/packages/wifi_info_flutter

import 'package:wifi_info_flutter/wifi_info_flutter.dart';

String wifiName;
final WifiInfo _wifiInfo = WifiInfo();
wifiName = await _wifiInfo.getWifiName();

備考

wifi取得には位置情報権限も必要なので、権限の解放も忘れずに!!
権限の変更は「permission_handler」がおすすめです!!
https://pub.dev/packages/permission_handler

main.dart
import 'package:permission_handler/permission_handler.dart';
Map<Permission, PermissionStatus> statuses = await [Permission.location].request();

Info.plist

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

AndroidManifest.xml

import 'package:permission_handler/permission_handler.dart';
Map<Permission, PermissionStatus> statuses = await [Permission.location].request();

Discussion