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 String? leftButtonText; final String? rightButtonText; final VoidCallback? leftTap; final VoidCallback? rightTap; InAppWebViewController? _inAppWebViewController; WebviewDialog( {super.key, required this.title, required this.webUrl, this.leftButtonText, this.rightButtonText, this.leftTap, this.rightTap}); @override Widget build(BuildContext context) { return AlertDialog( title: Center( child: Text(title), ), content: SizedBox( width: MediaQuery.of(context).size.height, height: MediaQuery.of(context).size.height, 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: (leftButtonText == null && rightButtonText == null) ? null : [ Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ TextButton( child: Text(leftButtonText!, style: const TextStyle(color: Color(0xFFFBB621))), onPressed: () { // 处理接受按钮的点击事件 leftTap?.call(); // 关闭对话框 }, ), TextButton( child: Text(rightButtonText!), onPressed: () { // 处理拒绝按钮的点击事件 rightTap?.call(); // 关闭对话框 }, ), ], ) ], ); } 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: WebUri.uri(Uri.parse(url))), initialUserScripts: UnmodifiableListView([]), initialSettings: InAppWebViewSettings( javaScriptEnabled: true, javaScriptCanOpenWindowsAutomatically: true, mediaPlaybackRequiresUserGesture: false, transparentBackground: true, useHybridComposition: true, allowsInlineMediaPlayback: true, useShouldOverrideUrlLoading: true, ), onWebViewCreated: (controller) { _inAppWebViewController = controller; }, ); } catch (error) { res = Text("加载失败:${error.toString()}"); debugPrint("WebViewController加载失败:${error.toString()}"); } return res; } }