広告

Flutterラボの

プレミアム会員になる

【Flutter】デバイス情報やOSバージョンを取得する(device_info_plus)

2021.11.14

もともとはdevice_infoパッケージでデバイス情報が取得できましたが、新しくWEBやデスクトップのプラットフォームにも対応したdevice_info_plusパッケージで一括取得できるようになったので使い方を紹介します。

device_info_plus | Flutter Package Flutter plugin providing detailed information about the devic pub.dev

※今回はWEBかAndroidのときにデバイス情報を取得して表示するようにしていますが、iOSやデスクトップアプリの際も使い方は同じなので同様に分岐を増やして使うことができます。

以下にコメントアウト付きの全コードを載せておくので、参考にしてください。

import 'dart:io';

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

void main() {
  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(title: 'device_info_plus'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key, required this.title}) : super(key: key);

  final String title;

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {

  // DeviceInfoPluginをインスタンス化
  DeviceInfoPlugin deviceInfo = DeviceInfoPlugin();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Padding(
        padding: const EdgeInsets.all(8.0),
        child: buildFutureBuilder(),
      ),
    );
  }

  Widget buildFutureBuilder() {
    // WEBのとき
    if(kIsWeb) {
      return FutureBuilder<WebBrowserInfo>(
        future: Future<WebBrowserInfo>(() async {
          // データ取得
          return (await deviceInfo.webBrowserInfo);
        }),
        builder: (context, snapShot) {
          if (snapShot.connectionState == ConnectionState.done) {
            return Column(
              crossAxisAlignment: CrossAxisAlignment.start,
              children: [
                Text('appVersion: ${snapShot.data!.appVersion}'),
                Text('browserName: ${snapShot.data!.browserName}'),
                Text('language: ${snapShot.data!.language}'),
              ],
            );
          } else {
            return const CircularProgressIndicator();
          }
        },
      );

    // Androidのとき
    } else if(Platform.isAndroid) {
      return FutureBuilder<AndroidDeviceInfo>(
        future: Future<AndroidDeviceInfo>(() async {
          // データ取得
          return (await deviceInfo.androidInfo);
        }),
        builder: (context, snapShot) {
          if (snapShot.connectionState == ConnectionState.done) {
            return Column(
              crossAxisAlignment: CrossAxisAlignment.start,
              children: [
                Text('model: ${snapShot.data!.model}'),
                Text('sdkInt: ${snapShot.data!.version.sdkInt}'),
              ],
            );
          } else {
            return const CircularProgressIndicator();
          }
        },
      );
    } else {
      return const SizedBox();
    }
  }
}
Flutterラボ|動画で学ぶFlutter学習サイト Flutter・Dart・Firebaseに関するアプリ制作の技術を学ぶことができます。プログラミング初心者から経験者まで flutterlabo.tech



Flutterラボ
hatchoutschool
FlutterとNuxtに関する知識を発信しています! 動画で学べる学習サイト『Flutterラボ』と『Nuxtラボ』を運営 Flutterラボ:https://flutterlabo.tech/ 広告のECサイトを開発(https://ec-ad.tech/)