flutter device_info 패키지 사용하여 기기 정보 알아보기

오늘은 flutter로 앱이 실행되고 있는 기기의 정보를 알아보는 device_info 패키지에 대하여 알아보려 합니다.

에뮬레이터 및 기기 준비하기

안드로이드나 ios 앱으로 테스트할 장치를 준비해야 합니다.

준비했으면, 미리 기기 또는 에뮬레이터를 ide에 연결해줍니다.

pubspec.yaml 작성하기

dependencies:
  flutter:
    sdk: flutter
  device_info:

flutter 앱에서 기기 정보를 알아내려면 device_info 패키지를 pubspec.yaml에 작성해줍니다.

main.dart 앱 코드 작성하기

import 'package:flutter/material.dart';
import 'package:device_info/device_info.dart';
import 'dart:io';

앱에 머티리얼 위젯을 추가할 수 있는 material 패키지와 기기 정보를 알 수 있는 device_info 패키지를 가져옵니다.

void main() {
  runApp(MyApp());
}

앱을 MyApp으로 구동합니다.

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter device_info',
      home: MyHomePage(),
    );
  }
}

머티리얼 디자인으로 감싸진 MyHomePage 객체를 화면에 그려줍니다.

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

StatefulWidget으로 버튼, 슬라이더, 체크 박스처럼 사용자와 상호작용하여 위젯이 변화하는 것을 묶어줍니다.

createState 메소드를 오버라이딩하여 _MyHomePageState 객체를 생성해줍니다.

class _MyHomePageState extends State<MyHomePage> {
  List _data = <dynamic>[];
  static final DeviceInfoPlugin plugin = DeviceInfoPlugin();

기기의 정보를 담을 리스트와 DeviceInfoPlugin 객체를 생성해줍니다.

  @override
  void initState() {
    super.initState();
    initPlatform();
  }

오버라이딩한 initState에 의해 앱이 실행될 때 initPlatform 함수가 수행됩니다.

  Future<void> initPlatform() async {
    if (Platform.isAndroid) {
      setState(() async {
        _data = getAndroidDevice(await plugin.androidInfo);
      });
    }
    if (Platform.isIOS) {
      setState(() async {
        _data = getIosDevice(await plugin.iosInfo);
      });
    }
  }

initPlatform은 앱이 실행되는 기기의 플랫폼에 따라 가져오는 정보들이 다르도록 구별해줍니다.

비동기로 받아와서 setState에 의해 화면을 새로 그려줍니다.

  getAndroidDevice(AndroidDeviceInfo device) {
    return [
      device.version.securityPatch,
      device.version.sdkInt,
      device.version.release,
      device.version.codename,
      device.board,
      device.bootloader,
      device.brand,
      device.device,
      device.display,
      device.fingerprint,
      device.hardware,
      device.host,
      device.id,
      device.manufacturer,
      device.model,
      device.product,
      device.androidId,
    ];
  }

안드로이드와 같은 경우에는 위와 같은 정보들을 가져올 수 있으며, 위 코드들은 모든 정보를 표시한 것은 아닙니다.

  getIosDevice(IosDeviceInfo device) {
    return [
      device.name,
      device.systemName,
      device.systemVersion,
      device.model,
      device.localizedModel,
      device.identifierForVendor,
    ];
  }

ios도 정보를 가져올 수 있으며, 이 역시 모든 정보를 코드에 표기한 것은 아닙니다.

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Text(
          _data.toString(),
        ),
      ),
    );
  }
}

initPlatform에서 받아온 정보들로 화면 가운데에 그려줍니다.

Written on March 8, 2019