Flutter webview_flutter 4.0.7版本WebView初始化Cookie问题求助
针对webview_flutter 4.x版本移除initialCookies后的初始Cookie设置需求,你需要通过WebViewCookieManager在loadRequest之前完成Cookie配置,以下是适配后的完整实现:
核心步骤
- 实例化
WebViewCookieManager - 异步调用
setCookie配置目标域名的Cookie,必须在loadRequest执行前完成 - 确保Cookie的
domain与加载URL的域名完全匹配
修改后的完整代码
WebViewController初始化
// 初始化Cookie管理器 final cookieManager = WebViewCookieManager(); // 先配置控制器基础属性 _webViewController = WebViewController() ..setJavaScriptMode(JavaScriptMode.unrestricted) ..setNavigationDelegate(NavigationDelegate( onPageStarted: (url) { print("come here: $url"); }, onPageFinished: (url) async { final cookies = await _webViewController.runJavaScriptReturningResult( 'document.cookie', ); print("cookie: $cookies"); }, )); // 设置初始Cookie,await确保配置完成后再加载页面 await cookieManager.setCookie( WebViewCookie( name: 'your_cookie_key', value: 'your_cookie_value', domain: 'flutter.dev', // 严格匹配目标域名 path: '/', secure: true, // HTTPS链接建议开启 ), ); // 最后执行页面加载 await _webViewController.loadRequest( Uri.parse("https://flutter.dev/"), );
视图构建代码(无需改动)
return Stack( children: [ WebViewWidget( controller: widget.controller, ), ], );
关键注意事项
setCookie是异步方法,必须用await等待执行完成,否则Cookie可能来不及生效就启动页面加载- 若需设置多个Cookie,可多次调用
setCookie,全部完成后再执行loadRequest - Cookie的
domain必须与目标URL域名严格匹配(比如加载https://xxx.example.com,domain需设为xxx.example.com或.example.com)
内容的提问来源于stack exchange,提问作者Thang Phi
相关产品推荐
相关产品推荐

