webview_dialog.dart 4.06 KB
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: <Widget>[
        Row(
          mainAxisAlignment: MainAxisAlignment.spaceBetween,
          children: [
            TextButton(
              child: const Text('同意并继续',
                  style: TextStyle(color: Color(0xFFFBB621))),
              onPressed: () {
                // 处理接受按钮的点击事件
                leftTap(); // 关闭对话框
              },
            ),
            TextButton(
              child: const Text('不同意,退出应用'),
              onPressed: () {
                // 处理拒绝按钮的点击事件
                rightTap(); // 关闭对话框
              },
            ),
          ],
        )
      ],
    );
  }

  Future<Widget> 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<UserScript>([]),
          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;
  }
}