Peringatan “Don't use 'BuildContext's across async gaps” artinya kamu menggunakan BuildContext
setelah await
, dan itu bisa berbahaya, karena:
-
Setelah
await
, widget kamu mungkin sudah tidak aktif lagi di UI (unmounted). -
Jika kamu pakai
context
setelah itu (misalnyaNavigator.of(context)
atauScaffoldMessenger.of(context)
), maka akan menyebabkan crash atau perilaku aneh.
Contoh kode yang salah
void someFunction() async {
await Future.delayed(Duration(seconds: 2));
Navigator.of(context).push(...); // INI MASALAHNYA
}
Jika user keluar dari halaman sebelum await
selesai, maka context
sudah tidak valid, dan kamu tidak boleh lagi mengaksesnya.
Solusi: Gunakan mounted
check
Kalau kamu di dalam class State<T>
, Flutter menyediakan properti mounted
untuk memastikan widget masih aktif di tree.
void someFunction() async {
await Future.delayed(Duration(seconds: 2));
if (!mounted) return; // CEK DULU
Navigator.of(context).push(...); // Aman
}
Tips tambahan
-
mounted
hanya tersedia di dalamState
class (bukan di StatelessWidget). -
Kalau kamu perlu pindahkan kode ke tempat lain (bukan State), hindari passing
context
ke async function, misalnya:
Future<void> login() async {
final response = await auth.signIn(...);
// Jangan langsung panggil context di sini
}
Sebaiknya pindahkan penggunaan
context
ke tempat yang bukan di dalam async method, atau lakukan pengecekanmounted
terlebih dahulu.
Kesimpulan
-
Masalah: Kamu memakai
context
setelahawait
, yang berisiko jika widget sudah tidak aktif (unmounted). -
Solusi: Tambahkan pengecekan
if (!mounted) return;
sebelum menggunakancontext
.
0 Comments:
Post a Comment