| 
									
										
										
										
											2025-07-14 18:01:16 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | import 'package:flutter/material.dart'; | 
					
						
							|  |  |  | import 'package:qhd_prevention/pages/my_appbar.dart'; | 
					
						
							|  |  |  | import 'package:webview_flutter/webview_flutter.dart'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class WebViewPage extends StatefulWidget { | 
					
						
							|  |  |  |   final String url; | 
					
						
							|  |  |  |   final String name; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   const WebViewPage({Key? key, required this.url, required this.name,}) : super(key: key); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   @override | 
					
						
							|  |  |  |   State<WebViewPage> createState() => _WebViewPageState(name); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class _WebViewPageState extends State<WebViewPage> { | 
					
						
							|  |  |  |   late final WebViewController _controller; | 
					
						
							|  |  |  |   final String name; | 
					
						
							|  |  |  |   ValueNotifier<double> loadingProgress = ValueNotifier(0.0); | 
					
						
							|  |  |  |   ValueNotifier<bool> isLoading = ValueNotifier(true); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   _WebViewPageState(this.name); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   @override | 
					
						
							|  |  |  |   void initState() { | 
					
						
							|  |  |  |     super.initState(); | 
					
						
							|  |  |  |     _controller = WebViewController() | 
					
						
							|  |  |  |       ..setJavaScriptMode(JavaScriptMode.unrestricted) | 
					
						
							|  |  |  |       ..setNavigationDelegate(NavigationDelegate( | 
					
						
							|  |  |  |         onProgress: (progress) { | 
					
						
							|  |  |  |           loadingProgress.value = progress / 100; | 
					
						
							|  |  |  |           if (progress == 100) isLoading.value = false; | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         onPageStarted: (url) => isLoading.value = true, | 
					
						
							|  |  |  |         onPageFinished: (url) => isLoading.value = false, | 
					
						
							|  |  |  |       )) | 
					
						
							|  |  |  |       ..loadRequest(Uri.parse(widget.url)); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   @override | 
					
						
							|  |  |  |   Widget build(BuildContext context) { | 
					
						
							|  |  |  |     return Column( | 
					
						
							|  |  |  |       children: [ | 
					
						
							| 
									
										
										
										
											2025-09-06 16:52:08 +08:00
										 |  |  |         MyAppbar(title: name,onBackPressed: () async { | 
					
						
							|  |  |  |           if (await _controller.canGoBack()) { | 
					
						
							|  |  |  |           _controller.goBack(); | 
					
						
							|  |  |  |           } else{ | 
					
						
							|  |  |  |             Navigator.of(context).pop(); | 
					
						
							|  |  |  |           } | 
					
						
							|  |  |  |         },), | 
					
						
							| 
									
										
										
										
											2025-07-14 18:01:16 +08:00
										 |  |  |         Expanded( child: WebViewWidget(controller: _controller),), | 
					
						
							|  |  |  |         // ValueListenableBuilder<bool>(
 | 
					
						
							|  |  |  |         //   valueListenable: isLoading,
 | 
					
						
							|  |  |  |         //   builder: (context, loading, _) {
 | 
					
						
							|  |  |  |         //     return loading
 | 
					
						
							|  |  |  |         //         ? const Center(child: CircularProgressIndicator())
 | 
					
						
							|  |  |  |         //         : const SizedBox();
 | 
					
						
							|  |  |  |         //   },
 | 
					
						
							|  |  |  |         // ),
 | 
					
						
							|  |  |  |       ], | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } |