import 'package:flutter/material.dart'; import 'package:webview_flutter/webview_flutter.dart'; class WebViewScreen extends StatefulWidget { final String url; final String title; const WebViewScreen({ Key? key, required this.url, required this.title, }) : super(key: key); @override State createState() => _WebViewScreenState(); } class _WebViewScreenState extends State { late final WebViewController _controller; bool _isLoading = true; @override void initState() { super.initState(); _controller = WebViewController() ..setJavaScriptMode(JavaScriptMode.unrestricted) ..setNavigationDelegate( NavigationDelegate( onPageStarted: (String url) { setState(() { _isLoading = true; }); }, onPageFinished: (String url) { setState(() { _isLoading = false; }); }, onWebResourceError: (WebResourceError error) { if (mounted) { ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text('Error loading page: ${error.description}'), ), ); } }, ), ) ..loadRequest(Uri.parse(widget.url)); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text(widget.title), backgroundColor: Colors.blue, foregroundColor: Colors.white, actions: [ if (_isLoading) const Padding( padding: EdgeInsets.all(16.0), child: CircularProgressIndicator( valueColor: AlwaysStoppedAnimation(Colors.white), ), ), ], ), body: Column( children: [ // Menampilkan alamat URL yang diakses Container( width: double.infinity, color: Colors.grey[200], padding: const EdgeInsets.all(8.0), child: Text( widget.url, style: const TextStyle( fontSize: 12, color: Colors.black54, ), maxLines: 2, overflow: TextOverflow.ellipsis, ), ), // WebView Expanded( child: WebViewWidget(controller: _controller), ), ], ), ); } }