flutter/lib/components/web_page.dart

58 lines
1.5 KiB
Dart
Raw Normal View History

2025-09-29 02:34:41 +08:00
import 'package:flutter/material.dart';
import 'package:webview_flutter/webview_flutter.dart';
class WebPage extends StatefulWidget {
final String url;
final String title;
const WebPage({super.key, required this.url, required this.title});
@override
State<WebPage> createState() => _WebPageState();
}
class _WebPageState extends State<WebPage> {
late final WebViewController _controller;
double _progress = 0.0;
@override
void initState() {
super.initState();
_controller = WebViewController()
..setJavaScriptMode(JavaScriptMode.unrestricted)
..setNavigationDelegate(
NavigationDelegate(
onProgress: (progress) {
setState(() {
_progress = progress / 100.0;
});
},
),
)
..loadRequest(Uri.parse(widget.url));
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
leading: IconButton(
icon: const Icon(Icons.arrow_back),
onPressed: () async {
if (await _controller.canGoBack()) {
_controller.goBack();
} else {
Navigator.of(context).pop();
}
},
),
bottom: PreferredSize(
preferredSize: const Size.fromHeight(2.0),
child: _progress < 1.0 ? LinearProgressIndicator(value: _progress) : const SizedBox.shrink(),
),
),
body: WebViewWidget(controller: _controller),
);
}
}