我创建了这个 WebviewScaffoldScreen 小部件来在我的应用程序中加载 url。每当重定向 url 时,我都需要将某些 id 和令牌添加到重定向的 url,以便服务器接受此请求并返回我需要的网页。
重定向网址:
“https://stack.com/messages/?id=1”
我想实现的网址,然后重新加载:
“https://stack.com/mesages/?id=1&user_id=333token=abc”
是否可以在导航请求中附加/编辑重定向 url?我尝试将 webview 控制器和 reloadUrl() 与附加的 url 一起使用,但它创建了一个循环,并且 webview 没有重定向到附加的 url。
我在 Flutter v2.8.0 中使用包 webview_flutter 3.0.0。非常感谢!
class WebviewScaffoldScreen extends StatefulWidget {
@required
final String url;
final String appBarTitle;
final bool? withJavascript;
const WebviewScaffoldScreen({
required this.url,
required this.appBarTitle,
this.withJavascript,
Key? key,
}) : super(key: key);
@override
State<WebviewScaffoldScreen> createState() => _WebviewScaffoldScreenState();
}
class _WebviewScaffoldScreenState extends
State<WebviewScaffoldScreen> {
late final WebViewController webViewController;
final userId = "333";
final token = "abc";
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text(widget.appBarTitle)),
body: WebView(
initialUrl: widget.url,
javascriptMode: JavascriptMode.unrestricted,
onWebViewCreated: (WebViewController webController) {
webViewController = webController;
},
navigationDelegate: (NavigationRequest request) {
if (request.url.contains('callback:close')) {
Navigator.of(context).pop();
return NavigationDecision.prevent;
}
if (request.url.contains('messages')) {
// I was tring to use webviewController to reload the url, but this creates a loop that kept reloading the webview :(
String updatedUrl = request.url + "&" + "user_id=$userId&" + "token=$token&";
webViewController.loadUrl(updatedUrl);
return NavigationDecision.prevent;
}
return NavigationDecision.navigate;
},
),
);
}
}