From 2a436cfcfcb0efa0b82c57f443c6c6e2846a258a Mon Sep 17 00:00:00 2001 From: guozhigq Date: Thu, 3 Oct 2024 16:30:47 +0800 Subject: [PATCH 1/4] =?UTF-8?q?feat:=20=E5=8E=9F=E7=BD=91=E9=A1=B5?= =?UTF-8?q?=E6=9F=A5=E7=9C=8B=E4=B8=93=E6=A0=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/pages/opus/controller.dart | 10 ++++++++++ lib/pages/opus/view.dart | 11 ++++++++--- lib/pages/read/controller.dart | 10 ++++++++++ lib/pages/read/view.dart | 11 ++++++++--- lib/pages/webview/controller.dart | 11 ----------- lib/utils/app_scheme.dart | 2 +- 6 files changed, 37 insertions(+), 18 deletions(-) diff --git a/lib/pages/opus/controller.dart b/lib/pages/opus/controller.dart index 86dd67a5..3cf844cc 100644 --- a/lib/pages/opus/controller.dart +++ b/lib/pages/opus/controller.dart @@ -39,6 +39,7 @@ class OpusController extends GetxController { 'articleType': 'cv', }); } else { + title.value = res['data'].detail!.basic!.title!; opusData.value = res['data']; } } @@ -91,6 +92,15 @@ class OpusController extends GetxController { ); } + // 跳转webview + void onJumpWebview() { + Get.toNamed('/webview', parameters: { + 'url': url, + 'type': 'webview', + 'pageTitle': title.value, + }); + } + @override void onClose() { scrollController.removeListener(_scrollListener); diff --git a/lib/pages/opus/view.dart b/lib/pages/opus/view.dart index 8535230f..434a9405 100644 --- a/lib/pages/opus/view.dart +++ b/lib/pages/opus/view.dart @@ -60,9 +60,14 @@ class _OpusPageState extends State { }, ), actions: [ - IconButton( - icon: const Icon(Icons.more_vert_rounded), - onPressed: () {}, + PopupMenuButton( + icon: const Icon(Icons.more_vert_outlined), + itemBuilder: (BuildContext context) => [ + PopupMenuItem( + onTap: controller.onJumpWebview, + child: const Text('查看原网页'), + ) + ], ), const SizedBox(width: 16), ], diff --git a/lib/pages/read/controller.dart b/lib/pages/read/controller.dart index a0e4ef8e..efa43c98 100644 --- a/lib/pages/read/controller.dart +++ b/lib/pages/read/controller.dart @@ -22,6 +22,7 @@ class ReadPageController extends GetxController { title.value = Get.parameters['title'] ?? ''; id = Get.parameters['id']!; articleType = Get.parameters['articleType']!; + url = 'https://www.bilibili.com/read/cv$id'; scrollController.addListener(_scrollListener); fetchViewInfo(); } @@ -85,6 +86,15 @@ class ReadPageController extends GetxController { ReadHttp.getViewInfo(id: id); } + // 跳转webview + void onJumpWebview() { + Get.toNamed('/webview', parameters: { + 'url': url, + 'type': 'webview', + 'pageTitle': title.value, + }); + } + @override void onClose() { scrollController.removeListener(_scrollListener); diff --git a/lib/pages/read/view.dart b/lib/pages/read/view.dart index 7c1e0601..d37eeae5 100644 --- a/lib/pages/read/view.dart +++ b/lib/pages/read/view.dart @@ -72,9 +72,14 @@ class _ReadPageState extends State { }, ), actions: [ - IconButton( - icon: const Icon(Icons.more_vert_rounded), - onPressed: () {}, + PopupMenuButton( + icon: const Icon(Icons.more_vert_outlined), + itemBuilder: (BuildContext context) => [ + PopupMenuItem( + onTap: controller.onJumpWebview, + child: const Text('查看原网页'), + ) + ], ), const SizedBox(width: 16), ], diff --git a/lib/pages/webview/controller.dart b/lib/pages/webview/controller.dart index e0ff113c..53e76231 100644 --- a/lib/pages/webview/controller.dart +++ b/lib/pages/webview/controller.dart @@ -1,19 +1,8 @@ -// ignore_for_file: avoid_print - -import 'package:flutter/material.dart'; -import 'package:flutter/services.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'; -import 'package:pilipala/http/user.dart'; -import 'package:pilipala/pages/home/index.dart'; -import 'package:pilipala/pages/media/index.dart'; -import 'package:pilipala/utils/cookie.dart'; import 'package:pilipala/utils/event_bus.dart'; import 'package:pilipala/utils/id_utils.dart'; import 'package:pilipala/utils/login.dart'; -import 'package:pilipala/utils/storage.dart'; import 'package:webview_flutter/webview_flutter.dart'; class WebviewController extends GetxController { diff --git a/lib/utils/app_scheme.dart b/lib/utils/app_scheme.dart index 67b8a5d5..22184139 100644 --- a/lib/utils/app_scheme.dart +++ b/lib/utils/app_scheme.dart @@ -82,7 +82,7 @@ class PiliSchame { case 'opus': if (path.startsWith('/detail')) { var opusId = path.split('/').last; - Get.toNamed('/opus', arguments: { + Get.toNamed('/opus', parameters: { 'title': '', 'id': opusId, 'articleType': 'opus', From e949dd60ce30b448cb0d6888d12b21987d7c2f07 Mon Sep 17 00:00:00 2001 From: guozhigq Date: Thu, 3 Oct 2024 20:35:33 +0800 Subject: [PATCH 2/4] =?UTF-8?q?opt:=20=E5=9B=BE=E7=89=87=E9=A2=84=E8=A7=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/pages/dynamics/widgets/content_panel.dart | 26 ---- lib/pages/dynamics/widgets/pic_panel.dart | 26 ---- lib/pages/opus/controller.dart | 26 ---- lib/pages/read/controller.dart | 26 ---- .../detail/reply/widgets/reply_item.dart | 29 ---- .../whisper_detail/widget/chat_item.dart | 26 ---- .../pl_gallery/interactiveviewer_gallery.dart | 125 +++++++++++++++--- 7 files changed, 106 insertions(+), 178 deletions(-) diff --git a/lib/pages/dynamics/widgets/content_panel.dart b/lib/pages/dynamics/widgets/content_panel.dart index 28451dde..c1a6185e 100644 --- a/lib/pages/dynamics/widgets/content_panel.dart +++ b/lib/pages/dynamics/widgets/content_panel.dart @@ -1,5 +1,4 @@ // 内容 -import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:pilipala/common/widgets/badge.dart'; @@ -166,31 +165,6 @@ class _ContentState extends State { builder: (BuildContext context) => InteractiveviewerGallery( sources: picList, initIndex: initIndex, - itemBuilder: ( - BuildContext context, - int index, - bool isFocus, - bool enablePageView, - ) { - return GestureDetector( - behavior: HitTestBehavior.opaque, - onTap: () { - if (enablePageView) { - Navigator.of(context).pop(); - } - }, - child: Center( - child: Hero( - tag: picList[index], - child: CachedNetworkImage( - fadeInDuration: const Duration(milliseconds: 0), - imageUrl: picList[index], - fit: BoxFit.contain, - ), - ), - ), - ); - }, onPageChanged: (int pageIndex) {}, ), ), diff --git a/lib/pages/dynamics/widgets/pic_panel.dart b/lib/pages/dynamics/widgets/pic_panel.dart index 783fe89b..bd3f91f6 100644 --- a/lib/pages/dynamics/widgets/pic_panel.dart +++ b/lib/pages/dynamics/widgets/pic_panel.dart @@ -1,4 +1,3 @@ -import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:pilipala/common/constants.dart'; @@ -12,31 +11,6 @@ void onPreviewImg(currentUrl, picList, initIndex, context) { builder: (BuildContext context) => InteractiveviewerGallery( sources: picList, initIndex: initIndex, - itemBuilder: ( - BuildContext context, - int index, - bool isFocus, - bool enablePageView, - ) { - return GestureDetector( - behavior: HitTestBehavior.opaque, - onTap: () { - if (enablePageView) { - Navigator.of(context).pop(); - } - }, - child: Center( - child: Hero( - tag: picList[index], - child: CachedNetworkImage( - fadeInDuration: const Duration(milliseconds: 0), - imageUrl: picList[index], - fit: BoxFit.contain, - ), - ), - ), - ); - }, onPageChanged: (int pageIndex) {}, ), ), diff --git a/lib/pages/opus/controller.dart b/lib/pages/opus/controller.dart index 3cf844cc..f00c45b5 100644 --- a/lib/pages/opus/controller.dart +++ b/lib/pages/opus/controller.dart @@ -3,7 +3,6 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:pilipala/http/read.dart'; import 'package:pilipala/models/read/opus.dart'; -import 'package:cached_network_image/cached_network_image.dart'; import 'package:pilipala/plugin/pl_gallery/hero_dialog_route.dart'; import 'package:pilipala/plugin/pl_gallery/interactiveviewer_gallery.dart'; @@ -61,31 +60,6 @@ class OpusController extends GetxController { builder: (BuildContext context) => InteractiveviewerGallery( sources: picList, initIndex: initIndex, - itemBuilder: ( - BuildContext context, - int index, - bool isFocus, - bool enablePageView, - ) { - return GestureDetector( - behavior: HitTestBehavior.opaque, - onTap: () { - if (enablePageView) { - Navigator.of(context).pop(); - } - }, - child: Center( - child: Hero( - tag: picList[index], - child: CachedNetworkImage( - fadeInDuration: const Duration(milliseconds: 0), - imageUrl: picList[index], - fit: BoxFit.contain, - ), - ), - ), - ); - }, onPageChanged: (int pageIndex) {}, ), ), diff --git a/lib/pages/read/controller.dart b/lib/pages/read/controller.dart index efa43c98..178ebfda 100644 --- a/lib/pages/read/controller.dart +++ b/lib/pages/read/controller.dart @@ -1,5 +1,4 @@ import 'dart:async'; -import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:pilipala/http/read.dart'; @@ -51,31 +50,6 @@ class ReadPageController extends GetxController { builder: (BuildContext context) => InteractiveviewerGallery( sources: picList, initIndex: initIndex, - itemBuilder: ( - BuildContext context, - int index, - bool isFocus, - bool enablePageView, - ) { - return GestureDetector( - behavior: HitTestBehavior.opaque, - onTap: () { - if (enablePageView) { - Navigator.of(context).pop(); - } - }, - child: Center( - child: Hero( - tag: picList[index], - child: CachedNetworkImage( - fadeInDuration: const Duration(milliseconds: 0), - imageUrl: picList[index], - fit: BoxFit.contain, - ), - ), - ), - ); - }, onPageChanged: (int pageIndex) {}, ), ), diff --git a/lib/pages/video/detail/reply/widgets/reply_item.dart b/lib/pages/video/detail/reply/widgets/reply_item.dart index 26dc2e5a..8bb6992a 100644 --- a/lib/pages/video/detail/reply/widgets/reply_item.dart +++ b/lib/pages/video/detail/reply/widgets/reply_item.dart @@ -1,7 +1,6 @@ import 'dart:math'; import 'package:appscheme/appscheme.dart'; -import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; @@ -583,34 +582,6 @@ InlineSpan buildContent( builder: (BuildContext context) => InteractiveviewerGallery( sources: picList, initIndex: initIndex, - itemBuilder: ( - BuildContext context, - int index, - bool isFocus, - bool enablePageView, - ) { - return GestureDetector( - behavior: HitTestBehavior.opaque, - onTap: () { - if (enablePageView) { - Navigator.of(context).pop(); - final MainController mainController = - Get.find(); - mainController.imgPreviewStatus = false; - } - }, - child: Center( - child: Hero( - tag: picList[index] + randomInt, - child: CachedNetworkImage( - fadeInDuration: const Duration(milliseconds: 0), - imageUrl: picList[index], - fit: BoxFit.contain, - ), - ), - ), - ); - }, onPageChanged: (int pageIndex) {}, onDismissed: (int value) { print('onDismissed'); diff --git a/lib/pages/whisper_detail/widget/chat_item.dart b/lib/pages/whisper_detail/widget/chat_item.dart index 7ddd1d83..01ede374 100644 --- a/lib/pages/whisper_detail/widget/chat_item.dart +++ b/lib/pages/whisper_detail/widget/chat_item.dart @@ -2,7 +2,6 @@ // ignore_for_file: constant_identifier_names import 'dart:convert'; -import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:get/get.dart'; @@ -170,31 +169,6 @@ class ChatItem extends StatelessWidget { builder: (BuildContext context) => InteractiveviewerGallery( sources: ctr.picList, initIndex: ctr.picList.indexOf(content['url']), - itemBuilder: ( - BuildContext context, - int index, - bool isFocus, - bool enablePageView, - ) { - return GestureDetector( - behavior: HitTestBehavior.opaque, - onTap: () { - if (enablePageView) { - Navigator.of(context).pop(); - } - }, - child: Center( - child: Hero( - tag: ctr.picList[index], - child: CachedNetworkImage( - fadeInDuration: const Duration(milliseconds: 0), - imageUrl: ctr.picList[index], - fit: BoxFit.contain, - ), - ), - ), - ); - }, onPageChanged: (int pageIndex) {}, ), ), diff --git a/lib/plugin/pl_gallery/interactiveviewer_gallery.dart b/lib/plugin/pl_gallery/interactiveviewer_gallery.dart index 03ff4642..cd13194e 100644 --- a/lib/plugin/pl_gallery/interactiveviewer_gallery.dart +++ b/lib/plugin/pl_gallery/interactiveviewer_gallery.dart @@ -2,10 +2,12 @@ library interactiveviewer_gallery; import 'dart:io'; +import 'package:cached_network_image/cached_network_image.dart'; import 'package:dio/dio.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; +import 'package:get/get.dart'; import 'package:path_provider/path_provider.dart'; import 'package:pilipala/utils/download.dart'; import 'package:share_plus/share_plus.dart'; @@ -32,7 +34,7 @@ class InteractiveviewerGallery extends StatefulWidget { const InteractiveviewerGallery({ required this.sources, required this.initIndex, - required this.itemBuilder, + this.itemBuilder, this.maxScale = 4.5, this.minScale = 1.0, this.onPageChanged, @@ -47,7 +49,7 @@ class InteractiveviewerGallery extends StatefulWidget { final int initIndex; /// The item content - final IndexedFocusedWidgetBuilder itemBuilder; + final IndexedFocusedWidgetBuilder? itemBuilder; final double maxScale; @@ -246,12 +248,15 @@ class _InteractiveviewerGalleryState extends State _doubleTapLocalPosition = details.localPosition; }, onDoubleTap: onDoubleTap, - child: widget.itemBuilder( - context, - index, - index == currentIndex, - _enablePageView, - ), + onLongPress: onLongPress, + child: widget.itemBuilder != null + ? widget.itemBuilder!( + context, + index, + index == currentIndex, + _enablePageView, + ) + : _itemBuilder(widget.sources, index), ); }, ), @@ -302,17 +307,7 @@ class _InteractiveviewerGalleryState extends State PopupMenuItem( value: 1, onTap: () { - Clipboard.setData(ClipboardData( - text: - widget.sources[currentIndex!].toString())) - .then((value) { - SmartDialog.showToast('已复制到粘贴板'); - }).catchError((err) { - SmartDialog.showNotify( - msg: err.toString(), - notifyType: NotifyType.error, - ); - }); + onCopyImg(widget.sources[currentIndex!].toString()); }, child: const Text("复制图片"), ), @@ -350,6 +345,41 @@ class _InteractiveviewerGalleryState extends State Share.shareXFiles([XFile(path)], subject: imgUrl); } + // 复制图片 + void onCopyImg(String imgUrl) { + Clipboard.setData( + ClipboardData(text: widget.sources[currentIndex!].toString())) + .then((value) { + SmartDialog.showToast('已复制到粘贴板'); + }).catchError((err) { + SmartDialog.showNotify( + msg: err.toString(), + notifyType: NotifyType.error, + ); + }); + } + + Widget _itemBuilder(sources, index) { + return GestureDetector( + behavior: HitTestBehavior.opaque, + onTap: () { + if (_enablePageView) { + Navigator.of(context).pop(); + } + }, + child: Center( + child: Hero( + tag: sources[index], + child: CachedNetworkImage( + fadeInDuration: const Duration(milliseconds: 0), + imageUrl: sources[index], + fit: BoxFit.contain, + ), + ), + ), + ); + } + onDoubleTap() { Matrix4 matrix = _transformationController!.value.clone(); double currentScale = matrix.row0.x; @@ -396,4 +426,61 @@ class _InteractiveviewerGalleryState extends State .forward(from: 0) .whenComplete(() => _onScaleChanged(targetScale)); } + + onLongPress() { + showModalBottomSheet( + context: context, + useRootNavigator: true, + isScrollControlled: true, + builder: (context) { + return Container( + padding: + EdgeInsets.only(bottom: MediaQuery.of(context).padding.bottom), + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + InkWell( + onTap: () => Get.back(), + child: Container( + height: 35, + padding: const EdgeInsets.only(bottom: 2), + child: Center( + child: Container( + width: 32, + height: 3, + decoration: BoxDecoration( + color: Theme.of(context).colorScheme.outline, + borderRadius: + const BorderRadius.all(Radius.circular(3))), + ), + ), + ), + ), + ListTile( + onTap: () { + onShareImg(widget.sources[currentIndex!]); + Navigator.of(context).pop(); + }, + title: const Text('分享图片'), + ), + ListTile( + onTap: () { + onCopyImg(widget.sources[currentIndex!].toString()); + Navigator.of(context).pop(); + }, + title: const Text('复制图片'), + ), + ListTile( + onTap: () { + DownloadUtils.downloadImg(widget.sources[currentIndex!]); + Navigator.of(context).pop(); + }, + title: const Text('保存图片'), + ), + ], + ), + ); + }, + ); + } } From 4cac02a4c0c6cd47ad78786dc5adde4fa37d5fb8 Mon Sep 17 00:00:00 2001 From: guozhigq Date: Thu, 3 Oct 2024 21:28:12 +0800 Subject: [PATCH 3/4] opt: Request().post --- lib/http/black.dart | 2 +- lib/http/danmaku.dart | 3 -- lib/http/dynamics.dart | 48 ++++++++++-------- lib/http/fav.dart | 4 +- lib/http/init.dart | 3 +- lib/http/live.dart | 54 ++++++++++++--------- lib/http/login.dart | 15 ------ lib/http/member.dart | 29 ++++++----- lib/http/msg.dart | 4 -- lib/http/reply.dart | 2 +- lib/http/user.dart | 16 +++--- lib/http/video.dart | 108 ++++++++++++++++++++++++----------------- 12 files changed, 151 insertions(+), 137 deletions(-) diff --git a/lib/http/black.dart b/lib/http/black.dart index 0c6a63ab..67356a92 100644 --- a/lib/http/black.dart +++ b/lib/http/black.dart @@ -28,7 +28,7 @@ class BlackHttp { static Future removeBlack({required int fid}) async { var res = await Request().post( Api.removeBlack, - queryParameters: { + data: { 'act': 6, 'csrf': await Request.getCsrf(), 'fid': fid, diff --git a/lib/http/danmaku.dart b/lib/http/danmaku.dart index 0b108755..2ed2a415 100644 --- a/lib/http/danmaku.dart +++ b/lib/http/danmaku.dart @@ -67,9 +67,6 @@ class DanmakaHttp { var response = await Request().post( Api.shootDanmaku, data: params, - options: Options( - contentType: Headers.formUrlEncodedContentType, - ), ); if (response.statusCode != 200) { return { diff --git a/lib/http/dynamics.dart b/lib/http/dynamics.dart index 69619361..5ba5675e 100644 --- a/lib/http/dynamics.dart +++ b/lib/http/dynamics.dart @@ -1,4 +1,5 @@ import 'dart:math'; +import 'package:dio/dio.dart'; import '../models/dynamics/result.dart'; import '../models/dynamics/up.dart'; import 'index.dart'; @@ -69,7 +70,7 @@ class DynamicsHttp { }) async { var res = await Request().post( Api.likeDynamic, - queryParameters: { + data: { 'dynamic_id': dynamicId, 'up': up, 'csrf': await Request.getCsrf(), @@ -175,27 +176,32 @@ class DynamicsHttp { 'revs_id': {'dyn_type': 8, 'rid': oid} }; } - var res = await Request().post(Api.dynamicCreate, queryParameters: { - 'platform': 'web', - 'csrf': await Request.getCsrf(), - 'x-bili-device-req-json': {'platform': 'web', 'device': 'pc'}, - 'x-bili-web-req-json': {'spm_id': '333.999'}, - }, data: { - 'dyn_req': { - 'content': { - 'contents': [ - {'raw_text': rawText ?? '', 'type': 1, 'biz_id': ''} - ] - }, - 'scene': scene, - 'attach_card': null, - 'upload_id': uploadId, - 'meta': { - 'app_meta': {'from': 'create.dynamic.web', 'mobi_app': 'web'} - } + var res = await Request().post( + Api.dynamicCreate, + queryParameters: { + 'platform': 'web', + 'csrf': await Request.getCsrf(), + 'x-bili-device-req-json': {'platform': 'web', 'device': 'pc'}, + 'x-bili-web-req-json': {'spm_id': '333.999'}, }, - 'web_repost_src': webRepostSrc - }); + data: { + 'dyn_req': { + 'content': { + 'contents': [ + {'raw_text': rawText ?? '', 'type': 1, 'biz_id': ''} + ] + }, + 'scene': scene, + 'attach_card': null, + 'upload_id': uploadId, + 'meta': { + 'app_meta': {'from': 'create.dynamic.web', 'mobi_app': 'web'} + } + }, + 'web_repost_src': webRepostSrc + }, + options: Options(contentType: 'application/json'), + ); if (res.data['code'] == 0) { return { 'status': true, diff --git a/lib/http/fav.dart b/lib/http/fav.dart index 6f49d68a..69577e7e 100644 --- a/lib/http/fav.dart +++ b/lib/http/fav.dart @@ -11,7 +11,7 @@ class FavHttp { }) async { var res = await Request().post( Api.editFavFolder, - queryParameters: { + data: { 'title': title, 'intro': intro, 'media_id': mediaId, @@ -43,7 +43,7 @@ class FavHttp { }) async { var res = await Request().post( Api.addFavFolder, - queryParameters: { + data: { 'title': title, 'intro': intro, 'cover': cover ?? '', diff --git a/lib/http/init.dart b/lib/http/init.dart index 6a90a87d..eae94ae4 100644 --- a/lib/http/init.dart +++ b/lib/http/init.dart @@ -260,7 +260,8 @@ class Request { url, data: data, queryParameters: queryParameters, - options: options, + options: + options ?? Options(contentType: Headers.formUrlEncodedContentType), cancelToken: cancelToken, ); // print('post success: ${response.data}'); diff --git a/lib/http/live.dart b/lib/http/live.dart index 1405e9ea..259f86fc 100644 --- a/lib/http/live.dart +++ b/lib/http/live.dart @@ -89,23 +89,26 @@ class LiveHttp { // 发送弹幕 static Future sendDanmaku({roomId, msg}) async { - var res = await Request().post(Api.sendLiveMsg, queryParameters: { - 'bubble': 0, - 'msg': msg, - 'color': 16777215, // 颜色 - 'mode': 1, // 模式 - 'room_type': 0, - 'jumpfrom': 71001, // 直播间来源 - 'reply_mid': 0, - 'reply_attr': 0, - 'replay_dmid': '', - 'statistics': {"appId": 100, "platform": 5}, - 'fontsize': 25, // 字体大小 - 'rnd': DateTime.now().millisecondsSinceEpoch ~/ 1000, // 时间戳 - 'roomid': roomId, - 'csrf': await Request.getCsrf(), - 'csrf_token': await Request.getCsrf(), - }); + var res = await Request().post( + Api.sendLiveMsg, + data: { + 'bubble': 0, + 'msg': msg, + 'color': 16777215, // 颜色 + 'mode': 1, // 模式 + 'room_type': 0, + 'jumpfrom': 71001, // 直播间来源 + 'reply_mid': 0, + 'reply_attr': 0, + 'replay_dmid': '', + 'statistics': {"appId": 100, "platform": 5}, + 'fontsize': 25, // 字体大小 + 'rnd': DateTime.now().millisecondsSinceEpoch ~/ 1000, // 时间戳 + 'roomid': roomId, + 'csrf': await Request.getCsrf(), + 'csrf_token': await Request.getCsrf(), + }, + ); if (res.data['code'] == 0) { return { 'status': true, @@ -145,12 +148,15 @@ class LiveHttp { // 直播历史记录 static Future liveRoomEntry({required int roomId}) async { - await Request().post(Api.liveRoomEntry, queryParameters: { - 'room_id': roomId, - 'platform': 'pc', - 'csrf_token': await Request.getCsrf(), - 'csrf': await Request.getCsrf(), - 'visit_id': '', - }); + await Request().post( + Api.liveRoomEntry, + data: { + 'room_id': roomId, + 'platform': 'pc', + 'csrf_token': await Request.getCsrf(), + 'csrf': await Request.getCsrf(), + 'visit_id': '', + }, + ); } } diff --git a/lib/http/login.dart b/lib/http/login.dart index 2437b72a..32eda04d 100644 --- a/lib/http/login.dart +++ b/lib/http/login.dart @@ -71,9 +71,6 @@ class LoginHttp { var res = await Request().post( Api.webSmsCode, data: formData, - options: Options( - contentType: Headers.formUrlEncodedContentType, - ), ); if (res.data['code'] == 0) { return { @@ -106,9 +103,6 @@ class LoginHttp { var res = await Request().post( Api.webSmsLogin, data: formData, - options: Options( - contentType: Headers.formUrlEncodedContentType, - ), ); if (res.data['code'] == 0) { return { @@ -155,9 +149,6 @@ class LoginHttp { var res = await Request().post( Api.appSmsCode, data: data, - options: Options( - contentType: Headers.formUrlEncodedContentType, - ), ); print(res); } @@ -208,9 +199,6 @@ class LoginHttp { var res = await Request().post( Api.loginInByPwdApi, data: data, - options: Options( - contentType: Headers.formUrlEncodedContentType, - ), ); print(res); } @@ -239,9 +227,6 @@ class LoginHttp { var res = await Request().post( Api.loginInByWebPwd, data: formData, - options: Options( - contentType: Headers.formUrlEncodedContentType, - ), ); if (res.data['code'] == 0) { return { diff --git a/lib/http/member.dart b/lib/http/member.dart index 459d6747..c7b22359 100644 --- a/lib/http/member.dart +++ b/lib/http/member.dart @@ -198,13 +198,15 @@ class MemberHttp { // 设置分组 static Future addUsers(int? fids, String? tagids) async { - var res = await Request().post(Api.addUsers, queryParameters: { - 'fids': fids, - 'tagids': tagids ?? '0', - 'csrf': await Request.getCsrf(), - }, data: { - 'cross_domain': true - }); + var res = await Request().post( + Api.addUsers, + data: { + 'fids': fids, + 'tagids': tagids ?? '0', + 'csrf': await Request.getCsrf(), + }, + queryParameters: {'cross_domain': true}, + ); if (res.data['code'] == 0) { return {'status': true, 'data': [], 'msg': '操作成功'}; } else { @@ -422,11 +424,14 @@ class MemberHttp { static Future cookieToKey() async { var authCodeRes = await getTVCode(); if (authCodeRes['status']) { - var res = await Request().post(Api.cookieToKey, queryParameters: { - 'auth_code': authCodeRes['data'], - 'build': 708200, - 'csrf': await Request.getCsrf(), - }); + var res = await Request().post( + Api.cookieToKey, + data: { + 'auth_code': authCodeRes['data'], + 'build': 708200, + 'csrf': await Request.getCsrf(), + }, + ); await Future.delayed(const Duration(milliseconds: 300)); await qrcodePoll(authCodeRes['data']); if (res.data['code'] == 0) { diff --git a/lib/http/msg.dart b/lib/http/msg.dart index 869b5a28..6426a6f2 100644 --- a/lib/http/msg.dart +++ b/lib/http/msg.dart @@ -1,6 +1,5 @@ import 'dart:convert'; import 'dart:math'; -import 'package:dio/dio.dart'; import 'package:pilipala/models/msg/like.dart'; import 'package:pilipala/models/msg/reply.dart'; import 'package:pilipala/models/msg/system.dart'; @@ -158,9 +157,6 @@ class MsgHttp { 'csrf_token': csrf, 'csrf': csrf, }, - options: Options( - contentType: Headers.formUrlEncodedContentType, - ), ); if (res.data['code'] == 0) { return { diff --git a/lib/http/reply.dart b/lib/http/reply.dart index 880f9072..fc00f06b 100644 --- a/lib/http/reply.dart +++ b/lib/http/reply.dart @@ -78,7 +78,7 @@ class ReplyHttp { }) async { var res = await Request().post( Api.likeReply, - queryParameters: { + data: { 'type': type, 'oid': oid, 'rpid': rpid, diff --git a/lib/http/user.dart b/lib/http/user.dart index f4535905..26b79523 100644 --- a/lib/http/user.dart +++ b/lib/http/user.dart @@ -153,7 +153,7 @@ class UserHttp { // 暂停switchStatus传true 否则false var res = await Request().post( Api.pauseHistory, - queryParameters: { + data: { 'switch': switchStatus, 'jsonp': 'jsonp', 'csrf': await Request.getCsrf(), @@ -172,7 +172,7 @@ class UserHttp { static Future clearHistory() async { var res = await Request().post( Api.clearHistory, - queryParameters: { + data: { 'jsonp': 'jsonp', 'csrf': await Request.getCsrf(), }, @@ -190,7 +190,7 @@ class UserHttp { } var res = await Request().post( Api.toViewLater, - queryParameters: data, + data: data, ); if (res.data['code'] == 0) { return {'status': true, 'msg': 'yeah!稍后再看'}; @@ -209,7 +209,7 @@ class UserHttp { params[aid != null ? 'aid' : 'viewed'] = aid ?? true; var res = await Request().post( Api.toViewDel, - queryParameters: params, + data: params, ); if (res.data['code'] == 0) { return {'status': true, 'msg': 'yeah!成功移除'}; @@ -241,7 +241,7 @@ class UserHttp { static Future toViewClear() async { var res = await Request().post( Api.toViewClear, - queryParameters: { + data: { 'jsonp': 'jsonp', 'csrf': await Request.getCsrf(), }, @@ -257,7 +257,7 @@ class UserHttp { static Future delHistory(kid) async { var res = await Request().post( Api.delHistory, - queryParameters: { + data: { 'kid': kid, 'jsonp': 'jsonp', 'csrf': await Request.getCsrf(), @@ -406,7 +406,7 @@ class UserHttp { static Future cancelSub({required int seasonId}) async { var res = await Request().post( Api.cancelSub, - queryParameters: { + data: { 'platform': 'web', 'season_id': seasonId, 'csrf': await Request.getCsrf(), @@ -423,7 +423,7 @@ class UserHttp { static Future delFavFolder({required int mediaIds}) async { var res = await Request().post( Api.delFavFolder, - queryParameters: { + data: { 'media_ids': mediaIds, 'platform': 'web', 'csrf': await Request.getCsrf(), diff --git a/lib/http/video.dart b/lib/http/video.dart index 160f5db2..95ea6782 100644 --- a/lib/http/video.dart +++ b/lib/http/video.dart @@ -243,7 +243,7 @@ class VideoHttp { static Future coinVideo({required String bvid, required int multiply}) async { var res = await Request().post( Api.coinVideo, - queryParameters: { + data: { 'bvid': bvid, 'multiply': multiply, 'select_like': 0, @@ -271,7 +271,7 @@ class VideoHttp { static Future oneThree({required String bvid}) async { var res = await Request().post( Api.oneThree, - queryParameters: { + data: { 'bvid': bvid, 'csrf': await Request.getCsrf(), }, @@ -287,7 +287,7 @@ class VideoHttp { static Future likeVideo({required String bvid, required bool type}) async { var res = await Request().post( Api.likeVideo, - queryParameters: { + data: { 'bvid': bvid, 'like': type ? 1 : 2, 'csrf': await Request.getCsrf(), @@ -303,13 +303,16 @@ class VideoHttp { // (取消)收藏 static Future favVideo( {required int aid, String? addIds, String? delIds}) async { - var res = await Request().post(Api.favVideo, queryParameters: { - 'rid': aid, - 'type': 2, - 'add_media_ids': addIds ?? '', - 'del_media_ids': delIds ?? '', - 'csrf': await Request.getCsrf(), - }); + var res = await Request().post( + Api.favVideo, + data: { + 'rid': aid, + 'type': 2, + 'add_media_ids': addIds ?? '', + 'del_media_ids': delIds ?? '', + 'csrf': await Request.getCsrf(), + }, + ); if (res.data['code'] == 0) { return {'status': true, 'data': res.data['data']}; } else { @@ -347,14 +350,17 @@ class VideoHttp { if (message == '') { return {'status': false, 'data': [], 'msg': '请输入评论内容'}; } - var res = await Request().post(Api.replyAdd, queryParameters: { - 'type': type.index, - 'oid': oid, - 'root': root == null || root == 0 ? '' : root, - 'parent': parent == null || parent == 0 ? '' : parent, - 'message': message, - 'csrf': await Request.getCsrf(), - }); + var res = await Request().post( + Api.replyAdd, + data: { + 'type': type.index, + 'oid': oid, + 'root': root == null || root == 0 ? '' : root, + 'parent': parent == null || parent == 0 ? '' : parent, + 'message': message, + 'csrf': await Request.getCsrf(), + }, + ); log(res.toString()); if (res.data['code'] == 0) { return {'status': true, 'data': res.data['data']}; @@ -376,12 +382,15 @@ class VideoHttp { // 操作用户关系 static Future relationMod( {required int mid, required int act, required int reSrc}) async { - var res = await Request().post(Api.relationMod, queryParameters: { - 'fid': mid, - 'act': act, - 're_src': reSrc, - 'csrf': await Request.getCsrf(), - }); + var res = await Request().post( + Api.relationMod, + data: { + 'fid': mid, + 'act': act, + 're_src': reSrc, + 'csrf': await Request.getCsrf(), + }, + ); if (res.data['code'] == 0) { if (act == 5) { List blackMidsList = @@ -397,27 +406,33 @@ class VideoHttp { // 视频播放进度 static Future heartBeat({bvid, cid, progress, realtime}) async { - await Request().post(Api.heartBeat, queryParameters: { - // 'aid': aid, - 'bvid': bvid, - 'cid': cid, - // 'epid': '', - // 'sid': '', - // 'mid': '', - 'played_time': progress, - // 'realtime': realtime, - // 'type': '', - // 'sub_type': '', - 'csrf': await Request.getCsrf(), - }); + await Request().post( + Api.heartBeat, + data: { + // 'aid': aid, + 'bvid': bvid, + 'cid': cid, + // 'epid': '', + // 'sid': '', + // 'mid': '', + 'played_time': progress, + // 'realtime': realtime, + // 'type': '', + // 'sub_type': '', + 'csrf': await Request.getCsrf(), + }, + ); } // 添加追番 static Future bangumiAdd({int? seasonId}) async { - var res = await Request().post(Api.bangumiAdd, queryParameters: { - 'season_id': seasonId, - 'csrf': await Request.getCsrf(), - }); + var res = await Request().post( + Api.bangumiAdd, + data: { + 'season_id': seasonId, + 'csrf': await Request.getCsrf(), + }, + ); if (res.data['code'] == 0) { return {'status': true, 'msg': res.data['result']['toast']}; } else { @@ -427,10 +442,13 @@ class VideoHttp { // 取消追番 static Future bangumiDel({int? seasonId}) async { - var res = await Request().post(Api.bangumiDel, queryParameters: { - 'season_id': seasonId, - 'csrf': await Request.getCsrf(), - }); + var res = await Request().post( + Api.bangumiDel, + data: { + 'season_id': seasonId, + 'csrf': await Request.getCsrf(), + }, + ); if (res.data['code'] == 0) { return {'status': true, 'msg': res.data['result']['toast']}; } else { From 2dca3759011beed7e4e145b285458295b05b4fb5 Mon Sep 17 00:00:00 2001 From: guozhigq Date: Sun, 6 Oct 2024 16:38:50 +0800 Subject: [PATCH 4/4] mod --- lib/pages/video/detail/view.dart | 22 ---------------------- 1 file changed, 22 deletions(-) diff --git a/lib/pages/video/detail/view.dart b/lib/pages/video/detail/view.dart index 5476adc9..d155509f 100644 --- a/lib/pages/video/detail/view.dart +++ b/lib/pages/video/detail/view.dart @@ -68,10 +68,6 @@ class _VideoDetailPageState extends State late final AppLifecycleListener _lifecycleListener; late double statusHeight; - // 稍后再看控制器 - // late AnimationController _laterCtr; - // late Animation _laterOffsetAni; - @override void initState() { super.initState(); @@ -108,7 +104,6 @@ class _VideoDetailPageState extends State } WidgetsBinding.instance.addObserver(this); lifecycleListener(); - // watchLaterControllerInit(); } // 获取视频资源,初始化播放器 @@ -242,8 +237,6 @@ class _VideoDetailPageState extends State appbarStream.close(); WidgetsBinding.instance.removeObserver(this); _lifecycleListener.dispose(); - // _laterCtr.dispose(); - // _laterOffsetAni.removeListener(() {}); super.dispose(); } @@ -490,21 +483,6 @@ class _VideoDetailPageState extends State ); } - /// 稍后再看控制器初始化 - // void watchLaterControllerInit() { - // _laterCtr = AnimationController( - // duration: const Duration(milliseconds: 300), - // vsync: this, - // ); - // _laterOffsetAni = Tween( - // begin: const Offset(0.0, 1.0), - // end: Offset.zero, - // ).animate(CurvedAnimation( - // parent: _laterCtr, - // curve: Curves.easeInOut, - // )); - // } - @override Widget build(BuildContext context) { final sizeContext = MediaQuery.sizeOf(context);