我想创建一个cookie存储后的请求,但我面临的challlenges对什么理解我尝试创建一个cookie类和一个句柄cookie方法,但创建似乎不工作,它停止了我的登录工作
ivqmmu1c1#
为了将任何数据保存到设备的本地存储,您可以使用Flutter中的几种解决方案。
特别是对于您的问题,我推荐flutter_secure_storage。它是存储简单和敏感数据的好选择。
xbp102n02#
要访问cookie,您需要cookie_jar和dio_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();
2条答案
按热度按时间ivqmmu1c1#
为了将任何数据保存到设备的本地存储,您可以使用Flutter中的几种解决方案。
特别是对于您的问题,我推荐flutter_secure_storage。它是存储简单和敏感数据的好选择。
xbp102n02#
要访问cookie,您需要cookie_jar和dio_cookie_manager包,要使用cookie,您需要将cookie存储在fileStorage中,而要存储,您需要documentsDirectory,因此您需要path provider包。
添加这些包后,您可以使用WebService类将cookie注入到网络包,如dio。
您可以在WebService中编写rest方法(get、post、....),如下所示。
}
在使用WebService类之前,必须按如下方式注入它。我使用provider包注入。
使用: