Flutter WebView Cookie管理插件webview_cookie_jar的使用

发布于 1周前 作者 gougou168 来自 Flutter

Flutter WebView Cookie管理插件webview_cookie_jar的使用

webview_cookie_jar

通过原生WebView管理Cookie。任何Cookie操作都会影响WebView,并且WebView中的任何Cookie操作也会影响这个Cookie。这将使应用中的Cookie与WebView中的Cookie完全一致。

支持平台:iOS、Android。

使用方法

WebViewCookieJar.cookieJar 获取一个 CookieJar。有关用法,请参阅 cookie_jar

与dio结合使用

import 'package:dio/dio.dart';
import 'package:webview_cookie_jar/webview_cookie_jar.dart';

void main() async {
  final dio = Dio();
  dio.interceptors.add(CookieManager(WebViewCookieJar.cookieJar));
}

注意:delete(Uri uri, [bool withDomainSharedCookie = false]) 方法未实现,调用此方法将不会执行任何操作,请改用 deleteCookie 方法。


完整示例代码

以下是一个完整的示例代码,展示了如何使用 webview_cookie_jar 管理WebView中的Cookie。

import 'dart:io';

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:webview_cookie_jar/webview_cookie_jar.dart';
import 'package:webview_flutter/webview_flutter.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  late final WebViewController controller;

  [@override](/user/override)
  void initState() {
    super.initState();
    // 初始化WebView控制器
    controller = WebViewController()
      ..setJavaScriptMode(JavaScriptMode.unrestricted) // 允许运行JavaScript
      ..loadRequest(Uri.parse('https://flutter.dev')); // 加载目标URL
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('WebView Cookie管理示例'),
        ),
        body: Builder(
          builder: (context) {
            return Center(
              child: Column(
                crossAxisAlignment: CrossAxisAlignment.center,
                mainAxisAlignment: MainAxisAlignment.center,
                children: [
                  // 显示WebView
                  Expanded(
                    child: WebViewWidget(
                      controller: controller,
                    ),
                  ),
                  // 获取Dart端的Cookie
                  CupertinoButton(
                    child: const Text("获取Dart端的Cookie"),
                    onPressed: () async {
                      final cookies = await WebViewCookieJar.cookieJar.loadForRequest(Uri.parse("https://flutter.dev"));
                      if (!context.mounted) {
                        return;
                      }
                      // 弹出对话框展示Cookie
                      showGeneralDialog(
                        context: context,
                        pageBuilder: (context, animation, secondaryAnimation) {
                          return Center(
                            child: Material(
                              color: Colors.transparent,
                              child: Container(
                                color: Colors.white,
                                child: Column(
                                  mainAxisSize: MainAxisSize.min,
                                  children: [
                                    const Text("Cookies"),
                                    ...cookies.map((e) => Text(e.toString())), // 展示每个Cookie
                                    TextButton(
                                      onPressed: () {
                                        Navigator.of(context).pop(); // 关闭弹窗
                                      },
                                      child: const Text("关闭"),
                                    ),
                                  ],
                                ),
                              ),
                            ),
                          );
                        },
                      );
                    },
                  ),
                  // 获取WebView端的Cookie
                  CupertinoButton(
                    child: const Text("获取WebView端的Cookie"),
                    onPressed: () {
                      controller.runJavaScriptReturningResult("document.cookie").then((value) {
                        if (context.mounted == false) {
                          return;
                        }
                        // 弹出对话框展示WebView中的Cookie
                        showGeneralDialog(
                          context: context,
                          pageBuilder: (context, animation, secondaryAnimation) {
                            return Center(
                              child: Material(
                                color: Colors.transparent,
                                child: Container(
                                  color: Colors.white,
                                  child: Column(
                                    mainAxisSize: MainAxisSize.min,
                                    children: [
                                      const Text("Cookies"),
                                      Text(value.toString().split(";").join("\n"), textAlign: TextAlign.center), // 按分号分割并换行展示
                                      TextButton(
                                        onPressed: () {
                                          Navigator.of(context).pop(); // 关闭弹窗
                                        },
                                        child: const Text("关闭"),
                                      ),
                                    ],
                                  ),
                                ),
                              ),
                            );
                          },
                        );
                      });
                    },
                  ),
                  // 设置Dart端的Cookie
                  CupertinoButton(
                    child: const Text("设置Dart端的Cookie"),
                    onPressed: () async {
                      final cookie = Cookie("cookie1", "value1"); // 创建一个新的Cookie
                      cookie.domain = "flutter.dev"; // 设置Cookie的域名
                      cookie.path = "/"; // 设置Cookie的路径
                      cookie.httpOnly = false; // 设置Cookie是否为HTTP-only
                      cookie.secure = true; // 设置Cookie是否仅通过HTTPS传输
                      await WebViewCookieJar.cookieJar.saveFromResponse(Uri.parse("https://flutter.dev"), [cookie]); // 将Cookie保存到WebView中
                    },
                  ),
                  // 设置WebView端的Cookie
                  CupertinoButton(
                    child: const Text("设置WebView端的Cookie"),
                    onPressed: () {
                      controller.runJavaScript("document.cookie = 'cookie2=value2; domain=flutter.dev; path=/; secure';"); // 直接在WebView中设置Cookie
                    },
                  ),
                ],
              ),
            );
          },
        ),
      ),
    );
  }
}

