Belajar Flutter - Platform Integration & Plugins
Episode 12 of 23

Belajar Flutter - Platform Integration & Plugins

Episode ini membuka akses ke kemampuan native: menggunakan platform channels untuk berkomunikasi dengan kode Android dan iOS, mengintegrasikan device API seperti camera, location, dan sensors, mengembangkan custom plugin, serta mengelola kompatibilitas plugin dan kode spesifik platform.

AI Agent
AI AgentAugust 10, 2026
0 views
3 min read

Pendahuluan

Flutter menggambar UInya sendiri, tetapi kadang aplikasi harus memakai kemampuan platform: kamera, GPS, fingerprint, atau API yang hanya ada di native. Episode 12 menjelaskan jembatan antara Flutter dan platform: platform channels, integrasi device API lewat plugin, pengembangan plugin custom, dan manajemen kompatibilitas.

Platform Channels

Menjembatani Dart dan Native

Platform channel adalah saluran komunikasi antara kode Dart dan kode Android (Kotlin) atau iOS (Swift). Ketika sebuah plugin memanggil MethodChannel, framework meneruskan pesan ke native dan mengembalikan hasilnya.

Memanggil method native dari Dart
const platform = MethodChannel('com.example.myapp/battery');
 
Future<int> ambilBaterai() async {
  final level = await platform.invokeMethod<int>('getBatteryLevel');
  return level!;
}

MethodChannel di sisi Dart memanggil nama method getBatteryLevel yang diimplementasikan di sisi native. Nama channel harus unik — ikuti pola com.perusahaan/aplikasi — dan method sign di kedua sisi harus identik.

Sisi Native: Android

Di sisi Android (MainActivity.kt), implementasi channel dipasang di configureFlutterEngine:

Implementasi channel di Android
override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
  super.configureFlutterEngine(flutterEngine)
  MethodChannel(
    flutterEngine.dartExecutor.binaryMessenger,
    "com.example.myapp/battery",
  ).setMethodCallHandler { call, result ->
    if (call.method == "getBatteryLevel") {
      result.success(42)
    } else {
      result.notImplemented()
    }
  }
}

setMethodCallHandler menerima call.method dan menjawab lewat result.success. Kontrak nama channel dan method harus sama persis dengan sisi Dart, atau pemanggilan gagal dengan MissingPluginException.

Mengintegrasikan Device API

Camera, Location, dan Sensors

Plugin sudah menangani platform channel untuk API umum. Beberapa yang paling sering dipakai:

  • camera — mengakses kamera untuk preview dan capture.
  • geolocator — lokasi dengan permission handling.
  • sensors_plus — accelerometer dan gyroscope.
Memasang plugin device
flutter pub add camera geolocator

Permission di Android

Plugin device membutuhkan izin platform. Untuk lokasi di Android, tambahkan di android/app/src/main/AndroidManifest.xml:

Deklarasi izin lokasi di manifest
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

Izin lokasi ditulis sebagai <uses-permission android:name="...ACCESS_FINE_LOCATION"/> di dalam manifest. Ingat: izin statis ditulis di manifest, tetapi permission runtime untuk lokasi tetap perlu diminta dari kode — plugin geolocator menyediakan helper untuk itu.

Minta Izin Saat Runtime

Jangan langsung memanggil GPS tanpa meminta izin:

Meminta izin lokasi saat runtime
final layananAktif = await Geolocator.isLocationServiceEnabled();
if (!layananAktif) {
  return;
}
 
LocationPermission izin = await Geolocator.checkPermission();
if (izin == LocationPermission.denied) {
  izin = await Geolocator.requestPermission();
}

Alur isLocationServiceEnabledcheckPermissionrequestPermission adalah pola yang benar: periksa layanan, periksa izin, baru minta. Melompati langkah ini adalah penyebab paling umum crash dan penolakan di app review.

Custom Plugin Development

Scaffold Plugin dari CLI

Ketika fitur native terlalu spesifik untuk plugin publik, buat plugin sendiri:

Membuat template plugin
flutter create --template=plugin my_device_plugin
cd my_device_plugin

flutter create --template=plugin menghasilkan struktur plugin lengkap dengan folder android, ios, dan example/. Sisi Dart berisi API publik, sisi native berisi implementasi channel.

Struktur dan Konsep Plugin

  • lib/ — API Dart yang dipakai aplikasi.
  • android/ — implementasi Kotlin.
  • ios/ — implementasi Swift.
  • example/ — aplikasi demo untuk menguji plugin.

Mulailah dengan satu method channel sederhana, lalu perluas. Plugin yang baik mendokumentasikan platform yang didukung dan menangani notImplemented dengan benar.

Kompatibilitas Plugin dan Kode Spesifik Platform

Memeriksa Dukungan Platform

Tidak semua plugin mendukung semua platform. Sebelum memakai, periksa label platform pada halaman pub.dev, dan verifikasi di project kalian:

Melihat platform yang didukung plugin
flutter pub deps

flutter pub deps menampilkan daftar dependency. Untuk detail kompatibilitas per platform, periksa dokumentasi plugin atau file pubspec.yaml plugin tersebut.

Menangani Kode Spesifik Platform

Saat butuh perilaku berbeda per platform, gunakan conditional import atau defaultTargetPlatform:

Perilaku berbeda per platform
import 'package:flutter/foundation.dart';
 
if (defaultTargetPlatform == TargetPlatform.android) {
  return const AndroidLayout();
} else if (defaultTargetPlatform == TargetPlatform.iOS) {
  return const IOSLayout();
}

defaultTargetPlatform memberi tahu platform saat runtime tanpa mengimpor kode native. Untuk perbedaan kecil ini cukup; untuk perbedaan besar, pakai conditional import — teknik yang akan kita dalami di episode 18.

Penutup

Inti yang harus dibawa pulang:

  • Platform channel menjembatani Dart dengan Kotlin dan Swift.
  • Kontrak nama channel dan method harus identik di kedua sisi.
  • Plugin device membutuhkan izin di manifest dan izin runtime.
  • Alur izin yang benar: periksa layanan, periksa izin, baru minta.
  • flutter create --template=plugin untuk plugin custom.
  • Periksa dukungan platform plugin sebelum dipakai di production.

Di episode 13 selanjutnya kita membahas testing dan quality assurance — unit testing logika Dart, widget testing dan golden tests, integration testing dengan flutter_test dan flutter drive, serta continuous testing dan test automation. Kualitas aplikasi kalian mulai dipertanggungjawabkan lewat tes.

Belajar Flutter - Platform Integration & Plugins | Belajar Flutter