From 9db76e99db52b4f6d795932fe70555ad96fb1120 Mon Sep 17 00:00:00 2001 From: guozhigq Date: Sat, 19 Aug 2023 11:33:39 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E7=99=BB=E5=BD=95=E6=88=90=E5=8A=9F?= =?UTF-8?q?=E8=B7=B3=E8=BD=AC=20mod:=20=E9=80=80=E5=87=BA=E7=99=BB?= =?UTF-8?q?=E5=BD=95=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/http/interceptor.dart | 4 ++-- lib/http/video.dart | 3 ++- lib/pages/setting/controller.dart | 38 ++++++++++++++++++++++++++----- lib/pages/webview/controller.dart | 9 ++++---- lib/utils/cookie.dart | 3 +++ 5 files changed, 43 insertions(+), 14 deletions(-) diff --git a/lib/http/interceptor.dart b/lib/http/interceptor.dart index cc553410..2521d02d 100644 --- a/lib/http/interceptor.dart +++ b/lib/http/interceptor.dart @@ -17,7 +17,7 @@ class ApiInterceptor extends Interceptor { handler.next(options); } - Box setting = GStrorage.setting; + Box user = GStrorage.user; @override void onResponse(Response response, ResponseInterceptorHandler handler) { @@ -29,7 +29,7 @@ class ApiInterceptor extends Interceptor { final uri = Uri.parse(locations.first); final accessKey = uri.queryParameters['access_key']; final mid = uri.queryParameters['mid']; - setting.put(UserBoxKey.accessKey, {'mid': mid, 'value': accessKey}); + user.put(UserBoxKey.accessKey, {'mid': mid, 'value': accessKey}); } } } diff --git a/lib/http/video.dart b/lib/http/video.dart index 1191841e..18048377 100644 --- a/lib/http/video.dart +++ b/lib/http/video.dart @@ -18,6 +18,7 @@ import 'package:pilipala/utils/storage.dart'; /// 返回{'status': bool, 'data': List} /// view层根据 status 判断渲染逻辑 class VideoHttp { + static Box user = GStrorage.user; static Box setting = GStrorage.setting; // 首页推荐视频 @@ -61,7 +62,7 @@ class VideoHttp { 'pull': freshIdx == 0 ? 'true' : 'false', 'appkey': Constants.appKey, 'access_key': - setting.get(UserBoxKey.accessKey, defaultValue: {})['value'] ?? '' + user.get(UserBoxKey.accessKey, defaultValue: {})['value'] ?? '' }, ); if (res.data['code'] == 0) { diff --git a/lib/pages/setting/controller.dart b/lib/pages/setting/controller.dart index 732ec68c..a0682776 100644 --- a/lib/pages/setting/controller.dart +++ b/lib/pages/setting/controller.dart @@ -1,3 +1,5 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:get/get.dart'; import 'package:hive/hive.dart'; import 'package:pilipala/http/init.dart'; @@ -30,12 +32,36 @@ class SettingController extends GetxController { } loginOut() async { - await Request.cookieManager.cookieJar.deleteAll(); - await Get.find().resetUserInfo(); - userLogin.value = user.get(UserBoxKey.userLogin) ?? false; - userInfoCache.put('userInfoCache', null); - HomeController homeCtr = Get.find(); - homeCtr.updateLoginStatus(false); + SmartDialog.show( + useSystem: true, + animationType: SmartAnimationType.centerFade_otherSlide, + builder: (BuildContext context) { + return AlertDialog( + title: const Text('提示'), + content: const Text('确认要退出登录吗'), + actions: [ + TextButton( + onPressed: () => SmartDialog.dismiss(), + child: const Text('点错了'), + ), + TextButton( + onPressed: () async { + await Request.cookieManager.cookieJar.deleteAll(); + await Get.find().resetUserInfo(); + userLogin.value = user.get(UserBoxKey.userLogin) ?? false; + userInfoCache.put('userInfoCache', null); + HomeController homeCtr = Get.find(); + homeCtr.updateLoginStatus(false); + user.put(UserBoxKey.accessKey, {'mid': -1, 'value': ''}); + Request.dio.options.headers['cookie'] = ''; + SmartDialog.dismiss().then((value) => Get.back()); + }, + child: const Text('确认'), + ) + ], + ); + }, + ); } // 开启关闭震动反馈 diff --git a/lib/pages/webview/controller.dart b/lib/pages/webview/controller.dart index 35f574e5..3bffe779 100644 --- a/lib/pages/webview/controller.dart +++ b/lib/pages/webview/controller.dart @@ -4,7 +4,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:get/get.dart'; import 'package:hive/hive.dart'; -import 'package:pilipala/http/constants.dart'; import 'package:pilipala/http/init.dart'; import 'package:pilipala/http/user.dart'; import 'package:pilipala/pages/dynamics/index.dart'; @@ -13,7 +12,6 @@ import 'package:pilipala/pages/mine/index.dart'; import 'package:pilipala/pages/rcmd/controller.dart'; import 'package:pilipala/utils/cookie.dart'; import 'package:pilipala/utils/storage.dart'; -import 'package:webview_cookie_manager/webview_cookie_manager.dart'; import 'package:webview_flutter/webview_flutter.dart'; class WebviewController extends GetxController { @@ -31,17 +29,17 @@ class WebviewController extends GetxController { type = Get.parameters['type']!; pageTitle = Get.parameters['pageTitle']!; - webviewInit(); if (type == 'login') { controller.clearCache(); controller.clearLocalStorage(); WebViewCookieManager().clearCookies(); - controller.setUserAgent(Request().headerUa('mob')); } + webviewInit(); } webviewInit() { controller + ..setUserAgent(Request().headerUa('mob')) ..setJavaScriptMode(JavaScriptMode.unrestricted) ..setNavigationDelegate( NavigationDelegate( @@ -52,8 +50,9 @@ class WebviewController extends GetxController { }, onPageStarted: (String url) {}, // 加载完成 - onPageFinished: (String url) async { + onUrlChange: (UrlChange urlChange) async { loadShow.value = false; + String url = urlChange.url ?? ''; if (type == 'login' && (url.startsWith( 'https://passport.bilibili.com/web/sso/exchange_cookie') || diff --git a/lib/utils/cookie.dart b/lib/utils/cookie.dart index eed98900..5d4d9cbd 100644 --- a/lib/utils/cookie.dart +++ b/lib/utils/cookie.dart @@ -7,6 +7,9 @@ class SetCookie { var cookies = await WebviewCookieManager().getCookies(HttpString.baseUrl); await Request.cookieManager.cookieJar .saveFromResponse(Uri.parse(HttpString.baseUrl), cookies); + var cookieString = + cookies.map((cookie) => '${cookie.name}=${cookie.value}').join('; '); + Request.dio.options.headers['cookie'] = cookieString; cookies = await WebviewCookieManager().getCookies(HttpString.baseApiUrl); await Request.cookieManager.cookieJar