[Flutter] device_info_plus를 사용하여 디바이스 정보 가져오기

2022-02-02 hit count image

Flutter에서 device_info_plus를 사용하여 디바이스명, 디바이스 모델명, 디바이스 시스템명 등 디바이스에 관한 정보를 가져오는 방법에 대해서 알아봅시다.

개요

이번 블로그 포스트에서는 device_info_plus를 사용하여 디바이스명, 디바이스 모델명, 디바이스 시스템명 등 디바이스에 관한 정보를 가져오는 방법에 대해서 알아봅시다.

이 블로그 포스트에서 소개하는 소스 코드는 아래에 링크에서 확인할 수 있습니다.

device_info_plus 설치

Flutter에서 device_info_plus의 사용법을 확인하기 위해 다음 명령어를 사용하여 Flutter의 새로운 프로젝트를 생성합니다.

flutter create device_info_plus_example

그런 다음 명령어를 실행하여 device_info_plus 패키지를 설치합니다.

flutter pub add device_info_plus

이제 이렇게 설치한 device_info_plus를 사용하는 방법에 대해서 알아보도록 합시다.

사용법

device_info_plus를 사용하면 다음과 같은 정보를 사용할 수 있습니다.

import 'package:device_info_plus/device_info_plus.dart';

DeviceInfoPlugin deviceInfo = DeviceInfoPlugin();

// Android
AndroidDeviceInfo info = await deviceInfo.androidInfo;
print(info.version);
print(info.board);
print(info.bootloader);
print(info.brand);
print(info.device);
...
// iOS
IosDeviceInfo info = await deviceInfo.iosInfo;
print(info.name);
print(info.systemName);
print(info.systemVersion);
print(info.model);
print(info.localizedModel);
...
// Linux
LinuxDeviceInfo info = await deviceInfo.linuxInfo;
print(info.name);
print(info.version);
print(info.id);
print(info.versionCodename);
print(info.versionId);
...
// macOS
MacOsDeviceInfo info = await deviceInfo.macOsInfo;
print(info.computerName);
print(info.hostName);
print(info.arch);
print(info.model);
print(info.kernelVersion);
...
// Windows
WindowsDeviceInfo info = await deviceInfo.windowsInfo;
print(info.computerName);
print(info.numberOfCores);
print(info.systemMemoryInMegabytes);

각각의 디바이스별로 습득할 수 있는 정보가 다르므로, 제공하는 정보를 확인하여 사용해야 합니다.

또는 다음처럼 공통화된 정보를 가져올 수 있습니다.

final info = await deviceInfo.deviceInfo;
print(info.toMap());

예제

지금까지에 내용을 확인하기 위해 lib/main.dart 파일을 열고 다음과 같이 수정합니다.

// ignore_for_file: avoid_print

import 'dart:io';

import 'package:device_info_plus/device_info_plus.dart';
import 'package:flutter/material.dart';

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();

  DeviceInfoPlugin deviceInfo = DeviceInfoPlugin();

  if (Platform.isAndroid) {
    AndroidDeviceInfo info = await deviceInfo.androidInfo;
    print(info.toMap());
  } else if (Platform.isIOS) {
    IosDeviceInfo info = await deviceInfo.iosInfo;
    print(info.toMap());
  } else if (Platform.isLinux) {
    LinuxDeviceInfo info = await deviceInfo.linuxInfo;
    print(info.toMap());
  } else if (Platform.isMacOS) {
    MacOsDeviceInfo info = await deviceInfo.macOsInfo;
    print(info.toMap());
  } else if (Platform.isWindows) {
    WindowsDeviceInfo info = await deviceInfo.windowsInfo;
    print(info.toMap());
  }

  final info = await deviceInfo.deviceInfo;
  print(info.toMap());

  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(),
    );
  }
}

class MyHomePage extends StatelessWidget {
  const MyHomePage({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Device Info Plus'),
      ),
      body: const Center(
        child: Text(
          'Example App',
        ),
      ),
    );
  }
}

앱이 시작되면 main 함수가 실행되고, device_info_plus로부터 정보를 가져오게 됩니다.

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();

  DeviceInfoPlugin deviceInfo = DeviceInfoPlugin();

  if (Platform.isAndroid) {
    AndroidDeviceInfo info = await deviceInfo.androidInfo;
    print(info.toMap());
  } else if (Platform.isIOS) {
    IosDeviceInfo info = await deviceInfo.iosInfo;
    print(info.toMap());
  } else if (Platform.isLinux) {
    LinuxDeviceInfo info = await deviceInfo.linuxInfo;
    print(info.toMap());
  } else if (Platform.isMacOS) {
    MacOsDeviceInfo info = await deviceInfo.macOsInfo;
    print(info.toMap());
  } else if (Platform.isWindows) {
    WindowsDeviceInfo info = await deviceInfo.windowsInfo;
    print(info.toMap());
  }

  final info = await deviceInfo.deviceInfo;
  print(info.toMap());

  runApp(const MyApp());
}

성공적으로 정보를 가져왔다면, 다음과 같이 디바이스의 정보가 출력합니다.

{name: iPhone 13 Pro Max, model: iPhone, systemName: iOS, utsname: {release: 21.3.0, version: Darwin Kernel Version 21.3.0: Wed Jan  5 21:37:58 PST 2022; root:xnu-8019.80.24~20/RELEASE_X86_64, machine: x86_64, sysname: Darwin, nodename: F200304NT01.local}, systemVersion: 15.2, localizedModel: iPhone, identifierForVendor: CED17DF0-20A2-4028-94C3-B4018E00DB92, isPhysicalDevice: false}

완료

이것으로 device_info_plus를 사용하여 디바이스명, 디바이스 모델명, 디바이스 시스템명 등 디바이스의 정보를 가져오는 방법에 대해서 알아보았습니다. 이를 사용하면 어떤 디바이스에서 앱이 실행되고 있는지 디버깅할 수 있습니다.

제 블로그가 도움이 되셨나요? 하단의 댓글을 달아주시면 저에게 큰 힘이 됩니다!

앱 홍보

책 홍보

블로그를 운영하면서 좋은 기회가 생겨 책을 출판하게 되었습니다.

아래 링크를 통해 제가 쓴 책을 구매하실 수 있습니다.
많은 분들에게 도움이 되면 좋겠네요.

스무디 한 잔 마시며 끝내는 React Native, 비제이퍼블릭
스무디 한 잔 마시며 끝내는 리액트 + TDD, 비제이퍼블릭
[심통]현장에서 바로 써먹는 리액트 with 타입스크립트 : 리액트와 스토리북으로 배우는 컴포넌트 주도 개발, 심통
Posts