import 'dart:collection'; import 'package:flutter/material.dart'; import 'package:flutter_inappwebview/flutter_inappwebview.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); res = InAppWebView( initialUrlRequest: URLRequest(url: Uri.parse(url)), initialUserScripts: UnmodifiableListView([]), initialOptions: InAppWebViewGroupOptions( crossPlatform: InAppWebViewOptions( useShouldOverrideUrlLoading: true, // 是否需要跳转 mediaPlaybackRequiresUserGesture: false, // 设置为true,方式H5的音频自动播放 transparentBackground: true ), android: AndroidInAppWebViewOptions( useHybridComposition: true, ), ios: IOSInAppWebViewOptions( allowsInlineMediaPlayback: true, ), ), onWebViewCreated: (controller) { // _inAppWebViewController = controller; }, ); } catch (error) { res = Text("加载失败:${error.toString()}"); debugPrint("WebViewController加载失败:${error.toString()}"); } return res; } }