Flutter:webview_flutter 更新同一 webview 小部件中的 url

2024-04-17

嘿,我正在尝试创建一个屏幕,显示带有底部应用栏的网络视图。 因此,您加载网络视图,当点击底部应用栏中的某个项目时,其他网站应该加载到同一个网络视图中......

除了我最初解析的网站之外,我不知道如何打开另一个网站。 我尝试使用“setState”更新网址,但它只更新应用栏标题,并且网络视图仍然显示原始网站

这是我当前的代码:

class _WebviewContainer extends State<WebviewContainer> {
var url;
final key = UniqueKey();

_WebviewContainer(this.url); 

@override
Widget build(BuildContext context) {    
return Scaffold(
  appBar: AppBar(
    title: Text(url),
    actions: <Widget>[
      IconButton(
        icon: Icon(
          Icons.home,
          size: 40.0,
          color: Colors.white,
        ),
        onPressed: () => {
          //-> Here I set the new url but the webview always shows the origin website

          setState(() {
            url = 'https://stackoverflow.com/';
          })
        },
      )
    ],
  ),
  body: Column(
    children: <Widget>[
      Expanded(
        child: WebView(
          key: key,
          javascriptMode: JavascriptMode.unrestricted,
          initialUrl: url,              
        ),
      ),          
    ],
  ),
);
}
}

我从 YouTube 上的教程中获取了代码,创建者还指出,如果 url 的状态发生变化,webview 将重新加载,但不幸的是他没有展示如何做到这一点

如果有人可以帮助我吗?


所以我遇到了类似的情况,只是当我从下拉菜单中选择一个项目时,我希望在我的网络视图中加载一个新的网址。 我的做法是创建一个 WebViewController 实例

WebViewController controller;

然后在使用onWebViewCreated参数创建webview时设置这个控制器

child: WebView(
      key: _key,
      javascriptMode: JavascriptMode.unrestricted,
      initialUrl: url,
    onWebViewCreated: (WebViewController webViewController) {
    controller = webViewController;}

现在您已经设置了控制器,您可以在 setState() 中使用其 loadUrl 方法来更改显示的 Url

setState(() {                
            controller.loadUrl(newUrl_here);

我刚刚开始使用 Flutter,所以当然可能是更好的方法,但这对我有用

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Flutter:webview_flutter 更新同一 webview 小部件中的 url 的相关文章