Proje: Okul B2B App · Hub: Okul B2B App — Incidents
LoadingScreen’de Takılı Kalma — Sessiz Hata Sorunu
Semptom
Kullanıcı şikayetleri: “Uygulama açılış ekranında takılıyor, hiçbir şey olmuyor, kapatıp açmam gerekiyor.”
Root Cause
CompanyContextveSchoolContexthatayıerrorstate’te tutuyordu ama kullanıcıya göstermiyordu — sadece log’a yazıyordu.- API error ya da
ConnectionErroroluncasetIsReady(false)yapılıyor, kullanıcıLoadingScreen’de sonsuz kalıyor. <Toast />yalnızcaisReady=trueolunca mount oluyordu (kökteAuthenticatedAppiçinde render ediliyordu). LoadingScreen’de Toast mount olmadığı içinToast.show()boşa gidecekti.
Çözüm
1. Toast’ı !isReady branch’ine de ekle
app/_layout.tsx:
if (!isReady) {
return (
<>
<LoadingScreen/>
<Toast config={toastConfig} topOffset={75}/>
</>
);
}2. Context error’larını toast olarak surface et
CompanyContext.tsx:
const lastErrorToastRef = useRef<string | null>(null);
useEffect(() => {
if (error && error !== lastErrorToastRef.current) {
lastErrorToastRef.current = error;
AlertNotification.showError('Bağlantı Sorunu', error, 5000);
} else if (!error) {
lastErrorToastRef.current = null;
}
}, [error]);SchoolContext.tsx’te aynı pattern (“Okul Bilgileri Yüklenemedi” başlığıyla).
3. Network listener ekle (yükleme sırasında internet gitmesi)
CompanyContext.tsx:
useEffect(() => {
if (isReady) return;
const unsubscribe = networkManager.addListener((state) => {
if (!state.isConnected || state.isInternetReachable === false) {
AlertNotification.showError('İnternet Bağlantısı Yok', 'Lütfen bağlantınızı kontrol edin', 5000);
}
});
return unsubscribe;
}, [isReady]);lastErrorToastRef ile aynı hatanın spam olması engellendi (ref, re-show için null’a dönebilir).
Sonuç
| Durum | Önce | Sonra |
|---|---|---|
| Company API 500 | LoadingScreen sonsuz | Toast: “Bağlantı Sorunu” |
| Wifi kesilirse | LoadingScreen sonsuz | Toast: “İnternet Bağlantısı Yok” |
| Okul API timeout | LoadingScreen sonsuz | Toast: “Okul Bilgileri Yüklenemedi” |
Sınırlama
Şu an sadece toast gösteriliyor, “Tekrar Dene” butonu yok. Kullanıcı toast kaybolunca hâlâ uygulamayı kapatıp açmak zorunda. İleride LoadingScreen’e retry butonu eklenebilir (hatta timeout sonrası otomatik retry).
Dosyalar
app/_layout.tsx—<Toast>LoadingScreen branch’inde decontexts/CompanyContext.tsx— error useEffect + network listenercontexts/SchoolContext.tsx— error useEffect
Related
- 2026-04-17-toast-modal-arkasinda-kaliyor — aynı session’da toast gösterim pattern’i
- alert-notification-toast — toast kullanım konvansiyonu