Blame view

lib/common/widgets/webview_dialog.dart 4.22 KB
4b858f67   吴启风   feat:webview库替换
1
  import 'dart:collection';
2a9895f6   吴启风   feat:首次启动隐私协议弹窗
2
  import 'package:flutter/material.dart';
4b858f67   吴启风   feat:webview库替换
3
  import 'package:flutter_inappwebview/flutter_inappwebview.dart';
2a9895f6   吴启风   feat:首次启动隐私协议弹窗
4
5
6
7
  
  class WebviewDialog extends StatelessWidget {
    final String title;
    final String webUrl;
09fb1af9   吴启风   feat:flutter_inap...
8
9
10
11
12
    final String? leftButtonText;
    final String? rightButtonText;
    final VoidCallback? leftTap;
    final VoidCallback? rightTap;
    InAppWebViewController? _inAppWebViewController;
2a9895f6   吴启风   feat:首次启动隐私协议弹窗
13
  
09fb1af9   吴启风   feat:flutter_inap...
14
    WebviewDialog(
2a9895f6   吴启风   feat:首次启动隐私协议弹窗
15
16
17
        {super.key,
        required this.title,
        required this.webUrl,
09fb1af9   吴启风   feat:flutter_inap...
18
19
20
21
        this.leftButtonText,
        this.rightButtonText,
        this.leftTap,
        this.rightTap});
2a9895f6   吴启风   feat:首次启动隐私协议弹窗
22
23
24
25
26
27
28
29
  
    @override
    Widget build(BuildContext context) {
      return AlertDialog(
        title: Center(
          child: Text(title),
        ),
        content: SizedBox(
09fb1af9   吴启风   feat:flutter_inap...
30
31
            width: MediaQuery.of(context).size.height,
            height: MediaQuery.of(context).size.height,
2a9895f6   吴启风   feat:首次启动隐私协议弹窗
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
            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');
                  }
                })),
09fb1af9   吴启风   feat:flutter_inap...
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
        actions: (leftButtonText == null && rightButtonText == null)
            ? null
            : <Widget>[
                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(); // 关闭对话框
                      },
                    ),
                  ],
                )
              ],
2a9895f6   吴启风   feat:首次启动隐私协议弹窗
72
73
74
75
76
77
      );
    }
  
    Future<Widget> buildWebViewController(String url) async {
      Widget res;
      try {
4b858f67   吴启风   feat:webview库替换
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
        // 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(
09fb1af9   吴启风   feat:flutter_inap...
104
105
106
107
108
109
110
111
112
113
114
115
116
117
          initialUrlRequest: URLRequest(url: WebUri.uri(Uri.parse(url))),
          initialUserScripts: UnmodifiableListView<UserScript>([]),
          initialSettings: InAppWebViewSettings(
              javaScriptEnabled: true,
              javaScriptCanOpenWindowsAutomatically: true,
              mediaPlaybackRequiresUserGesture: false,
              transparentBackground: true,
              useHybridComposition: true,
              allowsInlineMediaPlayback: true,
              useShouldOverrideUrlLoading: true,
          ),
          onWebViewCreated: (controller) {
            _inAppWebViewController = controller;
          },
4b858f67   吴启风   feat:webview库替换
118
        );
2a9895f6   吴启风   feat:首次启动隐私协议弹窗
119
120
121
122
123
124
125
      } catch (error) {
        res = Text("加载失败:${error.toString()}");
        debugPrint("WebViewController加载失败:${error.toString()}");
      }
      return res;
    }
  }