fluttercommunity / fluttercommunity/flutter_webview_plugin
升级0.4.0后flutterWebViewPlugin.onStateChanged.listen设置回调不生效
- 主要言語
- 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