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

Doo*_*ave 10 state webview flutter

嘿,我正在尝试创建一个屏幕,该屏幕显示带有底部应用栏的 web 视图。所以你加载了 webview,当点击底部应用栏中的一个项目时,另一个网站应该加载到同一个 webview 中......

除了我最初解析的之外,我不知道如何打开另一个网站。我尝试使用 «setState» 更新 url,但它只更新了应用栏标题,而 webview 仍然显示原始网站

这是我当前的代码:

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,              
        ),
      ),          
    ],
  ),
);
}
}
Run Code Online (Sandbox Code Playgroud)

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

如果有人可以帮助我吗?

在此先感谢 Doobie

小智 24

所以我遇到了类似的情况,除了当我从下拉菜单中选择一个项目时,我想要一个新的 url 加载到我的 webview 中。我是如何做到这一点的,即创建一个 WebViewController 实例

WebViewController controller;
Run Code Online (Sandbox Code Playgroud)

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

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

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

setState(() {                
            controller.loadUrl(newUrl_here);
Run Code Online (Sandbox Code Playgroud)

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