cashumit/lib/screens/webview_screen.dart

95 lines
2.4 KiB
Dart

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<WebViewScreen> createState() => _WebViewScreenState();
}
class _WebViewScreenState extends State<WebViewScreen> {
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<Color>(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),
),
],
),
);
}
}