更多关于Flutter WebView Cookie管理插件webview_cookie_jar的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter WebView Cookie管理插件webview_cookie_jar的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


webview_cookie_jar 是一个用于在 Flutter 中管理 WebView 的 Cookie 的插件。它允许你在 WebView 中设置、获取和删除 Cookie,以便更好地控制 WebView 的会话状态。以下是如何使用 webview_cookie_jar 插件的基本步骤。

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 webview_cookie_jar 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  webview_cookie_jar: ^1.0.0  # 请使用最新版本

然后运行 flutter pub get 来安装依赖。

2. 导入包

在你的 Dart 文件中导入 webview_cookie_jar 包:

import 'package:webview_cookie_jar/webview_cookie_jar.dart';

3. 初始化 CookieJar

在使用 webview_cookie_jar 之前,你需要初始化一个 CookieJar 实例:

final cookieJar = CookieJar();

4. 设置 Cookie

你可以使用 setCookie 方法来设置 Cookie。例如:

await cookieJar.setCookie(
  Uri.parse('https://example.com'),
  'sessionid=123456789; Path=/; HttpOnly',
);

5. 获取 Cookie

你可以使用 getCookies 方法来获取指定 URL 的 Cookie:

final cookies = await cookieJar.getCookies(Uri.parse('https://example.com'));
print(cookies);  // 输出 Cookie 列表

6. 删除 Cookie

你可以使用 deleteCookie 方法来删除指定 URL 的 Cookie:

await cookieJar.deleteCookie(
  Uri.parse('https://example.com'),
  'sessionid',
);

7. 清除所有 Cookie

你可以使用 clear 方法来清除所有 Cookie:

await cookieJar.clear();

8. 与 WebView 结合使用

你可以将 webview_cookie_jarwebview_flutter 插件结合使用,以便在 WebView 中管理 Cookie。例如:

import 'package:flutter/material.dart';
import 'package:webview_flutter/webview_flutter.dart';
import 'package:webview_cookie_jar/webview_cookie_jar.dart';

class MyWebView extends StatefulWidget {
  [@override](/user/override)
  _MyWebViewState createState() => _MyWebViewState();
}

class _MyWebViewState extends State<MyWebView> {
  late WebViewController _controller;
  final cookieJar = CookieJar();

  [@override](/user/override)
  void initState() {
    super.initState();
    _initializeWebView();
  }

  Future<void> _initializeWebView() async {
    // 设置 Cookie
    await cookieJar.setCookie(
      Uri.parse('https://example.com'),
      'sessionid=123456789; Path=/; HttpOnly',
    );

    // 获取 Cookie
    final cookies = await cookieJar.getCookies(Uri.parse('https://example.com'));
    print(cookies);

    // 初始化 WebView
    _controller = WebViewController()
      ..setJavaScriptMode(JavaScriptMode.unrestricted)
      ..setNavigationDelegate(
        NavigationDelegate(
          onPageStarted: (String url) async {
            // 在页面加载时设置 Cookie
            await cookieJar.setCookie(
              Uri.parse(url),
              'sessionid=987654321; Path=/; HttpOnly',
            );
          },
        ),
      )
      ..loadRequest(Uri.parse('https://example.com'));
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('WebView with Cookie Management'),
      ),
      body: WebViewWidget(controller: _controller),
    );
  }
}
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!