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
contextsetelah 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
-
mountedhanya tersedia di dalamStateclass (bukan di StatelessWidget). -
Kalau kamu perlu pindahkan kode ke tempat lain (bukan State), hindari passing
contextke async function, misalnya:
Future<void> login() async {
final response = await auth.signIn(...);
// Jangan langsung panggil context di sini
}
Sebaiknya pindahkan penggunaan
contextke tempat yang bukan di dalam async method, atau lakukan pengecekanmountedterlebih dahulu.
Kesimpulan
-
Masalah: Kamu memakai
contextsetelahawait, yang berisiko jika widget sudah tidak aktif (unmounted). -
Solusi: Tambahkan pengecekan
if (!mounted) return;sebelum menggunakancontext.
0 Comments:
Posting Komentar