Flutter Webview:级联调用是否会干扰NavigationDelegate的设置?
结论:不会出现NavigationDelegate在loadRequest执行前未完成设置的情况,原因如下:
- 级联运算符
..的执行逻辑是严格按顺序调用对象方法,controller..setJavascriptMode()..setNavigationDelegate()..loadRequest()会先调用setJavascriptMode(),完成方法调用(指方法触发执行,而非Future完成)后,再调用setNavigationDelegate(),最后才执行loadRequest()。 - 在webview_flutter插件的实现中,
setNavigationDelegate这类配置方法是同步完成内部赋值的,返回的Future会立即resolve。也就是说,当setNavigationDelegate()方法调用结束时,NavigationDelegate已经绑定到控制器上,后续loadRequest发起的导航请求会被该代理正常拦截处理。 - 若担心极端场景(比如插件版本更新后内部出现异步逻辑),可以放弃级联,改用
await显式等待每个Future完成:
await controller.setJavascriptMode(JavascriptMode.unrestricted); await controller.setNavigationDelegate(NavigationDelegate( onNavigationRequest: (request) { // 自定义拦截逻辑 return NavigationDecision.navigate; }, )); await controller.loadRequest(Uri.parse('https://example.com'));
这种写法能确保前一项配置完全生效后,再执行下一个操作,彻底消除顺序问题的隐患。
内容的提问来源于stack exchange,提问作者daxicks
相关产品推荐
相关产品推荐

