diff --git a/lib/http/init.dart b/lib/http/init.dart index 08be15144..6b339f455 100644 --- a/lib/http/init.dart +++ b/lib/http/init.dart @@ -95,10 +95,6 @@ class Request { //Http请求头. headers: { // 'cookie': '', - "env": 'prod', - "app-key": 'android', - "x-bili-aurora-eid": 'UlMFQVcABlAH', - "x-bili-aurora-zone": 'sh001', 'referer': 'https://www.bilibili.com/', }, ); @@ -106,17 +102,22 @@ class Request { Box user = GStrorage.user; if (user.get(UserBoxKey.userMid) != null) { options.headers['x-bili-mid'] = user.get(UserBoxKey.userMid).toString(); + options.headers['env'] = 'prod'; + options.headers['app-key'] = 'android64'; + options.headers['x-bili-aurora-eid'] = 'UlMFQVcABlAH'; + options.headers['x-bili-aurora-zone'] = 'sh001'; } dio.options = options; //添加拦截器 - dio.interceptors - ..add(ApiInterceptor()) - // 日志拦截器 输出请求、响应内容 - ..add(LogInterceptor( - request: false, - requestHeader: false, - responseHeader: false, - )); + dio.interceptors.add(ApiInterceptor()); + + // 日志拦截器 输出请求、响应内容 + // dio.interceptors.add(LogInterceptor( + // request: false, + // requestHeader: false, + // responseHeader: false, + // )); + dio.transformer = BackgroundTransformer(); dio.options.validateStatus = (status) { return status! >= 200 && status < 300 || status == 304 || status == 302; @@ -161,7 +162,7 @@ class Request { * post请求 */ post(url, {data, queryParameters, options, cancelToken, extra}) async { - print('post-data: $data'); + // print('post-data: $data'); Response response; try { response = await dio.post( @@ -171,7 +172,7 @@ class Request { options: options, cancelToken: cancelToken, ); - print('post success: ${response.data}'); + // print('post success: ${response.data}'); return response; } on DioException catch (e) { print('post error: $e'); diff --git a/lib/pages/bangumi/controller.dart b/lib/pages/bangumi/controller.dart index dde68075b..603f6136b 100644 --- a/lib/pages/bangumi/controller.dart +++ b/lib/pages/bangumi/controller.dart @@ -18,8 +18,9 @@ class BangumiController extends GetxController { @override void onInit() { super.onInit(); - mid = int.parse( - Get.parameters['mid'] ?? user.get(UserBoxKey.userMid).toString()); + if (user.get(UserBoxKey.userMid) != null) { + mid = int.parse(user.get(UserBoxKey.userMid).toString()); + } userLogin.value = user.get(UserBoxKey.userLogin) != null; } diff --git a/lib/pages/dynamics/view.dart b/lib/pages/dynamics/view.dart index df2935deb..5bfa08f6d 100644 --- a/lib/pages/dynamics/view.dart +++ b/lib/pages/dynamics/view.dart @@ -177,50 +177,6 @@ class _DynamicsPageState extends State icon: const Icon(Icons.history, size: 21), ), ), - Positioned( - left: 10, - top: 0, - bottom: 0, - child: Align( - alignment: Alignment.center, - child: user.get(UserBoxKey.userLogin) ?? false - ? GestureDetector( - onTap: () { - feedBack(); - showModalBottomSheet( - context: context, - builder: (_) => const SizedBox( - height: 450, - child: MinePage(), - ), - clipBehavior: Clip.hardEdge, - isScrollControlled: true, - ); - }, - child: NetworkImgLayer( - type: 'avatar', - width: 30, - height: 30, - src: user.get(UserBoxKey.userFace), - ), - ) - : IconButton( - onPressed: () { - feedBack(); - showModalBottomSheet( - context: context, - builder: (_) => const SizedBox( - height: 450, - child: MinePage(), - ), - clipBehavior: Clip.hardEdge, - isScrollControlled: true, - ); - }, - icon: const Icon(CupertinoIcons.person, size: 22), - ), - ), - ), ], ), ), diff --git a/lib/pages/home/controller.dart b/lib/pages/home/controller.dart index fe1857388..67cbf2020 100644 --- a/lib/pages/home/controller.dart +++ b/lib/pages/home/controller.dart @@ -1,10 +1,12 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; +import 'package:hive/hive.dart'; import 'package:pilipala/http/index.dart'; import 'package:pilipala/pages/bangumi/index.dart'; import 'package:pilipala/pages/hot/index.dart'; import 'package:pilipala/pages/live/index.dart'; import 'package:pilipala/pages/rcmd/index.dart'; +import 'package:pilipala/utils/storage.dart'; class HomeController extends GetxController with GetTickerProviderStateMixin { bool flag = false; @@ -51,6 +53,9 @@ class HomeController extends GetxController with GetTickerProviderStateMixin { Get.find, ]; RxString defaultSearch = '输入关键词搜索'.obs; + Box user = GStrorage.user; + RxBool userLogin = false.obs; + RxString userFace = ''.obs; @override void onInit() { @@ -61,6 +66,8 @@ class HomeController extends GetxController with GetTickerProviderStateMixin { vsync: this, ); searchDefault(); + userLogin.value = user.get(UserBoxKey.userLogin) ?? false; + userFace.value = user.get(UserBoxKey.userFace) ?? ''; } void onRefresh() { @@ -81,4 +88,10 @@ class HomeController extends GetxController with GetTickerProviderStateMixin { defaultSearch.value = res.data['data']['name']; } } + + // 更新登录状态 + void updateLoginStatus(val) { + userLogin.value = val ?? false; + userFace.value = user.get(UserBoxKey.userFace) ?? ''; + } } diff --git a/lib/pages/home/view.dart b/lib/pages/home/view.dart index 28610a35f..16d953203 100644 --- a/lib/pages/home/view.dart +++ b/lib/pages/home/view.dart @@ -1,7 +1,5 @@ -import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; -import 'package:hive/hive.dart'; import 'package:pilipala/common/widgets/network_img_layer.dart'; import 'package:pilipala/pages/bangumi/index.dart'; import 'package:pilipala/pages/hot/index.dart'; @@ -10,7 +8,6 @@ import 'package:pilipala/pages/main/index.dart'; import 'package:pilipala/pages/mine/index.dart'; import 'package:pilipala/pages/rcmd/index.dart'; import 'package:pilipala/utils/feed_back.dart'; -import 'package:pilipala/utils/storage.dart'; import './controller.dart'; class HomePage extends StatefulWidget { @@ -29,6 +26,19 @@ class _HomePageState extends State @override bool get wantKeepAlive => true; + showUserBottonSheet() { + feedBack(); + showModalBottomSheet( + context: context, + builder: (_) => const SizedBox( + height: 450, + child: MinePage(), + ), + clipBehavior: Clip.hardEdge, + isScrollControlled: true, + ); + } + @override Widget build(BuildContext context) { super.build(context); @@ -38,7 +48,11 @@ class _HomePageState extends State appBar: AppBar(toolbarHeight: 0, elevation: 0), body: Column( children: [ - CustomAppBar(stream: stream, ctr: _homeController), + CustomAppBar( + stream: stream, + ctr: _homeController, + callback: showUserBottonSheet, + ), Container( padding: const EdgeInsets.only(left: 12, right: 12, bottom: 4), child: Row( @@ -132,13 +146,15 @@ class _HomePageState extends State class CustomAppBar extends StatelessWidget implements PreferredSizeWidget { final double height; final Stream? stream; - final ctr; + final HomeController? ctr; + final Function? callback; const CustomAppBar({ super.key, this.height = kToolbarHeight, this.stream, this.ctr, + this.callback, }); @override @@ -146,8 +162,6 @@ class CustomAppBar extends StatelessWidget implements PreferredSizeWidget { @override Widget build(BuildContext context) { - Box user = GStrorage.user; - return StreamBuilder( stream: stream, initialData: true, @@ -168,103 +182,108 @@ class CustomAppBar extends StatelessWidget implements PreferredSizeWidget { bottom: 4, top: MediaQuery.of(context).padding.top, ), - child: Row( - children: [ - const Text( - 'PLPL', - style: TextStyle( - height: 2.8, - fontSize: 17, - fontWeight: FontWeight.bold, - fontFamily: 'Jura-Bold', - ), + child: Row(children: [ + const Text( + 'PLPL', + style: TextStyle( + height: 2.8, + fontSize: 17, + fontWeight: FontWeight.bold, + fontFamily: 'Jura-Bold', ), - const SizedBox(width: 10), - Expanded( - child: GestureDetector( - onTap: () { - Get.toNamed('/search', parameters: { - 'hintText': ctr.defaultSearch.value - }); - }, - child: Container( - width: 250, - height: 45, - clipBehavior: Clip.hardEdge, - padding: const EdgeInsets.only(left: 12, right: 22), - decoration: BoxDecoration( - borderRadius: - const BorderRadius.all(Radius.circular(25)), - color: - Theme.of(context).colorScheme.onInverseSurface, - ), - child: Row( - children: [ - Icon( - Icons.search_outlined, - size: 23, - color: Theme.of(context).colorScheme.outline, - ), - const SizedBox(width: 7), - Expanded( - child: Obx( - () => Text( - ctr.defaultSearch.value, - maxLines: 1, - overflow: TextOverflow.ellipsis, - style: TextStyle( - color: Theme.of(context) - .colorScheme - .outline), - ), + ), + const SizedBox(width: 10), + Expanded( + child: GestureDetector( + onTap: () { + Get.toNamed('/search', + parameters: {'hintText': ctr!.defaultSearch.value}); + }, + child: Container( + width: 250, + height: 42, + clipBehavior: Clip.hardEdge, + padding: const EdgeInsets.only(left: 12, right: 22), + decoration: BoxDecoration( + borderRadius: + const BorderRadius.all(Radius.circular(25)), + color: Theme.of(context).colorScheme.onInverseSurface, + ), + child: Row( + children: [ + Icon( + Icons.search_outlined, + size: 21, + color: Theme.of(context).colorScheme.outline, + ), + const SizedBox(width: 6), + Expanded( + child: Obx( + () => Text( + ctr!.defaultSearch.value, + maxLines: 1, + overflow: TextOverflow.ellipsis, + style: TextStyle( + color: Theme.of(context) + .colorScheme + .outline), ), ), - ], - ), + ), + ], ), ), ), - const SizedBox(width: 12), - if (user.get(UserBoxKey.userLogin) ?? false) ...[ - GestureDetector( - onTap: () { - feedBack(); - showModalBottomSheet( - context: context, - builder: (_) => const SizedBox( - height: 450, - child: MinePage(), + ), + const SizedBox(width: 10), + // SizedBox( + // width: 36, + // height: 36, + // child: IconButton( + // style: ButtonStyle( + // padding: MaterialStateProperty.all(EdgeInsets.zero), + // ), + // onPressed: () {}, + // icon: const Icon(Icons.notifications_none_outlined, + // size: 22), + // ), + // ), + // const SizedBox(width: 8), + Obx( + () => ctr!.userLogin.value + ? GestureDetector( + onTap: () => callback!(), + child: NetworkImgLayer( + type: 'avatar', + width: 34, + height: 34, + src: ctr!.userFace.value, ), - clipBehavior: Clip.hardEdge, - isScrollControlled: true, - ); - }, - child: NetworkImgLayer( - type: 'avatar', - width: 34, - height: 34, - src: user.get(UserBoxKey.userFace), - ), - ) - ] else ...[ - IconButton( - onPressed: () { - feedBack(); - showModalBottomSheet( - context: context, - builder: (_) => const SizedBox( - height: 450, - child: MinePage(), + ) + : SizedBox( + width: 36, + height: 36, + child: IconButton( + style: ButtonStyle( + padding: + MaterialStateProperty.all(EdgeInsets.zero), + backgroundColor: + MaterialStateProperty.resolveWith((states) { + return Theme.of(context) + .colorScheme + .onInverseSurface; + }), + ), + onPressed: () => callback!(), + icon: Icon( + Icons.person_rounded, + size: 22, + color: Theme.of(context).colorScheme.primary, + ), ), - clipBehavior: Clip.hardEdge, - isScrollControlled: true, - ); - }, - icon: const Icon(CupertinoIcons.person, size: 22), - ) - ], - ], - ), + ), + ), + ]), ), ), ), diff --git a/lib/pages/setting/controller.dart b/lib/pages/setting/controller.dart index 2a394587f..7cb20ebaf 100644 --- a/lib/pages/setting/controller.dart +++ b/lib/pages/setting/controller.dart @@ -1,7 +1,11 @@ import 'package:get/get.dart'; import 'package:hive/hive.dart'; import 'package:pilipala/http/init.dart'; +import 'package:pilipala/pages/dynamics/index.dart'; +import 'package:pilipala/pages/home/index.dart'; +import 'package:pilipala/pages/main/index.dart'; import 'package:pilipala/pages/mine/controller.dart'; +import 'package:pilipala/utils/data.dart'; import 'package:pilipala/utils/feed_back.dart'; import 'package:pilipala/utils/storage.dart'; @@ -25,6 +29,8 @@ class SettingController extends GetxController { await Get.find().resetUserInfo(); userLogin.value = user.get(UserBoxKey.userLogin) ?? false; userInfoCache.put('userInfoCache', null); + HomeController homeCtr = Get.find(); + homeCtr.updateLoginStatus(false); } // 开启关闭震动反馈 diff --git a/lib/pages/webview/controller.dart b/lib/pages/webview/controller.dart index 6411ce556..a0f6a44af 100644 --- a/lib/pages/webview/controller.dart +++ b/lib/pages/webview/controller.dart @@ -7,6 +7,7 @@ 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'; +import 'package:pilipala/pages/home/index.dart'; import 'package:pilipala/pages/mine/index.dart'; import 'package:pilipala/pages/rcmd/controller.dart'; import 'package:pilipala/utils/cookie.dart'; @@ -71,17 +72,24 @@ class WebviewController extends GetxController { print('网页登录: $result'); if (result['status'] && result['data'].isLogin) { SmartDialog.showToast('登录成功'); - Box user = GStrorage.user; - user.put(UserBoxKey.userLogin, true); - user.put(UserBoxKey.userName, result['data'].uname); - user.put(UserBoxKey.userFace, result['data'].face); - user.put(UserBoxKey.userMid, result['data'].mid); - Box userInfoCache = GStrorage.userInfo; - userInfoCache.put('userInfoCache', result['data']); - Get.find().userInfo.value = result['data']; - Get.find().onInit(); - Get.find().queryRcmdFeed('onRefresh'); - Get.find().queryFollowDynamic(); + try { + Box user = GStrorage.user; + user.put(UserBoxKey.userLogin, true); + user.put(UserBoxKey.userName, result['data'].uname); + user.put(UserBoxKey.userFace, result['data'].face); + user.put(UserBoxKey.userMid, result['data'].mid); + + Box userInfoCache = GStrorage.userInfo; + userInfoCache.put('userInfoCache', result['data']); + + Get.find().userInfo.value = result['data']; + Get.find().onInit(); + Get.find().queryRcmdFeed('onRefresh'); + Get.find().queryFollowDynamic(); + + HomeController homeCtr = Get.find(); + homeCtr.updateLoginStatus(true); + } catch (_) {} Get.back(); } } catch (e) { diff --git a/lib/utils/cookie.dart b/lib/utils/cookie.dart index 8d5c891b2..09fb1bcf8 100644 --- a/lib/utils/cookie.dart +++ b/lib/utils/cookie.dart @@ -21,6 +21,8 @@ class SetCookie { await cookieJar.saveFromResponse(Uri.parse(url), jarCookies); // 重新设置 cookie Request.setCookie(); + Request.cookieManager.cookieJar + .saveFromResponse(Uri.parse(url), jarCookies); return true; } }