network_info_plusとは
ネットワーク情報を取得し、適切に設定できるようにするためのパッケージです。
Wi-Fiの名前、BSSID、IPアドレスなどの情報を簡単に取得することができます。

network_info_plus | Flutter package
Flutter plugin for discovering information (e.g. WiFi details) of the network.
使い方
インストール
dependencies:
network_info_plus: ^5.0.3
インポート
使用するファイルで、network_info_plus
をインポートします。
import 'package:network_info_plus/network_info_plus.dart';
基本的な使い方
NetworkInfo
クラスのインスタンスを作成し、各種ネットワーク情報を取得します。
final info = NetworkInfo();
final wifiName = await info.getWifiName(); // 例: "FooNetwork"
final wifiBSSID = await info.getWifiBSSID(); // 例: 11:22:33:44:55:66
final wifiIP = await info.getWifiIP(); // 例: 192.168.1.43
final wifiIPv6 = await info.getWifiIPv6(); // 例: 2001:0db8:85a3:0000:0000:8a2e:0370:7334
final wifiSubmask = await info.getWifiSubmask(); // 例: 255.255.255.0
final wifiBroadcast = await info.getWifiBroadcast(); // 例: 192.168.1.255
final wifiGateway = await info.getWifiGatewayIP(); // 例: 192.168.1.1
デバイスの権限
ネットワーク情報にアクセスするためには、AndroidおよびiOSで追加の権限が必要です。
Android
- Wi-Fi名またはBSSIDを取得するためには、以下の条件を満たす必要があります。
- Android 10(APIレベル29)以降をターゲットにしている場合、
ACCESS_FINE_LOCATION
権限が必要です。 - Android 10未満をターゲットにしている場合、
ACCESS_COARSE_LOCATION
またはACCESS_FINE_LOCATION
権限が必要です。 - デバイスの位置情報サービスが有効になっていること。
以下のコード例は、permission_handler
プラグインを使用して位置情報権限をリクエストします。
import 'package:permission_handler/permission_handler.dart';
PermissionStatus status = await Permission.location.request();
iOS
- iOS 12以降では、XCodeで
Access WiFi information
機能を有効にする必要があります。これにより、getWifiBSSID()
およびgetWifiName()
メソッドが有効になります。 - iOS 13以降では、
CNCopyCurrentNetworkInfo
関数を使用するために、位置情報の使用許可が必要です。これには、NSLocationAlwaysAndWhenInUseUsageDescription
およびNSLocationWhenInUseUsageDescription
キーをInfo.plist
ファイルに追加する必要があります。
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>アプリが位置情報を常時利用する理由を説明します。</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>アプリがフォアグラウンドで位置情報を利用する理由を説明します。</string>
さらに、iOS 14以降では、NEHotspotNetwork.fetchCurrentWithCompletionHandler
メソッドを使用してWi-Fi情報を取得します。これには、com.apple.developer.networking.wifi-info
エンタイトルメントが必要です。