import 'package:flutter/material.dart'; import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:webview_flutter/webview_flutter.dart'; class WebviewDialog extends StatelessWidget { final String title; final String webUrl; final VoidCallback leftTap; final VoidCallback rightTap; const WebviewDialog( {super.key, required this.title, required this.webUrl, required this.leftTap, required this.rightTap}); @override Widget build(BuildContext context) { return AlertDialog( title: Center( child: Text(title), ), content: SizedBox( width: MediaQuery.of(context).size.height - 100, height: MediaQuery.of(context).size.width - 100, child: FutureBuilder( // 异步方法 future: buildWebViewController(webUrl), builder: (context, snapshot) { // 等待状态显示的widget if (snapshot.connectionState == ConnectionState.waiting) { return const Center( child: CircularProgressIndicator(), ); // 错误时显示的widget } else if (snapshot.hasError) { return const Text('Error'); } else { return snapshot.data ?? const Text('No data'); } })), actions: [ Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ TextButton( child: const Text('同意并继续', style: TextStyle(color: Color(0xFFFBB621))), onPressed: () { // 处理接受按钮的点击事件 leftTap(); // 关闭对话框 }, ), TextButton( child: const Text('不同意,退出应用'), onPressed: () { // 处理拒绝按钮的点击事件 rightTap(); // 关闭对话框 }, ), ], ) ], ); } Future buildWebViewController(String url) async { Widget res; try { WebViewController controller = WebViewController() ..setJavaScriptMode(JavaScriptMode.unrestricted) ..setBackgroundColor(const Color(0x00000000)) ..setNavigationDelegate( NavigationDelegate( onProgress: (int progress) { // Update loading bar. }, onPageStarted: (String url) { EasyLoading.show(); }, onPageFinished: (String url) { EasyLoading.dismiss(); }, onWebResourceError: (WebResourceError error) { EasyLoading.showError(error.description); }, onNavigationRequest: (NavigationRequest request) { return NavigationDecision.navigate; }, ), ); await controller.loadRequest(Uri.parse(url)); res = WebViewWidget(controller: controller); } catch (error) { res = Text("加载失败:${error.toString()}"); debugPrint("WebViewController加载失败:${error.toString()}"); } return res; } }