Ketika membuat sebuah aplikasi Flutter kadang perlu juga kita mengetahui informasi dari native platform misal untuk mengetahui beberapa informasi tentang versi build sekarang dan package name.

Misal jika Anda ingin implementasi cek versi terbaru aplikasi Anda yang digunakan oleh user, sudah pasti Anda perlu cek terlebih dahulu versi aplikasi yang digunakan user sekarang itu berapa, dan aplikasi terbaru itu berapa.

Untuk implementasi ambil data package name dan version dari Flutter kita tidak perlu manual intregrasikan per item plaform misal dalam kasus ini Android dan IOS. Sekarang pada https://pub.dev telah menyediakan library untuk mengetahui informasi app dari native platform yang bernama package_info. Untuk mengetahui beberapa informasi mengenai packageinfo bisa lihat di offical documentasinya. Pada saat ini (ketika saya tulis artikel ini) library ini hanya support pada platform Android & IOS saja.

Fitur Package Info #

Ada beberapa fitur yang tersedia pada library ini yang dapat mempermudah Anda dalam pengerjaan. Berikut fitur-fiturnya:

1. Get App Name #

Fitur ini memungkinkan Anda panggil nama aplikasi/app pada native platform. Misal jika nama aplikasi Anda adalah My Portfolio, dimana ketika di Android biasanya ditaruh pada bagian Manifest.xml di label property. Dan pada IOS CFBundleDisplayName.

2. Get Package Name #

Fitur ini memungkinkan untuk ambil package name / App Id dari native plaform Android/IOS. Pada package name bisanya berbentuk seperti nama domain. Contoh sample package name: com.domain.app. Pada IOS disebut dengan bundleIdentifier.

3. Get Version Name #

Version name atau disebut juga nama versi, ini nilainya berbentuk String bukan int version name ini biasanya penamaannya dipisah dengan . Contoh: 2.1.5. Pada IOS disebut juga dengan CFBundleShortVersionString.

Pada flutter version name configurasi berada di file pubspec.yaml.

1
version: 1.2.0+1

Pada contoh tersebut yang nilainya: 1.2.0 itu adalah version name, Jadi jika Anda ingin mengubah version name tinggal ubah aja nilai tersebut. Dan nilai setelah version name dan tanda (+) itu adalah version code. Pada contoh tersebut version codenya nilainya 1.

4. Get Version Code #

Fitur ini memungkinkan Anda memanggil angka versi aplikasi Anda saat ini. Berbeda dengan version Name, version code ini sifatnya/tipe datanya berbentuk int/integer. Pada version code ini version code wajib / selalu bertambah jika Anda mengupdate ke Play Store maupun App Store. Contoh version code: 100. Pada IOS disebut dengan CFBundleVersion.

Setup #

Wajib perlu install/pasang library package_info ini, terlebih dahulu sebelum menggunakan fiturnya. Untuk install library pada pubspec.yaml tambahkan kode seperti ini:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
...
dependencies:
  flutter:
    sdk: flutter


  # The following adds the Cupertino Icons font to your application.
  # Use with the CupertinoIcons class for iOS style icons.
  cupertino_icons: ^1.0.0
  package_info: ">=0.4.3+2 <2.0.0"

Untuk version sesuaikan apa yang direkomendasikan oleh pemilik library tersebut, bisa cek di https://pub.dev/packages/package_info.

Pada saat menulis artikel ini versi library belum sampai ke versi 1.0.0, maka rekomendasi dari pemilik library menggunakan versi constraint seperti ini: package_info: '>=0.4.3+2 <2.0.0'

Penggunaan dan Implementasi #

Untuk implementasi import terlebih dahulu library package_info pada file dart yang Anda gunakan untuk ambil data dari native. Berikut contohnya:

1
import 'package:package_info/package_info.dart';

Dan untuk ambil data perlu panggil class PackageInfo terlebih dahulu, dan implementasikan ke user interface.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
void _init() async {
    final _packageInfo = await PackageInfo.fromPlatform();

    setState(() {
      _appName = _packageInfo.appName; // Ambil Data Nama Aplikasi

      _versionName = _packageInfo.version; // Ambil Data Nama Versi

      _versionCode = _packageInfo.buildNumber; // Ambil Data Kode Versi

      _packageName = _packageInfo.packageName; // Ambil Data Package Name
    });
  }

Karena untuk ambil data ke native/plaform perlu method asynchronous maka perlu menggunakan async dan await.

Berikut contoh full kodenya:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
import 'package:flutter/material.dart';
import 'package:package_info/package_info.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

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

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  String _appName;
  String _versionName;
  String _versionCode;
  String _packageName;

  @override
  void initState() {
    _init();
    super.initState();
  }

  void _init() async {
    final _packageInfo = await PackageInfo.fromPlatform();

    setState(() {
      _appName = _packageInfo.appName; // Ambil Data Nama Aplikasi

      _versionName = _packageInfo.version; // Ambil Data Nama Versi

      _versionCode = _packageInfo.buildNumber; // Ambil Data Kode Versi

      _packageName = _packageInfo.packageName; // Ambil Data Package Name
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Column(
        children: [
          _buildItemTile('App Name', _appName),
          Divider(),
          _buildItemTile('Version Name', _versionName),
          Divider(),
          _buildItemTile('Version Code', _versionCode),
          Divider(),
          _buildItemTile('Package Name', _packageName),
          Divider(),
        ],
      ),
    );
  }

  Widget _buildItemTile(String key, String value) {
    return ListTile(
      title: Row(
        children: [
          Expanded(child: Text('$key : ')),
          Text(value ?? ''),
        ],
      ),
    );
  }
}

Result: #

Flutter Package Info

Untuk info detail lagi mengenai implementasinya bisa Anda lihat repo saya untuk contoh implementasinya di:

Github

Jika terdapat kesalahan penulisan, typo, atau kurang sesuai dalam penulisan, bantu Saya untuk Edit on Github.


Wisnu G. Saputra avatar

Mobile Tech Enthusiast | Software Engineer | Blogger. Penggemar Teknologi di bidang Computer Science.

Support Me
Comment: