TaillookTech

モバイルアプリ開発を追っています

Flutterでdevice_infoを用いてデバイスの情報を取得する

Flutterアプリの開発時、デバイスのバージョンによってUIを切り替えたりする場合に使えるのではと調査した。

package

pubspec.yamlのdependenciesdevice_info: ^0.4.0+1を追記

コード

import 'package:device_info/device_info.dart';でdevice_infoをインポートし、
以下のようにデバイス情報の文字列を取得するコードを追記する。

class _MyAppState extends State<MyApp> {
  String info = "";

  getInfo() async {
    DeviceInfoPlugin deviceInfo = new DeviceInfoPlugin();
    IosDeviceInfo iosInfo = await deviceInfo.iosInfo;

    setState(() {
      info = "${iosInfo.utsname.machine}";
    });
  }

  @override
  Widget build(BuildContext context) {
    getInfo();
    return new Scaffold(
      appBar: new AppBar(
        title: Text("DEMO"),
      ),
      body: new Center(
        child: 
          new Column(
            mainAxisSize: MainAxisSize.min,
            children: <Widget>[
              Text(info,style: TextStyle(fontSize: 20.0),),
            ],
          )
      ),
    );
  }
}

結果

f:id:taillook:20190418030404j:plain

画像のように取得されたデバイスのバージョン情報が表示される。

内部実装

iOS側ではObj-cのsys/utsname.h内のsystemInfo.machineから情報を取得している。
AndroidではJavaのandroid.os.Build内のBuild.MODELから情報を取得している。

iOSのバージョン情報について

iOSの端末には一般名と内部名が存在する。
私のiPhone8では内部名は10,1となる。
各デバイスの内部名は
www.theiphonewiki.com
等のサイトで確認できる。