[flutter] 플러터 geolocator를 이용한 위치 기반 실시간 주변 WIFI 정보 애플리케이션 개발

보다 편리한 사용자 경험을 제공하기 위해 위치 기반 서비스는 모바일 애플리케이션에서 매우 중요하다. 이번 블로그에서는 플러터(Flutter)와 geolocator 패키지를 사용하여 위치 기반 서비스를 구현하는 방법을 알아보겠다. 또한, 실시간으로 주변 WIFI 정보를 가져와 사용자에게 제공하는 애플리케이션을 개발하는 방법도 다룰 것이다.

1. 필요한 패키지 설치

먼저, 플러터 프로젝트를 생성하고 geolocator 패키지를 설치해야 한다. 다음 명령어를 사용하여 패키지를 설치할 수 있다.

flutter pub add geolocator

또는, pubspec.yaml 파일에 직접 패키지를 추가해도 된다.

dependencies:
  geolocator: ^7.0.1

2. 위치 정보 가져오기

위치 정보를 가져오기 위해 geolocator 패키지를 사용한다. 다음과 같은 코드로 위치 정보를 가져올 수 있다.

import 'package:geolocator/geolocator.dart';

Position position = await Geolocator.getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
double latitude = position.latitude;
double longitude = position.longitude;

위의 코드는 현재 위치 정보를 가져오는 기능을 수행한다. 가져온 위도(latitude)와 경도(longitude)는 이후에 사용할 것이다.

3. 주변 WIFI 정보 가져오기

위치 정보를 가져왔으니 이제 주변 WIFI 정보를 가져오는 기능을 구현해보자. 이를 위해 wifi_info_flutter 패키지를 사용할 것이다.

import 'package:wifi_info_flutter/wifi_info_flutter.dart';

String ssid = await WifiInfo().getWifiName();
String bssid = await WifiInfo().getWifiBSSID();
List<WifiNetwork> wifiNetworks = await WifiInfo().getWifiList();

ssid는 현재 연결된 WIFI 네트워크의 SSID를, bssid는 현재 연결된 WIFI 네트워크의 BSSID(MAC 주소)를, wifiNetworks는 현재 주변의 모든 WIFI 네트워크 정보를 가져온다.

4. 애플리케이션 UI 개발

위치 정보와 주변 WIFI 정보를 가져오는 기능을 구현했으니 이제 애플리케이션의 UI를 개발해보자. 여기서는 단순히 현재 위치의 위도와 경도, 주변 WIFI 네트워크의 수를 화면에 표시하는 예제를 보여줄 것이다.

import 'package:flutter/material.dart';

class MyLocationPage extends StatefulWidget {
  @override
  _MyLocationPageState createState() => _MyLocationPageState();
}

class _MyLocationPageState extends State<MyLocationPage> {
  Position? position;
  String? ssid;
  String? bssid;
  List<WifiNetwork>? wifiNetworks;

  @override
  void initState() {
    super.initState();
    getPosition();
    getWifiInfo();
  }

  Future<void> getPosition() async {
    Position _position = await Geolocator.getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
    setState(() {
      position = _position;
    });
  }

  Future<void> getWifiInfo() async {
    String _ssid = await WifiInfo().getWifiName();
    String _bssid = await WifiInfo().getWifiBSSID();
    List<WifiNetwork> _wifiNetworks = await WifiInfo().getWifiList();
    setState(() {
      ssid = _ssid;
      bssid = _bssid;
      wifiNetworks = _wifiNetworks;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('My Location'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            position != null ? Text('Latitude: ${position!.latitude}') : CircularProgressIndicator(),
            position != null ? Text('Longitude: ${position!.longitude}') : CircularProgressIndicator(),
            SizedBox(height: 16),
            wifiNetworks != null ? Text('Wifi Count: ${wifiNetworks!.length}') : CircularProgressIndicator(),
            SizedBox(height: 16),
            ssid != null ? Text('SSID: $ssid') : CircularProgressIndicator(),
            SizedBox(height: 16),
            bssid != null ? Text('BSSID: $bssid') : CircularProgressIndicator(),
          ],
        ),
      ),
    );
  }
}

위의 코드는 MyLocationPage라는 StatelessWidget을 정의하고, 이곳에서 위치와 WIFI 정보를 가져와 화면에 보여준다. 위치와 WIFI 정보는 position, ssid, bssid, wifiNetworks 변수에 저장되어 있다.

5. 결과 확인

이제 애플리케이션을 실행하여 결과를 확인해보자. MyLocationPage를 홈으로 설정하고 앱을 실행하면 현재 위치의 위도, 경도를 확인할 수 있고, 주변 WIFI 네트워크의 수, 현재 연결된 WIFI 네트워크의 SSID와 BSSID를 확인할 수 있다.

결론

위치 기반 서비스와 주변 WIFI 정보를 활용하여 실시간으로 정보를 제공하는 애플리케이션을 개발하는 방법을 알아보았다. 플러터 프레임워크와 geolocator 패키지, wifi_info_flutter 패키지를 사용하여 원하는 위치 정보와 주변 WIFI 정보를 가져올 수 있다. 이러한 기술을 활용하여 다양한 위치 기반 서비스 애플리케이션을 개발해보자.