You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter webview_flutter 4.0.7版本WebView初始化Cookie问题求助

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 22:22:51