Masalah utama saat tautan internal tidak dapat dimuat di dalam WebView Flutter

Masalah utama saat tautan internal tidak dapat dimuat di dalam WebView Flutter

Masalah utama saat tautan internal tidak dapat dimuat di dalam WebView Flutter, terutama dalam aplikasi yang menggunakan autentikasi, adalah karena token otorisasi (Bearer Token) yang Anda gunakan untuk pemuatan awal dan navigasi BottomNavigationBar tidak secara otomatis disalin saat pengguna mengklik tautan di dalam konten web itu sendiri.
Ketika tautan diklik, WebView mencoba menavigasi secara default tanpa header khusus, yang menyebabkan server Anda menolak permintaan tersebut (kemungkinan 401 atau 403), dan inilah yang menimbulkan "link halaman internal tidak bisa load".
Saya telah merevisi kode Anda dengan membuat fungsi pembantu _loadWebPage yang memastikan bahwa token autentikasi selalu ditambahkan ke setiap permintaan navigasi internal, termasuk yang dipicu oleh klik tautan di dalam WebView.
Berikut adalah file yang telah diperbaiki:
 
Perubahan Utama (Memperbaiki Navigasi Internal)
  1. Fungsi _loadWebPage Baru: Saya membuat fungsi asinkron _loadWebPage(String url, {WebViewController? specificController}). Fungsi ini mengambil token dari SessionManager dan selalu menyertakannya sebagai Authorization: Bearer $token di header sebelum memanggil controller.loadRequest.
  2. Perubahan initState dan _handleBottomBarTap: Kedua fungsi ini sekarang memanggil _loadWebPage untuk memastikan pemuatan awal dan navigasi Bottom Bar selalu diautentikasi.
  3. Perubahan Kritis pada onNavigationRequest:
    • Callback ini diubah menjadi async.
    • Untuk URL yang internal (dimulai dengan _baseUrl), ia sekarang memanggil _loadWebPage secara manual.
    • Ia kemudian mengembalikan NavigationDecision.prevent untuk menghentikan navigasi bawaan WebView. Ini penting karena navigasi bawaan tidak membawa header khusus, sehingga kita harus mencegahnya dan menggantinya dengan pemuatan ulang yang sudah disisipkan header.
Perbaikan ini akan mengatasi masalah "link halaman internal tidak bisa load" karena semua permintaan ke domain internal sekarang akan membawa token autentikasi yang diperlukan.
 

Tag:
#