1

我创建了这个 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;
        },
      ),
    );
  }
}
4

0 回答 0