fluttercommunity / fluttercommunity/flutter_webview_plugin

升级0.4.0后flutterWebViewPlugin.onStateChanged.listen设置回调不生效

オープン
#934 コメント 3 件 リアクション 0 件 担当者 0 名 GitHub で見る
主要言語
Java
スター
1.5k
フォーク
938
PR マージ指標
30日以内にマージされた PR はありません

説明

_onStateChanged =
_flutterWebViewPlugin.onStateChanged.listen(_webViewStateChanged);

void _webViewStateChanged(WebViewStateChanged event) {
switch (event.type) {
case WebViewState.startLoad:
_onPageStart(event.url);
break;
case WebViewState.finishLoad:
_onPageEnd(event.url);
break;
case WebViewState.shouldStart:
wtPrint("_webviewplugin eventurl : ${event.url}");
if (Platform.isAndroid) {
return;
}
String prefix = "https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb";
if (event.url.startsWith(prefix)) {
Uri uri = WTRouter().parseURLScheme(urlStr: event.url)!;
Map par = Map.from(uri.queryParameters);
if (par['redirect_url'] == null ||
(par['redirect_url']!.contains("h5.canyahn.cn") &&
!par['redirect_url']!.startsWith(GlobalField.scheme))) {
par['redirect_url'] = GlobalField.scheme +
"web?url=${WTEncryptUtil.urlEncode(par['redirect_url'])}";
String url = uri.replace(queryParameters: par).toString();
_flutterWebViewPlugin.stopLoading();
_flutterWebViewPlugin
.reloadUrl(url, headers: {"Referer": GlobalField.scheme});
}
return;
}
break;
case WebViewState.abortLoad:
wtPrint("_webviewplugin abortLoad : ${event.url}");
if (_isPageInApp(event.url)) {
_openPageInApp(event.url);
} else {
String url = event.url;
if (Platform.isIOS && url.contains("alipay://alipayclient/")) {
url = Uri.decodeFull(url);
List list = url.split("?");
String json = list.last;
Map map = jsonDecode(json);
map['fromAppUrlScheme'] = GlobalField.scheme;
json = jsonEncode(map);
list.last = Uri.encodeFull(json);
url = list.join("?");
WTRouter.openApp(schemeUrl: url);
} else {
routerOpenUrl(context: context, urlStr: event.url);
}
}
break;
}
}

コントリビューションガイド

このリポジトリのコントリビューションガイドは索引されていません

調査の方向性

まず、0.4.0 へのアップグレード後に報告された動作を再現し、issue に示されている onStateChanged.listen の登録と _webViewStateChanged コールバックに注目します。WebViewState イベントが発行され、受け渡されているかを追跡します。完了の条件は、コールバックが期待される WebView の状態変更に再び応答することです。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
dart
領域
mobile
issue の種類
バグ
難易度
3/5
見積もり時間
1〜2日
活発さ
停滞
明瞭さ
説明が足りない
初心者へのやさしさ
25/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。