fluttercommunity / flutter_webview_plugin

Community WebView Plugin - Allows Flutter to communicate with a native WebView.
https://pub.dev/packages/flutter_webview_plugin
Other
1.48k stars 933 forks source link

The monitoring function is triggered twice under the same Url #862

Open jianxing-xu opened 3 years ago

jianxing-xu commented 3 years ago

System info

Issue occurs on: Android Plugin version: 0.3.11 Flutter doctor output: [✓] Flutter (Channel stable, 1.22.5, on Mac OS X 10.15.3 19D76 darwin-x64, locale zh-Hans-CN)

[✓] Android toolchain - develop for Android devices (Android SDK version 29.0.3) [✓] Xcode - develop for iOS and macOS (Xcode 11.5) [✓] Android Studio (version 3.5) [✓] IntelliJ IDEA Ultimate Edition (version 2019.3) [✓] VS Code (version 1.52.1) [✓] Connected device (1 available)

• No issues found!

paste it here...

Steps to Reproduce

  1. ...
    
    @override
    void initState() {
    super.initState();
    webviewPlugin.onUrlChanged.listen((url) {
      // TODO:相同的地址会执行两次,bug
      if (mounted) {
        print("url changed: $url");
        isLoading = false;
        setState(() {});
        if (url != null && url.contains("code=")) {
          String code = url.split("?")[1].split("=")[1].split("&")[0];
          Map<String, dynamic> params = Map();
          params["client_id"] = AppApiConfig.CLIENT_ID;
          params["client_secret"] = AppApiConfig.SECRET_KEY;
          params["grant_type"] = "authorization_code";
          params["redirect_uri"] = AppApiConfig.CALLBACK;
          params["code"] = '$code';
          params["dataType"] = "json";
          NetUtils.post(AppUrls.OAUTH2_TOKEN, params).then((data) async {
            Map<String, dynamic> map = json.decode(data);
            // TODO: 处理bug错误
            if (map["error"] == "400") {
              print("请求出错");
              return;
            }
            if (map != null && map.isNotEmpty) {
              await DataUtils.setLoginInfo(map: map);
              Navigator.pop(context, AppMsg.SUCCESS);
            }
          });
        }
      }
    });
    }
2. ...
3. ...

## Logs

<!--
      Run your application with `flutter run --verbose` and attach all the
      log output below between the lines with the backticks. If there is an
      exception, please see if the error message includes enough information
      to explain how to solve the issue.
-->
![image](https://user-images.githubusercontent.com/46376536/102970272-2a94ac80-4532-11eb-85c0-08f30b5cd70e.png)

2 I/flutter (12981): url changed: http://blog.jackson615.top/?code=7rX7S6&state=


<!--
     Run `flutter analyze` and attach any output of that command below.
     If there are any analysis errors, try resolving them before filing this issue.
-->

<!-- Finally, paste the output of running `flutter doctor -v` here. -->