如何在Flutter中首次创建cookie

kxkpmulp  于 2023-10-22  发布在  Flutter
关注(0)|答案(2)|浏览(134)

我想创建一个cookie存储后的请求,但我面临的challlenges对什么理解
我尝试创建一个cookie类和一个句柄cookie方法,但创建似乎不工作,它停止了我的登录工作

ivqmmu1c

ivqmmu1c1#

为了将任何数据保存到设备的本地存储,您可以使用Flutter中的几种解决方案。

特别是对于您的问题,我推荐flutter_secure_storage。它是存储简单和敏感数据的好选择。

xbp102n0

xbp102n02#

要访问cookie,您需要cookie_jardio_cookie_manager包,要使用cookie,您需要将cookie存储在fileStorage中,而要存储,您需要documentsDirectory,因此您需要path provider包。

import 'dart:io';
import 'package:dio/dio.dart';
import 'package:cookie_jar/cookie_jar.dart';
import 'package:dio_cookie_manager/dio_cookie_manager.dart';
import 'package:path_provider/path_provider.dart';

class WebService {    
  WebService();

  final dio = Dio();
  var cookieJar;

  Future<bool> setCookieJar() async {
    if (this.cookieJar == null) {
      try {
        Directory appDocDir = await getApplicationDocumentsDirectory();
        String appDocPath = appDocDir.path;
        var cookieJar = PersistCookieJar(
            ignoreExpires: true,
            storage: FileStorage(appDocPath + "/.cookies/"));

        print('it is cookie    setCookieJar  ' + cookieJar.toString());
        dio.interceptors.add(CookieManager(cookieJar));

        return true;
      } catch (e) {
        Exception("exception on cookie");
      }
    }
    return true;
  }
}

添加这些包后,您可以使用WebService类将cookie注入到网络包,如dio
您可以在WebService中编写rest方法(get、post、....),如下所示。

import 'dart:io';
import 'package:dio/dio.dart';
import 'package:cookie_jar/cookie_jar.dart';
import 'package:dio_cookie_manager/dio_cookie_manager.dart';
import 'package:path_provider/path_provider.dart';

class WebService {    
  WebService();
  final dio = Dio();
  var cookieJar;

  Future<bool> setCookieJar() async {
    if (this.cookieJar == null) {
      try {
        Directory appDocDir = await getApplicationDocumentsDirectory();
        String appDocPath = appDocDir.path;
        var cookieJar = PersistCookieJar(
            ignoreExpires: true,
            storage: FileStorage(appDocPath + "/.cookies/"));

        print('it is cookie    setCookieJar  ' + cookieJar.toString());
        dio.interceptors.add(CookieManager(cookieJar));

        return true;
      } catch (e) {
        Exception("exception on cookie");
      }
    }
    return true;
  }

    Future<ServerResponse> getFunction() async {
    Response response;
    try {
      await setCookieJar();
      response = await dio.get(url);
    } catch (errorMessage) {
      print(errorMessage);
    }
    return ServerResponse(response);
  }

}
在使用WebService类之前,必须按如下方式注入它。我使用provider包注入。

void main() async {
  return runApp(MultiProvider(providers: [Provider.value(value:WebService ())], child: const MyApp()));
}

使用:

var response = await Provider<WebService>.of(context,listen:false).getFunction();

相关问题