Flutter共享偏好存储Cookie插件shared_prefs_cookie_store的使用

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

Flutter共享偏好存储Cookie插件shared_prefs_cookie_store的使用

简介

shared_prefs_cookie_store 是一个用于在 Flutter 应用中管理 HTTP Cookies 的插件。该插件通过使用 SharedPreferences 来作为存储介质,从而确保 Cookie 的持久性。

特点

  • ** gameplay** 简单易用的 API
  • ** diskette** 使用 SharedPreferences 进行持久化存储
  • ** hourglass** 支持异步初始化
  • ** globe_with_meridians** 无缝集成到 Dio 网络库中

安装

要将此插件添加到你的项目中,请执行以下命令:

使用 Dart:

$ dart pub add shared_prefs_cookie_store

使用 Flutter:

$ flutter pub add shared_prefs_cookie_store

这将在你的项目的 pubspec.yaml 文件中添加如下一行(并运行隐式的 dart pub get):

dependencies:
  shared_prefs_cookie_store: ^latest_version

你也可以通过编辑器支持的 dart pub getflutter pub get 命令来安装它。请查阅编辑器文档了解更多信息。

导入

现在你可以在 Dart 代码中导入该包:

import 'package:shared_prefs_cookie_store/shared_prefs_cookie_store.dart';

示例代码

首先,你需要创建一个 SharedPrefsCookieStore 实例,并初始化它。然后你可以添加、获取或删除 Cookie。

import 'package:flutter/material.dart';
import 'package:shared_prefs_cookie_store/shared_prefs_cookie_store.dart';

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

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

class _MyAppState extends State<MyApp> {
  SharedPrefsCookieStore _cookieStore;

  [@override](/user/override)
  void initState() {
    super.initState();
    // 初始化 SharedPrefsCookieStore
    _cookieStore = SharedPrefsCookieStore();
  }

  Future<void> _addCookie() async {
    // 添加一个 Cookie
    await _cookieStore.addCookie('example.com', 'session', '1234567890');
  }

  Future<void> _getCookies() async {
    // 获取指定域名的所有 Cookie
    List<String> cookies = await _cookieStore.getCookies('example.com');
    print(cookies); // 输出: ['session=1234567890']
  }

  Future<void> _deleteCookie() async {
    // 删除指定域名的特定 Cookie
    await _cookieStore.deleteCookie('example.com', 'session');
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('shared_prefs_cookie_store 示例'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              ElevatedButton(
                onPressed: () async {
                  await _addCookie();
                  print('Cookie 已添加');
                },
                child: Text('添加 Cookie'),
              ),
              ElevatedButton(
                onPressed: () async {
                  await _getCookies();
                  print('Cookie 已获取');
                },
                child: Text('获取 Cookie'),
              ),
              ElevatedButton(
                onPressed: () async {
                  await _deleteCookie();
                  print('Cookie 已删除');
                },
                child: Text('删除 Cookie'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

更多关于Flutter共享偏好存储Cookie插件shared_prefs_cookie_store的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter共享偏好存储Cookie插件shared_prefs_cookie_store的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何在Flutter应用中使用shared_prefs_cookie_store插件来存储和获取Cookie的示例代码。这个插件允许你将Cookie数据存储在SharedPreferences中,这对于需要在多个请求中保持会话状态的应用非常有用。

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

dependencies:
  flutter:
    sdk: flutter
  shared_preferences: ^2.0.15  # 确保版本与插件兼容
  shared_prefs_cookie_store: ^1.0.0  # 使用最新版本
  http: ^0.13.3  # 用于发送HTTP请求

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

接下来,在你的Dart代码中,你可以这样使用shared_prefs_cookie_store

import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:shared_prefs_cookie_store/shared_prefs_cookie_store.dart';
import 'package:http/http.dart' as http;
import 'package:cookie_jar/cookie_jar.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: CookieExample(),
    );
  }
}

class CookieExample extends StatefulWidget {
  @override
  _CookieExampleState createState() => _CookieExampleState();
}

class _CookieExampleState extends State<CookieExample> {
  late SharedPreferences _prefs;
  late PersistableCookieJar _cookieJar;

  @override
  void initState() {
    super.initState();
    initSharedPreferencesAndCookieJar();
  }

  Future<void> initSharedPreferencesAndCookieJar() async {
    _prefs = await SharedPreferences.getInstance();
    _cookieJar = PersistableCookieJar(
      store: SharedPreferencesCookieStore(_prefs),
    );

    // Example: Making an HTTP request and storing cookies
    makeRequest();
  }

  Future<void> makeRequest() async {
    var client = http.Client();
    var url = Uri.parse('https://example.com/login'); // 替换为实际的登录URL

    // Send request with no cookies first
    var response = await client.post(url, headers: {
      'Content-Type': 'application/json',
    }, body: jsonEncode({
      'username': 'yourUsername',
      'password': 'yourPassword',
    }));

    // Assuming the server sets cookies in the Set-Cookie header
    if (response.statusCode == 200) {
      // Extract and save cookies from the response
      _cookieJar.saveFromResponse(url, response);
      print('Cookies saved: $_cookieJar');
    } else {
      print('Login failed: ${response.statusCode}');
    }

    // Close the client
    client.close();

    // Example: Making another request with saved cookies
    makeAnotherRequest();
  }

  Future<void> makeAnotherRequest() async {
    var client = http.Client();
    var url = Uri.parse('https://example.com/profile'); // 替换为实际的受保护资源URL

    // Create a CookieManager to attach cookies to the request
    var cookieManager = CookieManager(_cookieJar);
    var request = http.Request('GET', url);
    cookieManager.addCookies(request);

    var response = await client.send(request);
    var responseBody = await response.stream.bytesToString();

    if (response.statusCode == 200) {
      print('Profile data: $responseBody');
    } else {
      print('Failed to fetch profile: ${response.statusCode}');
    }

    // Close the client
    client.close();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Cookie Example'),
      ),
      body: Center(
        child: Text('Check console for cookie handling output.'),
      ),
    );
  }
}

在这个示例中,我们完成了以下步骤:

  1. 初始化SharedPreferencesPersistableCookieJar
  2. 使用http.Client发送一个POST请求到登录端点,并假设服务器在响应头中设置了Cookie。
  3. 使用_cookieJar.saveFromResponse方法保存从响应中提取的Cookie。
  4. 使用另一个GET请求到受保护的资源端点,并通过CookieManager附加之前保存的Cookie。

注意:

  • 确保替换示例中的URL、用户名和密码为你的实际值。
  • 这个示例假设服务器在登录成功后通过Set-Cookie响应头返回Cookie。
  • 实际应用中,你可能需要处理更多的错误情况和边界条件。

这样,你就可以在Flutter应用中使用shared_prefs_cookie_store来管理Cookie了。

回到顶部