gpt4 book ai didi

ios - Flutter webview navigationDelegate 调用了两次

转载 作者:行者123 更新时间:2023-12-05 07:09:48 27 4
gpt4 key购买 nike

我正在尝试使用 Flutter Web View 下载包含特定 URL 模式的文件。这是有效的,但在这种情况下,浏览器被打开了两次,因为 navigationDelegate 被调用了两次。 NavigationRequest 对象相同,除了 isForMainFrame 属性。第一次是假的,第二次是真的。

CupertinoPageScaffold(
navigationBar: CupertinoNavigationBar(middle: Text(_appTitle)),
child: Container(
child: SafeArea(
child: IndexedStack(
index: _stackToView,
children: <Widget>[
WebView(
key: _key,
javascriptMode: JavascriptMode.unrestricted,
initialUrl: this._connectionString,
onPageStarted: (value) => setState(() {
if (shouldChangeStack) {
_stackToView = 1;
} else {
_stackToView = 0;
}

}),
onPageFinished: (value) => setState(() {
_stackToView = 0;
}),
navigationDelegate: (NavigationRequest request) async {
print(request.url);
if (request.url.contains("download")) {
setState(() {
shouldChangeStack = false;
});
if (await canLaunch(request.url)) {
await launch(request.url);
}
return NavigationDecision.prevent;
} else {
setState(() {
shouldChangeStack = true;
});
return NavigationDecision.navigate;
}
},
),
Container(
child: Center(
child: CircularProgressIndicator(),
),
)
],
),
top: true,
),
),
);

最佳答案

委托(delegate)方法之所以被调用两次,是因为调用了setState()。这会导致整个 Widget build() 被重建。正如前面评论中提到的,此问题的解决方法是在启动页面之前设置检查器并定义是否需要打开页面。

关于ios - Flutter webview navigationDelegate 调用了两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61451144/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com