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

#プログラミング#アプリ開発#Flutter#dart
もともとはdevice_infoパッケージでデバイス情報が取得できましたが、新しくWEBやデスクトップのプラットフォームにも対応したdevice_info_plusパッケージで一括取得できるようになったので使い方を紹介します。
※今回は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();
}
}
}