flutter 패키지 정보 가져오기

오늘은 flutter로 패키지의 정보를 가져올 수 있는 package_info 패키지에 대하여 알아보려 합니다.

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

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

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

pubspec.yaml 작성하기

dependencies:
  flutter:
    sdk: flutter
  package_info:

flutter 패키지에 대한 정보를 가져오기 위해서 package_info 패키지를 pubspec.yaml에 작성해줍니다.

main.dart 앱 코드 작성하기

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

앱에 머티리얼 위젯을 추가할 수 있는 material 패키지와 패키지의 정보를 추가할 수 있게 해주는 package_info 패키지를 가져옵니다.

void main() => runApp(MyApp());

앱을 MyApp으로 구동합니다.

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

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

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

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

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

class _MyHomePageState extends State<MyHomePage> {
  var _packageInfo = PackageInfo();

PackageInfo 객체를 생성해줍니다.

  @override
  initState() {
    super.initState();
    getPackageInfo();
  }

initState를 오버라이딩하여 앱이 구동했을 때에 getPackageInfo 함수를 수행하게 합니다.

  getPackageInfo() async {
    var packageInfo = await PackageInfo.fromPlatform();

getPackageInfo 함수는 PackageInfo에서 fromPlatform로 인해 패키지의 정보들을 받아오게 됩니다.

    setState(() {
      _packageInfo = packageInfo;
    });
  }

packageInfo가 변수에 담기면서 setState에 의해서 화면이 다시 그려지게 됩니다.

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Column(
        children: <Widget>[
          Text(_packageInfo.appName ?? 'Not set'),
          Text(_packageInfo.packageName ?? 'Not set'),
          Text(_packageInfo.version ?? 'Not set'),
          Text(_packageInfo.buildNumber ?? 'Not set'),
        ],
      ),
    );
  }
}

화면에 앱 이름, 패키지 이름, 버전, 빌드번호가 출력되며 존재하지 않을 경우에는 ‘Not set’으로 표기됩니다.

async mode

PackageInfo.fromPlatform().then((PackageInfo packageInfo) {
  String appName = packageInfo.appName;
  String packageName = packageInfo.packageName;
  String version = packageInfo.version;
  String buildNumber = packageInfo.buildNumber;
});

async 모드에서는 await PackageInfo.fromPlatform() 대신 위와 같이 작성할 수도 있습니다.

Written on March 14, 2019