Aplikasi Flutter Anda Lambat di Android? Mungkin Ini Penyebabnya
Aplikasi Flutter Anda terasa lambat di Android? Jangan abaikan masalah ini! Saya pun mengalaminya—awalnya mulus, tapi tiba-tiba performa menurun tanpa alasan yang jelas. Setelah riset mendalam, akhirnya saya menemukan penyebab tersembunyi yang mungkin juga memengaruhi aplikasi Anda.

Awal Mula Masalah
Saat pertama kali menggunakan Flutter Secure Storage, semuanya terasa baik-baik saja. Di iPhone, penyimpanan data terasa cepat dan responsif. Tapi, begitu diuji di Android, ada sesuatu yang janggal. Waktu loading yang harusnya instan malah terasa lambat—bahkan mencapai beberapa detik hanya untuk membaca satu data!
Jujur, awalnya aku mengira masalah ini berasal dari kodeku sendiri. Mungkin ada kesalahan implementasi? Mungkin ada overhead yang tidak perlu? Atau, mungkin memang begitu cara kerja Flutter Secure Storage di Android? Aku pun mulai menyelidiki.
Mengapa Android Lambat?
Setelah menelusuri dokumentasi dan beberapa diskusi komunitas, aku menemukan penyebabnya:
- Flutter Secure Storage di Android menggunakan EncryptedSharedPreferences (jika diaktifkan), yang berarti setiap kali membaca atau menulis data, sistem harus melakukan dekripsi.
- Keamanan diutamakan, bukan performa—artinya ada proses tambahan yang menyebabkan keterlambatan.
- Masalah dengan FlutterSecureStorage versi lama, yang bisa menyebabkan kecepatan baca/tulis menjadi tidak optimal.
Aku pun mulai mencari solusi! 💡
Eksperimen dengan Berbagai Pendekatan
1. Menggunakan Singleton untuk Mengurangi Overhead
Setiap kali aku memanggil Secure Storage, ia membuat instance baru. Aku sadar, ini tidak efisien! Jadi, aku membuat pendekatan Singleton, agar hanya ada satu instance yang digunakan sepanjang aplikasi berjalan.
class SecureStorageHelper {
static final SecureStorageHelper _instance = SecureStorageHelper._internal();
static late FlutterSecureStorage _storage;
factory SecureStorageHelper() {
return _instance;
}
SecureStorageHelper._internal();
Future<void> init() async {
_storage = const FlutterSecureStorage(
aOptions: AndroidOptions(
encryptedSharedPreferences: true,
),
);
}
Future<String?> read(String key) async {
return await _storage.read(key: key);
}
}
Sekarang, aku cukup menginisialisasi sekali di awal, lalu menggunakannya tanpa harus membuat instance baru setiap kali membaca data.
2. Menyimpan Data yang Sering Digunakan di Memory
Aku berpikir: "Kenapa harus membaca dari storage setiap kali butuh data?" Jadi, aku menggunakan cache di memory untuk menyimpan data yang sering dipakai.
class SecureStorageHelper {
static final SecureStorageHelper _instance = SecureStorageHelper._internal();
static late FlutterSecureStorage _storage;
static Map<String, String?> _cache = {};
factory SecureStorageHelper() {
return _instance;
}
SecureStorageHelper._internal();
Future<void> init() async {
_storage = const FlutterSecureStorage(
aOptions: AndroidOptions(
encryptedSharedPreferences: true,
),
);
}
Future<void> write(String key, String value) async {
await _storage.write(key: key, value: value);
_cache[key] = value;
}
Future<String?> read(String key) async {
if (_cache.containsKey(key)) {
return _cache[key];
}
String? value = await _storage.read(key: key);
_cache[key] = value;
return value;
}
}
Dengan cara ini, setiap data yang sudah pernah dibaca akan disimpan di memory, sehingga jika dibutuhkan lagi, kita tidak perlu membaca ulang dari storage. 🚀
3. Menggunakan Plugin Alternatif
Aku juga mempertimbangkan opsi lain seperti SharedPreferences atau Hive, yang lebih cepat karena tidak melakukan enkripsi seperti Secure Storage. Namun, karena aku tetap butuh keamanan ekstra, aku memilih untuk tetap menggunakan Flutter Secure Storage dengan optimasi di atas.
Hasil Akhir: Performa Meningkat Signifikan!
Setelah menerapkan semua optimasi ini, hasilnya cukup memuaskan:
✅ Waktu baca/tulis di Android jadi lebih cepat—hampir setara dengan di iPhone!
✅ Tidak ada lagi lag saat aplikasi pertama kali dijalankan.
✅ Data tetap aman karena masih menggunakan enkripsi.
Bagi yang mengalami masalah serupa, aku sangat menyarankan untuk:
- Gunakan Singleton agar tidak membuat instance baru setiap kali.
- Cache data yang sering digunakan di memory.
- Jika memungkinkan, gunakan plugin lain yang lebih cepat jika tidak membutuhkan enkripsi.
Flutter memang powerful, tapi optimasi tetap perlu! Semoga pengalaman ini bisa membantu kalian yang mengalami masalah serupa. 🔥
Comments ()