From fee1ad56f748478284b4a897c20d758d8807abe8 Mon Sep 17 00:00:00 2001 From: bggRGjQaUbCoE Date: Sat, 14 Dec 2024 16:00:43 +0800 Subject: [PATCH] feat: use `canvas_danmaku` Signed-off-by: bggRGjQaUbCoE --- lib/pages/danmaku/view.dart | 46 +-- lib/pages/live_room/controller.dart | 12 +- lib/pages/live_room/view.dart | 30 +- lib/pages/setting/controller.dart | 9 - lib/pages/video/detail/controller.dart | 19 +- .../detail/reply/widgets/reply_item.dart | 32 +- .../detail/reply/widgets/reply_item_grpc.dart | 37 ++- .../video/detail/widgets/header_control.dart | 90 +++--- lib/pages/webview/controller.dart | 96 ------ lib/pages/webview/index.dart | 4 - lib/pages/webview/view.dart | 110 ------- lib/plugin/pl_player/controller.dart | 6 +- lib/router/app_pages.dart | 2 - lib/utils/danmaku.dart | 2 +- pubspec.lock | 280 ++++++------------ pubspec.yaml | 38 +-- 16 files changed, 216 insertions(+), 597 deletions(-) delete mode 100644 lib/pages/webview/controller.dart delete mode 100644 lib/pages/webview/index.dart delete mode 100644 lib/pages/webview/view.dart diff --git a/lib/pages/danmaku/view.dart b/lib/pages/danmaku/view.dart index d4af115b..ee20476b 100644 --- a/lib/pages/danmaku/view.dart +++ b/lib/pages/danmaku/view.dart @@ -1,7 +1,7 @@ +import 'package:canvas_danmaku/canvas_danmaku.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:hive/hive.dart'; -import 'package:ns_danmaku/ns_danmaku.dart'; import 'package:PiliPalaX/models/danmaku/dm.pb.dart'; import 'package:PiliPalaX/pages/danmaku/index.dart'; import 'package:PiliPalaX/plugin/pl_player/index.dart'; @@ -29,17 +29,8 @@ class _PlDanmakuState extends State { late PlPlayerController playerController; late PlDanmakuController _plDanmakuController; DanmakuController? _controller; - // bool danmuPlayStatus = true; Box setting = GStorage.setting; late bool enableShowDanmaku; - // late List blockTypes; - // late double showArea; - // late double opacityVal; - // late double fontSizeVal; - // late double fontSizeFSVal; - // late double danmakuDurationVal; - // late double strokeWidth; - // late int fontWeight; int latestAddedPosition = -1; bool? _isFullScreen; @@ -83,14 +74,6 @@ class _PlDanmakuState extends State { } } }); - // blockTypes = playerController.blockTypes; - // showArea = playerController.showArea; - // opacityVal = playerController.opacityVal; - // fontSizeVal = playerController.fontSizeVal; - // fontSizeFSVal = playerController.fontSizeFSVal; - // strokeWidth = playerController.strokeWidth; - // fontWeight = playerController.fontWeight; - // danmakuDurationVal = playerController.danmakuDurationVal; } // 播放器状态监听 @@ -121,18 +104,16 @@ class _PlDanmakuState extends State { playerController.playerStatus.status.value == PlayerStatus.playing && currentDanmakuList != null && _controller != null) { - Color? defaultColor = playerController.blockTypes.contains(6) - ? DmUtils.decimalToColor(16777215) - : null; + Color? defaultColor = + playerController.blockTypes.contains(6) ? Colors.white : null; - _controller!.addItems(currentDanmakuList - .map((e) => DanmakuItem( - e.content, - color: defaultColor ?? DmUtils.decimalToColor(e.color), - time: e.progress, - type: DmUtils.getPosition(e.mode), - )) - .toList()); + for (DanmakuElem e in currentDanmakuList) { + _controller!.addDanmaku(DanmakuContentItem( + e.content, + color: defaultColor ?? DmUtils.decimalToColor(e.color), + type: DmUtils.getPosition(e.mode), + )); + } } } @@ -157,7 +138,7 @@ class _PlDanmakuState extends State { () => AnimatedOpacity( opacity: playerController.isOpenDanmu.value ? 1 : 0, duration: const Duration(milliseconds: 100), - child: DanmakuView( + child: DanmakuScreen( createdController: (DanmakuController e) async { playerController.danmakuController = _controller = e; }, @@ -169,13 +150,10 @@ class _PlDanmakuState extends State { hideTop: playerController.blockTypes.contains(5), hideScroll: playerController.blockTypes.contains(2), hideBottom: playerController.blockTypes.contains(4), - duration: playerController.danmakuDurationVal / + duration: playerController.danmakuDurationVal ~/ playerController.playbackSpeed, strokeWidth: playerController.strokeWidth, - // initDuration / - // (danmakuSpeedVal * widget.playerController.playbackSpeed), ), - statusChanged: (isPlaying) {}, ), ), ); diff --git a/lib/pages/live_room/controller.dart b/lib/pages/live_room/controller.dart index 3bb31cc4..550d957c 100644 --- a/lib/pages/live_room/controller.dart +++ b/lib/pages/live_room/controller.dart @@ -4,6 +4,7 @@ import 'package:PiliPalaX/models/live/danmu_info.dart'; import 'package:PiliPalaX/tcp/live.dart'; import 'package:PiliPalaX/utils/danmaku.dart'; import 'package:PiliPalaX/utils/storage.dart'; +import 'package:canvas_danmaku/canvas_danmaku.dart'; import 'package:flutter/material.dart'; import 'package:flutter/rendering.dart'; import 'package:get/get.dart'; @@ -11,8 +12,6 @@ import 'package:PiliPalaX/http/constants.dart'; import 'package:PiliPalaX/http/live.dart'; import 'package:PiliPalaX/models/live/room_info.dart'; import 'package:PiliPalaX/plugin/pl_player/index.dart'; -import 'package:ns_danmaku/danmaku_controller.dart'; -import 'package:ns_danmaku/models/danmaku_item.dart'; import '../../models/live/room_info_h5.dart'; import '../../utils/video_utils.dart'; @@ -164,14 +163,13 @@ class LiveRoomController extends GetxController { }); Map json = jsonDecode(obj['info'][0][15]['extra']); if (showDanmaku) { - controller?.addItems([ - DanmakuItem( + controller?.addDanmaku( + DanmakuContentItem( json['content'], color: DmUtils.decimalToColor(json['color']), - // time: e.progress, type: DmUtils.getPosition(json['mode']), - ) - ]); + ), + ); WidgetsBinding.instance.addPostFrameCallback( (_) => scrollToBottom(), ); diff --git a/lib/pages/live_room/view.dart b/lib/pages/live_room/view.dart index a8e64a87..e40f78d0 100644 --- a/lib/pages/live_room/view.dart +++ b/lib/pages/live_room/view.dart @@ -3,6 +3,7 @@ import 'dart:io'; import 'package:PiliPalaX/http/live.dart'; import 'package:PiliPalaX/pages/live_room/widgets/chat.dart'; import 'package:PiliPalaX/utils/utils.dart'; +import 'package:canvas_danmaku/canvas_danmaku.dart'; import 'package:floating/floating.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; @@ -10,9 +11,6 @@ import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:get/get.dart'; import 'package:PiliPalaX/common/widgets/network_img_layer.dart'; import 'package:PiliPalaX/plugin/pl_player/index.dart'; -import 'package:ns_danmaku/danmaku_controller.dart'; -import 'package:ns_danmaku/danmaku_view.dart'; -import 'package:ns_danmaku/models/danmaku_option.dart'; import 'package:screen_brightness/screen_brightness.dart'; import '../../utils/storage.dart'; @@ -42,15 +40,6 @@ class _LiveRoomPageState extends State late final _node = FocusNode(); late final _ctr = TextEditingController(); - // late bool enableShowDanmaku; - // late List blockTypes; - // late double showArea; - // late double opacityVal; - // late double fontSizeVal; - // late double fontSizeFSVal; - // late double danmakuDurationVal; - // late double strokeWidth; - // late int fontWeight; int latestAddedPosition = -1; bool? _isFullScreen; bool? _isPipMode; @@ -108,14 +97,6 @@ class _LiveRoomPageState extends State Future videoSourceInit() async { _futureBuilder = _liveRoomController.queryLiveInfoH5(); plPlayerController = _liveRoomController.plPlayerController; - // blockTypes = plPlayerController.blockTypes; - // showArea = plPlayerController.showArea; - // opacityVal = plPlayerController.opacityVal; - // fontSizeVal = plPlayerController.fontSizeVal; - // fontSizeFSVal = plPlayerController.fontSizeFSVal; - // strokeWidth = plPlayerController.strokeWidth; - // fontWeight = plPlayerController.fontWeight; - // danmakuDurationVal = plPlayerController.danmakuDurationVal; } @override @@ -158,7 +139,7 @@ class _LiveRoomPageState extends State () => AnimatedOpacity( opacity: plPlayerController.isOpenDanmu.value ? 1 : 0, duration: const Duration(milliseconds: 100), - child: DanmakuView( + child: DanmakuScreen( createdController: (DanmakuController e) async { plPlayerController.danmakuController = _liveRoomController.controller = e; @@ -172,13 +153,10 @@ class _LiveRoomPageState extends State hideTop: plPlayerController.blockTypes.contains(5), hideScroll: plPlayerController.blockTypes.contains(2), hideBottom: plPlayerController.blockTypes.contains(4), - duration: plPlayerController.danmakuDurationVal / + duration: plPlayerController.danmakuDurationVal ~/ plPlayerController.playbackSpeed, strokeWidth: plPlayerController.strokeWidth, - // initDuration / - // (danmakuSpeedVal * widget.playerController.playbackSpeed), ), - statusChanged: (isPlaying) {}, ), ), ), @@ -206,8 +184,6 @@ class _LiveRoomPageState extends State child: Image.asset( 'assets/images/live/default_bg.webp', fit: BoxFit.cover, - // width: Get.width, - // height: Get.height, ), ), ), diff --git a/lib/pages/setting/controller.dart b/lib/pages/setting/controller.dart index 517efbb4..d0eac221 100644 --- a/lib/pages/setting/controller.dart +++ b/lib/pages/setting/controller.dart @@ -8,7 +8,6 @@ import 'package:PiliPalaX/models/common/theme_type.dart'; import 'package:PiliPalaX/utils/feed_back.dart'; import 'package:PiliPalaX/utils/login.dart'; import 'package:PiliPalaX/utils/storage.dart'; -import 'package:webview_flutter/webview_flutter.dart'; import '../../models/common/dynamic_badge_mode.dart'; import '../../models/common/nav_bar_config.dart'; import '../main/index.dart'; @@ -75,14 +74,6 @@ class SettingController extends GetxController { userInfoCache.put('userInfoCache', null); localCache.put(LocalCacheKey.accessKey, {'mid': -1, 'value': '', 'refresh': ''}); - try { - final WebViewController controller = WebViewController(); - controller.clearCache(); - controller.clearLocalStorage(); - WebViewCookieManager().clearCookies(); - } catch (e) { - debugPrint(e.toString()); - } userLogin.value = false; if (Get.isRegistered()) { MainController mainController = Get.find(); diff --git a/lib/pages/video/detail/controller.dart b/lib/pages/video/detail/controller.dart index 551fc65d..9408d3b6 100644 --- a/lib/pages/video/detail/controller.dart +++ b/lib/pages/video/detail/controller.dart @@ -10,6 +10,7 @@ import 'package:PiliPalaX/http/danmaku.dart'; import 'package:PiliPalaX/http/init.dart'; import 'package:PiliPalaX/models/video/play/subtitle.dart'; import 'package:PiliPalaX/utils/extension.dart'; +import 'package:canvas_danmaku/models/danmaku_content_item.dart'; import 'package:dio/dio.dart'; import 'package:floating/floating.dart'; import 'package:flutter/material.dart'; @@ -27,7 +28,6 @@ import 'package:PiliPalaX/utils/storage.dart'; import 'package:PiliPalaX/utils/utils.dart'; import 'package:PiliPalaX/utils/video_utils.dart'; import 'package:material_design_icons_flutter/material_design_icons_flutter.dart'; -import 'package:ns_danmaku/models/danmaku_item.dart'; import '../../../utils/id_utils.dart'; import 'widgets/header_control.dart'; @@ -733,16 +733,13 @@ class VideoDetailController extends GetxController SmartDialog.showToast('发送成功'); // 发送成功,自动预览该弹幕,避免重新请求 // TODO: 暂停状态下预览弹幕仍会移动与计时,可考虑添加到dmSegList或其他方式实现 - plPlayerController.danmakuController?.addItems([ - DanmakuItem( - msg, - color: Colors.white, - time: plPlayerController - .position.value.inMilliseconds, - type: DanmakuItemType.scroll, - isSend: true, - ) - ]); + plPlayerController.danmakuController + ?.addDanmaku(DanmakuContentItem( + msg, + color: Colors.white, + type: DanmakuItemType.scroll, + selfSend: true, + )); Get.back(); } else { SmartDialog.showToast('发送失败,错误信息为${res['msg']}'); diff --git a/lib/pages/video/detail/reply/widgets/reply_item.dart b/lib/pages/video/detail/reply/widgets/reply_item.dart index fae8d370..32fbcf94 100644 --- a/lib/pages/video/detail/reply/widgets/reply_item.dart +++ b/lib/pages/video/detail/reply/widgets/reply_item.dart @@ -349,10 +349,11 @@ class ReplyItem extends StatelessWidget { onReply?.call(); }, child: Row(children: [ - Icon(Icons.reply, - size: 18, - color: - Theme.of(context).colorScheme.outline.withOpacity(0.8)), + Icon( + Icons.reply, + size: 18, + color: Theme.of(context).colorScheme.outline.withOpacity(0.8), + ), const SizedBox(width: 3), Text( '回复', @@ -459,7 +460,7 @@ class ReplyItem extends StatelessWidget { color: Theme.of(context) .colorScheme .onSurface - .withOpacity(0.8), + .withOpacity(0.85), height: 1.6), overflow: TextOverflow.ellipsis, maxLines: 2, @@ -468,10 +469,7 @@ class ReplyItem extends StatelessWidget { TextSpan( text: '${replies![i].member!.uname}', style: TextStyle( - color: Theme.of(context) - .colorScheme - .primary - .withOpacity(0.8), + color: Theme.of(context).colorScheme.primary, ), recognizer: TapGestureRecognizer() ..onTap = () { @@ -538,17 +536,15 @@ class ReplyItem extends StatelessWidget { TextSpan( text: 'UP主等人 ', style: TextStyle( - color: Theme.of(context) - .colorScheme - .onSurface - .withOpacity(0.8))), + color: Theme.of(context) + .colorScheme + .onSurface + .withOpacity(0.85), + )), TextSpan( text: replyControl!.entryText!, style: TextStyle( - color: Theme.of(context) - .colorScheme - .primary - .withOpacity(0.8), + color: Theme.of(context).colorScheme.primary, ), ) ], @@ -686,7 +682,7 @@ class ReplyItem extends StatelessWidget { TextSpan( text: matchStr, style: TextStyle( - color: Theme.of(context).colorScheme.primary.withOpacity(0.8), + color: Theme.of(context).colorScheme.primary, ), recognizer: TapGestureRecognizer() ..onTap = () { diff --git a/lib/pages/video/detail/reply/widgets/reply_item_grpc.dart b/lib/pages/video/detail/reply/widgets/reply_item_grpc.dart index ea6fa19f..19d0a538 100644 --- a/lib/pages/video/detail/reply/widgets/reply_item_grpc.dart +++ b/lib/pages/video/detail/reply/widgets/reply_item_grpc.dart @@ -346,10 +346,11 @@ class ReplyItemGrpc extends StatelessWidget { onReply?.call(); }, child: Row(children: [ - Icon(Icons.reply, - size: 18, - color: - Theme.of(context).colorScheme.outline.withOpacity(0.8)), + Icon( + Icons.reply, + size: 18, + color: Theme.of(context).colorScheme.outline.withOpacity(0.8), + ), const SizedBox(width: 3), Text( '回复', @@ -475,7 +476,7 @@ class ReplyItemGrpc extends StatelessWidget { color: Theme.of(context) .colorScheme .onSurface - .withOpacity(0.8), + .withOpacity(0.85), height: 1.6), overflow: TextOverflow.ellipsis, maxLines: 2, @@ -484,10 +485,7 @@ class ReplyItemGrpc extends StatelessWidget { TextSpan( text: replyItem.replies[i].member.name, style: TextStyle( - color: Theme.of(context) - .colorScheme - .primary - .withOpacity(0.8), + color: Theme.of(context).colorScheme.primary, ), recognizer: TapGestureRecognizer() ..onTap = () { @@ -555,19 +553,18 @@ class ReplyItemGrpc extends StatelessWidget { children: [ if (replyItem.replyControl.upReply) TextSpan( - text: 'UP主等人 ', - style: TextStyle( - color: Theme.of(context) - .colorScheme - .onSurface - .withOpacity(0.8))), + text: 'UP主等人 ', + style: TextStyle( + color: Theme.of(context) + .colorScheme + .onSurface + .withOpacity(0.85), + ), + ), TextSpan( text: replyItem.replyControl.subReplyEntryText, style: TextStyle( - color: Theme.of(context) - .colorScheme - .primary - .withOpacity(0.8), + color: Theme.of(context).colorScheme.primary, ), ) ], @@ -709,7 +706,7 @@ class ReplyItemGrpc extends StatelessWidget { TextSpan( text: matchStr, style: TextStyle( - color: Theme.of(context).colorScheme.primary.withOpacity(0.8), + color: Theme.of(context).colorScheme.primary, ), recognizer: TapGestureRecognizer() ..onTap = () { diff --git a/lib/pages/video/detail/widgets/header_control.dart b/lib/pages/video/detail/widgets/header_control.dart index 85d84441..2233fa96 100644 --- a/lib/pages/video/detail/widgets/header_control.dart +++ b/lib/pages/video/detail/widgets/header_control.dart @@ -3,6 +3,7 @@ import 'dart:io'; import 'dart:math'; import 'package:PiliPalaX/utils/id_utils.dart'; +import 'package:canvas_danmaku/canvas_danmaku.dart'; import 'package:floating/floating.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; @@ -12,7 +13,6 @@ import 'package:get/get.dart'; import 'package:hive/hive.dart'; import 'package:material_design_icons_flutter/material_design_icons_flutter.dart'; import 'package:media_kit/media_kit.dart'; -import 'package:ns_danmaku/ns_danmaku.dart'; import 'package:PiliPalaX/http/user.dart'; import 'package:PiliPalaX/models/video/play/quality.dart'; import 'package:PiliPalaX/models/video/play/url.dart'; @@ -997,13 +997,6 @@ class _HeaderControlState extends State { danmakuWeight; widget.controller!.putDanmakuSettings(); setState(() {}); - // try { - // final DanmakuOption currentOption = - // danmakuController.option; - // final DanmakuOption updatedOption = - // currentOption.copyWith(strokeWidth: val); - // danmakuController.updateOption(updatedOption); - // } catch (_) {} }, ), ), @@ -1028,16 +1021,14 @@ class _HeaderControlState extends State { widget.controller?.putDanmakuSettings(); setState(() {}); try { - final DanmakuOption currentOption = - danmakuController.option; - final DanmakuOption updatedOption = - currentOption.copyWith( - hideTop: blockTypes.contains(5), - hideBottom: blockTypes.contains(4), - hideScroll: blockTypes.contains(2), - // 添加或修改其他需要修改的选项属性 + danmakuController.updateOption( + danmakuController.option.copyWith( + hideTop: blockTypes.contains(5), + hideBottom: blockTypes.contains(4), + hideScroll: blockTypes.contains(2), + // 添加或修改其他需要修改的选项属性 + ), ); - danmakuController.updateOption(updatedOption); } catch (_) {} }, text: i['label'], @@ -1061,11 +1052,10 @@ class _HeaderControlState extends State { widget.controller?.putDanmakuSettings(); setState(() {}); try { - final DanmakuOption currentOption = - danmakuController.option; - final DanmakuOption updatedOption = - currentOption.copyWith(area: i['value']); - danmakuController.updateOption(updatedOption); + danmakuController.updateOption( + danmakuController.option + .copyWith(area: i['value']), + ); } catch (_) {} }, text: i['label'], @@ -1105,11 +1095,9 @@ class _HeaderControlState extends State { widget.controller?.putDanmakuSettings(); setState(() {}); try { - final DanmakuOption currentOption = - danmakuController.option; - final DanmakuOption updatedOption = - currentOption.copyWith(opacity: val); - danmakuController.updateOption(updatedOption); + danmakuController.updateOption( + danmakuController.option.copyWith(opacity: val), + ); } catch (_) {} }, ), @@ -1144,11 +1132,10 @@ class _HeaderControlState extends State { widget.controller?.putDanmakuSettings(); setState(() {}); try { - final DanmakuOption currentOption = - danmakuController.option; - final DanmakuOption updatedOption = - currentOption.copyWith(fontWeight: fontWeight); - danmakuController.updateOption(updatedOption); + danmakuController.updateOption( + danmakuController.option + .copyWith(fontWeight: fontWeight), + ); } catch (_) {} }, ), @@ -1183,11 +1170,10 @@ class _HeaderControlState extends State { widget.controller?.putDanmakuSettings(); setState(() {}); try { - final DanmakuOption currentOption = - danmakuController.option; - final DanmakuOption updatedOption = - currentOption.copyWith(strokeWidth: val); - danmakuController.updateOption(updatedOption); + danmakuController.updateOption( + danmakuController.option + .copyWith(strokeWidth: val), + ); } catch (_) {} }, ), @@ -1223,13 +1209,11 @@ class _HeaderControlState extends State { setState(() {}); if (widget.controller?.isFullScreen.value == false) { try { - final DanmakuOption currentOption = - danmakuController.option; - final DanmakuOption updatedOption = - currentOption.copyWith( - fontSize: (15 * fontSizeVal).toDouble(), + danmakuController.updateOption( + danmakuController.option.copyWith( + fontSize: (15 * fontSizeVal).toDouble(), + ), ); - danmakuController.updateOption(updatedOption); } catch (_) {} } }, @@ -1266,13 +1250,11 @@ class _HeaderControlState extends State { setState(() {}); if (widget.controller?.isFullScreen.value == true) { try { - final DanmakuOption currentOption = - danmakuController.option; - final DanmakuOption updatedOption = - currentOption.copyWith( - fontSize: (15 * fontSizeFSVal).toDouble(), + danmakuController.updateOption( + danmakuController.option.copyWith( + fontSize: (15 * fontSizeFSVal).toDouble(), + ), ); - danmakuController.updateOption(updatedOption); } catch (_) {} } }, @@ -1380,11 +1362,11 @@ class _HeaderControlState extends State { widget.controller?.putDanmakuSettings(); setState(() {}); try { - final DanmakuOption updatedOption = - danmakuController.option.copyWith( - duration: danmakuDurationVal / - widget.controller!.playbackSpeed); - danmakuController.updateOption(updatedOption); + danmakuController.updateOption( + danmakuController.option.copyWith( + duration: danmakuDurationVal ~/ + widget.controller!.playbackSpeed), + ); } catch (_) {} }, ), diff --git a/lib/pages/webview/controller.dart b/lib/pages/webview/controller.dart deleted file mode 100644 index 0354d5b8..00000000 --- a/lib/pages/webview/controller.dart +++ /dev/null @@ -1,96 +0,0 @@ -// ignore_for_file: avoid_print - -import 'package:flutter/material.dart'; -import 'package:get/get.dart'; -import 'package:PiliPalaX/http/init.dart'; -import 'package:PiliPalaX/utils/event_bus.dart'; -import 'package:PiliPalaX/utils/id_utils.dart'; -import 'package:webview_flutter/webview_flutter.dart'; - -class WebviewController extends GetxController { - String url = ''; - RxString type = ''.obs; - RxString pageTitle = ''.obs; - String uaType = ''; - final WebViewController controller = WebViewController(); - RxInt loadProgress = 0.obs; - RxBool loadShow = true.obs; - EventBus eventBus = EventBus(); - - @override - void onInit() { - super.onInit(); - url = Get.parameters['url'] ?? ''; - type.value = Get.parameters['type'] ?? ''; - pageTitle.value = Get.parameters['pageTitle'] ?? ''; - uaType = Get.parameters['uaType'] ?? 'mob'; - - webviewInit(uaType: uaType); - } - - webviewInit({String uaType = 'mob'}) { - controller - ..setUserAgent(Request().headerUa(type: uaType)) - ..setJavaScriptMode(JavaScriptMode.unrestricted) - ..enableZoom(true) - ..setNavigationDelegate( - NavigationDelegate( - // 页面加载 - onProgress: (int progress) { - // Update loading bar. - loadProgress.value = progress; - }, - onPageStarted: (String url) { - final parseUrl = Uri.parse(url); - if (parseUrl.pathSegments.isEmpty) return; - final String str = parseUrl.pathSegments[0]; - final Map matchRes = IdUtils.matchAvorBv(input: str); - final List matchKeys = matchRes.keys.toList(); - if (matchKeys.isNotEmpty) { - if (matchKeys.first == 'BV') { - Get.offAndToNamed( - '/searchResult', - parameters: {'keyword': matchRes['BV']}, - ); - } - } - }, - onPageFinished: (String url) async { - if (type.value == 'liveRoom') { - //注入js - controller.runJavaScriptReturningResult(''' - document.styleSheets[0].insertRule('div.open-app-btn.bili-btn-warp {display:none;}', 0); - document.styleSheets[0].insertRule('#app__display-area > div.control-panel {display:none;}', 0); - ''').then((value) => debugPrint(value.toString())); - } else if (type.value == 'whisper') { - controller.runJavaScriptReturningResult(''' - document.querySelector('#internationalHeader').remove(); - document.querySelector('#message-navbar').remove(); - ''').then((value) => debugPrint(value.toString())); - } - pageTitle.value = await controller.getTitle() ?? ''; - }, - // 加载完成 - onUrlChange: (UrlChange urlChange) async { - loadShow.value = false; - // String url = urlChange.url ?? ''; - }, - onWebResourceError: (WebResourceError error) {}, - onNavigationRequest: (NavigationRequest request) { - if (request.url.startsWith('bilibili://')) { - if (request.url.startsWith('bilibili://video/')) { - String str = Uri.parse(request.url).pathSegments[0]; - Get.offAndToNamed( - '/searchResult', - parameters: {'keyword': str}, - ); - } - return NavigationDecision.prevent; - } - return NavigationDecision.navigate; - }, - ), - ) - ..loadRequest(Uri.parse(url)); - } -} diff --git a/lib/pages/webview/index.dart b/lib/pages/webview/index.dart deleted file mode 100644 index 17efad94..00000000 --- a/lib/pages/webview/index.dart +++ /dev/null @@ -1,4 +0,0 @@ -library webview; - -export './controller.dart'; -export './view.dart'; diff --git a/lib/pages/webview/view.dart b/lib/pages/webview/view.dart deleted file mode 100644 index 21e83b48..00000000 --- a/lib/pages/webview/view.dart +++ /dev/null @@ -1,110 +0,0 @@ -import 'package:PiliPalaX/utils/utils.dart'; -import 'package:flutter/foundation.dart'; -import 'package:flutter/gestures.dart'; -import 'package:flutter/material.dart'; -import 'package:get/get.dart'; -import 'controller.dart'; -import 'package:webview_flutter/webview_flutter.dart'; - -class WebviewPage extends StatefulWidget { - const WebviewPage({super.key}); - - @override - State createState() => _WebviewPageState(); -} - -class _WebviewPageState extends State { - final WebviewController _webviewController = Get.put(WebviewController()); - - @override - void dispose() { - Get.delete(); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar( - title: Obx( - () => Text(_webviewController.pageTitle.value), - ), - actions: [ - const SizedBox(width: 4), - IconButton( - tooltip: '刷新网页', - onPressed: () { - _webviewController.controller.reload(); - }, - icon: Icon(Icons.refresh_outlined, - color: Theme.of(context).colorScheme.primary), - ), - IconButton( - tooltip: '用外部浏览器打开', - onPressed: () { - Utils.launchURL(_webviewController.url); - }, - icon: Icon(Icons.open_in_browser_outlined, - color: Theme.of(context).colorScheme.primary), - ), - const SizedBox(width: 12) - ], - ), - body: Column( - children: [ - Obx( - () => AnimatedContainer( - curve: Curves.easeInOut, - duration: const Duration(milliseconds: 350), - height: _webviewController.loadShow.value ? 4 : 0, - child: LinearProgressIndicator( - key: ValueKey(_webviewController.loadProgress), - value: _webviewController.loadProgress / 100, - ), - ), - ), - if (_webviewController.type.value == 'login') ...[ - Container( - width: double.infinity, - color: Theme.of(context).colorScheme.onInverseSurface, - padding: const EdgeInsets.only( - left: 12, right: 12, top: 6, bottom: 6), - child: const Text('登录成功未自动跳转? 请点击右上角「刷新登录态」'), - ), - const SizedBox(height: 4), - Container( - width: double.infinity, - color: Theme.of(context).colorScheme.onInverseSurface, - padding: const EdgeInsets.only( - left: 12, right: 12, top: 6, bottom: 6), - child: const Text( - '如需二维码登录,请点击「电脑版」,放大左侧二维码,截图后官方app或另一设备扫码,授权后点击「刷新登录态」'), - ), - ], - Expanded( - child: SafeArea( - child: WebViewWidget( - controller: _webviewController.controller, - gestureRecognizers: >{ - Factory( - () => VerticalDragGestureRecognizer(), - ), - Factory( - () => PanGestureRecognizer(), - ), - Factory( - () => ForcePressGestureRecognizer(), - ), - Factory( - () => EagerGestureRecognizer(), - ), - Factory( - () => HorizontalDragGestureRecognizer(), - ), - }), - ), - ), - ], - )); - } -} diff --git a/lib/plugin/pl_player/controller.dart b/lib/plugin/pl_player/controller.dart index a33dc409..37bfc8d2 100644 --- a/lib/plugin/pl_player/controller.dart +++ b/lib/plugin/pl_player/controller.dart @@ -6,6 +6,7 @@ import 'dart:typed_data'; import 'package:PiliPalaX/common/widgets/segment_progress_bar.dart'; import 'package:PiliPalaX/utils/extension.dart'; +import 'package:canvas_danmaku/canvas_danmaku.dart'; import 'package:easy_debounce/easy_throttle.dart'; import 'package:flutter/material.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; @@ -14,7 +15,6 @@ import 'package:get/get.dart'; import 'package:hive/hive.dart'; import 'package:media_kit/media_kit.dart'; import 'package:media_kit_video/media_kit_video.dart'; -import 'package:ns_danmaku/ns_danmaku.dart'; import 'package:PiliPalaX/http/video.dart'; import 'package:PiliPalaX/pages/mine/controller.dart'; import 'package:PiliPalaX/plugin/pl_player/index.dart'; @@ -843,9 +843,9 @@ class PlPlayerController { await _videoPlayerController?.setRate(speed); try { DanmakuOption currentOption = danmakuController!.option; - defaultDuration ??= currentOption.duration; + defaultDuration ??= currentOption.duration.toDouble(); DanmakuOption updatedOption = - currentOption.copyWith(duration: defaultDuration! / speed); + currentOption.copyWith(duration: defaultDuration! ~/ speed); danmakuController!.updateOption(updatedOption); if (speed == 1.0) { defaultDuration = null; diff --git a/lib/router/app_pages.dart b/lib/router/app_pages.dart index cb49697c..7b36a6f3 100644 --- a/lib/router/app_pages.dart +++ b/lib/router/app_pages.dart @@ -57,7 +57,6 @@ import '../pages/subscription/index.dart'; import '../pages/subscription_detail/index.dart'; import '../pages/video/detail/index.dart'; import '../pages/video/detail/reply_reply/index.dart'; -import '../pages/webview/index.dart'; import '../pages/whisper/index.dart'; import '../pages/whisper_detail/index.dart'; import '../utils/storage.dart'; @@ -73,7 +72,6 @@ class Routes { // 视频详情 CustomGetPage(name: '/video', page: () => const VideoDetailPage()), // - CustomGetPage(name: '/webview', page: () => const WebviewPage()), CustomGetPage(name: '/webviewnew', page: () => const WebviewPageNew()), // 设置 CustomGetPage(name: '/setting', page: () => const SettingPage()), diff --git a/lib/utils/danmaku.dart b/lib/utils/danmaku.dart index 8305edec..56f1e686 100644 --- a/lib/utils/danmaku.dart +++ b/lib/utils/danmaku.dart @@ -1,5 +1,5 @@ +import 'package:canvas_danmaku/models/danmaku_content_item.dart'; import 'package:flutter/material.dart'; -import 'package:ns_danmaku/ns_danmaku.dart'; class DmUtils { static Color decimalToColor(int decimalColor) { diff --git a/pubspec.lock b/pubspec.lock index 906f330e..cc97d935 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -42,10 +42,10 @@ packages: dependency: "direct main" description: name: app_links - sha256: ad1a6d598e7e39b46a34f746f9a8b011ee147e4c275d407fa457e7a62f84dd99 + sha256: "433df2e61b10519407475d7f69e470789d23d593f28224c38ba1068597be7950" url: "https://pub.dev" source: hosted - version: "6.3.2" + version: "6.3.3" app_links_linux: dependency: transitive description: @@ -74,10 +74,10 @@ packages: dependency: transitive description: name: archive - sha256: cb6a278ef2dbb298455e1a713bda08524a175630ec643a242c399c932a0a1f7d + sha256: "08064924cbf0ab88280a0c3f60db9dd24fec693927e725ecb176f16c629d1cb8" url: "https://pub.dev" source: hosted - version: "3.6.1" + version: "4.0.1" args: dependency: transitive description: @@ -130,10 +130,10 @@ packages: dependency: "direct main" description: name: audio_session - sha256: "343e83bc7809fbda2591a49e525d6b63213ade10c76f15813be9aed6657b3261" + sha256: b2a26ba8b7efa1790d6460e82971fde3e398cfbe2295df9dea22f3499d2c12a7 url: "https://pub.dev" source: hosted - version: "0.1.21" + version: "0.1.23" auto_orientation: dependency: "direct main" description: @@ -247,14 +247,23 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.1" + canvas_danmaku: + dependency: "direct main" + description: + path: "." + ref: main + resolved-ref: "7861474d44739adcf494dd3881cc64cb1a36ed72" + url: "https://github.com/bggRGjQaUbCoE/canvas_danmaku.git" + source: git + version: "0.2.5" catcher_2: dependency: "direct main" description: name: catcher_2 - sha256: "420ccd936ec42080e9c93b7ce82a9c6a2a7c1e700d4d6288cb0caa0132276c8c" + sha256: b3bebe77f31452f15f8fafa20ac5625311d7173c62f1884733479ee07dfd7c1b url: "https://pub.dev" source: hosted - version: "2.0.2" + version: "2.1.0" characters: dependency: transitive description: @@ -268,10 +277,10 @@ packages: description: path: "packages/chat_bottom_container" ref: main - resolved-ref: "5bd612a5ee2f0025460ec50090044209b3d43cb2" + resolved-ref: "475331343d9ae041807d0d862a88fb1d2b7a64a1" url: "https://github.com/pye52/flutter_chat_packages.git" source: git - version: "0.2.0" + version: "0.3.0" checked_yaml: dependency: transitive description: @@ -316,10 +325,10 @@ packages: dependency: "direct main" description: name: connectivity_plus - sha256: "876849631b0c7dc20f8b471a2a03142841b482438e3b707955464f5ffca3e4c3" + sha256: e0817759ec6d2d8e57eb234e6e57d2173931367a865850c7acea40d4b4f9c27d url: "https://pub.dev" source: hosted - version: "6.1.0" + version: "6.1.1" connectivity_plus_platform_interface: dependency: transitive description: @@ -376,14 +385,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.8" - custom_sliding_segmented_control: - dependency: "direct main" - description: - name: custom_sliding_segmented_control - sha256: eca54f37c999351522a6aa82bf451241df05ae4e231d593f77034615251034eb - url: "https://pub.dev" - source: hosted - version: "1.8.4" dart_style: dependency: transitive description: @@ -404,18 +405,18 @@ packages: dependency: "direct main" description: name: device_info_plus - sha256: f545ffbadee826f26f2e1a0f0cbd667ae9a6011cc0f77c0f8f00a969655e6e95 + sha256: "4fa68e53e26ab17b70ca39f072c285562cfc1589df5bb1e9295db90f6645f431" url: "https://pub.dev" source: hosted - version: "11.1.1" + version: "11.2.0" device_info_plus_platform_interface: dependency: transitive description: name: device_info_plus_platform_interface - sha256: "282d3cf731045a2feb66abfe61bbc40870ae50a3ed10a4d3d217556c35c8c2ba" + sha256: "0b04e02b30791224b31969eb1b50d723498f402971bff3630bca2ba839bd1ed2" url: "https://pub.dev" source: hosted - version: "7.0.1" + version: "7.0.2" dio: dependency: "direct main" description: @@ -448,14 +449,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.0.0" - dismissible_page: - dependency: "direct main" - description: - name: dismissible_page - sha256: "5b2316f770fe83583f770df1f6505cb19102081c5971979806e77f2e507a9958" - url: "https://pub.dev" - source: hosted - version: "1.0.2" dynamic_color: dependency: "direct main" description: @@ -488,14 +481,6 @@ packages: url: "https://pub.dev" source: hosted version: "5.0.1" - extended_list: - dependency: transitive - description: - name: extended_list - sha256: fa7bcb2645b7d6849918d499fda6ea917cda85e43b2e06dfec2a29b649722974 - url: "https://pub.dev" - source: hosted - version: "3.0.2" extended_list_library: dependency: transitive description: @@ -512,22 +497,6 @@ packages: url: "https://pub.dev" source: hosted version: "6.2.1" - extended_text: - dependency: "direct main" - description: - name: extended_text - sha256: b0cdd240b4ddf61d18d7e33e7775195971f2d033bd69706fa897446dc96c3b81 - url: "https://pub.dev" - source: hosted - version: "14.1.0" - extended_text_library: - dependency: transitive - description: - name: extended_text_library - sha256: "55d09098ec56fab0d9a8a68950ca0bbf2efa1327937f7cec6af6dfa066234829" - url: "https://pub.dev" - source: hosted - version: "12.0.0" fading_edge_scrollview: dependency: "direct overridden" description: @@ -564,10 +533,10 @@ packages: dependency: transitive description: name: file_selector_linux - sha256: b2b91daf8a68ecfa4a01b778a6f52edef9b14ecd506e771488ea0f2e0784198b + sha256: "54cbbd957e1156d29548c7d9b9ec0c0ebb6de0a90452198683a7d23aed617a33" url: "https://pub.dev" source: hosted - version: "0.9.3+1" + version: "0.9.3+2" file_selector_macos: dependency: transitive description: @@ -666,10 +635,10 @@ packages: dependency: transitive description: name: flutter_inappwebview_internal_annotations - sha256: "5f80fd30e208ddded7dbbcd0d569e7995f9f63d45ea3f548d8dd4c0b473fb4c8" + sha256: "787171d43f8af67864740b6f04166c13190aa74a1468a1f1f1e9ee5b90c359cd" url: "https://pub.dev" source: hosted - version: "1.1.1" + version: "1.2.0" flutter_inappwebview_ios: dependency: transitive description: @@ -714,10 +683,10 @@ packages: dependency: "direct dev" description: name: flutter_launcher_icons - sha256: "619817c4b65b322b5104b6bb6dfe6cda62d9729bd7ad4303ecc8b4e690a67a77" + sha256: "31cd0885738e87c72d6f055564d37fabcdacee743b396b78c7636c169cac64f5" url: "https://pub.dev" source: hosted - version: "0.14.1" + version: "0.14.2" flutter_lints: dependency: "direct dev" description: @@ -767,10 +736,10 @@ packages: dependency: "direct main" description: name: flutter_svg - sha256: "578bd8c508144fdaffd4f77b8ef2d8c523602275cd697cc3db284dbd762ef4ce" + sha256: "54900a1a1243f3c4a5506d853a2b5c2dbc38d5f27e52a52618a8054401431123" url: "https://pub.dev" source: hosted - version: "2.0.14" + version: "2.0.16" flutter_test: dependency: "direct dev" description: flutter @@ -793,10 +762,10 @@ packages: dependency: transitive description: name: fluttertoast - sha256: "95f349437aeebe524ef7d6c9bde3e6b4772717cf46a0eb6a3ceaddc740b297cc" + sha256: "24467dc20bbe49fd63e57d8e190798c4d22cbbdac30e54209d153a15273721d1" url: "https://pub.dev" source: hosted - version: "8.2.8" + version: "8.2.10" font_awesome_flutter: dependency: "direct main" description: @@ -945,10 +914,10 @@ packages: dependency: transitive description: name: image - sha256: f31d52537dc417fdcde36088fdf11d191026fd5e4fae742491ebd40e5a8bea7d + sha256: "599d08e369969bdf83138f5b4e0a7e823d3f992f23b8a64dd626877c37013533" url: "https://pub.dev" source: hosted - version: "4.3.0" + version: "4.4.0" image_cropper: dependency: "direct main" description: @@ -985,10 +954,10 @@ packages: dependency: transitive description: name: image_picker_android - sha256: "8faba09ba361d4b246dc0a17cb4289b3324c2b9f6db7b3d457ee69106a86bd32" + sha256: fa8141602fde3f7e2f81dbf043613eb44dfa325fa0bcf93c0f142c9f7a2c193e url: "https://pub.dev" source: hosted - version: "0.8.12+17" + version: "0.8.12+18" image_picker_for_web: dependency: transitive description: @@ -1049,10 +1018,10 @@ packages: dependency: transitive description: name: io - sha256: "2ec25704aba361659e10e3e5f5d672068d332fc8ac516421d483a11e5cbd061e" + sha256: dfd5a80599cf0165756e3181807ed3e77daf6dd4137caaad72d0b7931597650b url: "https://pub.dev" source: hosted - version: "1.0.4" + version: "1.0.5" js: dependency: transitive description: @@ -1109,22 +1078,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.2" - loading_more_list: - dependency: "direct main" - description: - name: loading_more_list - sha256: "615eeb5e73b653b2256a6482d7a021eb94d18ae51ccb2c033bef1355db27f428" - url: "https://pub.dev" - source: hosted - version: "7.1.0" - loading_more_list_library: - dependency: transitive - description: - name: loading_more_list_library - sha256: de6b57edbab83022180f053ec3f598dd5e1192cfd6a285882b8155e3cb5dc581 - url: "https://pub.dev" - source: hosted - version: "3.0.0" logger: dependency: "direct main" description: @@ -1153,10 +1106,10 @@ packages: dependency: transitive description: name: mailer - sha256: "21fde1497c79f402cb5fa7c50abd58927d360139e492546c941ee10767684fac" + sha256: e907087cd00719898c493f720dd326af73b00b406ab4af8e79f15d7c5fc24035 url: "https://pub.dev" source: hosted - version: "6.2.0" + version: "6.3.0" marquee: dependency: "direct main" description: @@ -1293,15 +1246,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.5.0" - ns_danmaku: - dependency: "direct main" - description: - path: "." - ref: master - resolved-ref: dbc28547963dfb6c67fea968459f08d81bb1733c - url: "https://github.com/orz12/flutter_ns_danmaku.git" - source: git - version: "0.0.5" octo_image: dependency: transitive description: @@ -1314,26 +1258,26 @@ packages: dependency: transitive description: name: package_config - sha256: "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd" + sha256: "92d4488434b520a62570293fbd33bb556c7d49230791c1b4bbd973baf6d2dc67" url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.1.1" package_info_plus: dependency: "direct main" description: name: package_info_plus - sha256: da8d9ac8c4b1df253d1a328b7bf01ae77ef132833479ab40763334db13b91cce + sha256: "70c421fe9d9cc1a9a7f3b05ae56befd469fe4f8daa3b484823141a55442d858d" url: "https://pub.dev" source: hosted - version: "8.1.1" + version: "8.1.2" package_info_plus_platform_interface: dependency: transitive description: name: package_info_plus_platform_interface - sha256: ac1f4a4847f1ade8e6a87d1f39f5d7c67490738642e2542f559ec38c37489a66 + sha256: a5ef9986efc7bf772f2696183a3992615baa76c1ffb1189318dd8803778fb05b url: "https://pub.dev" source: hosted - version: "3.0.1" + version: "3.0.2" path: dependency: "direct overridden" description: @@ -1362,18 +1306,18 @@ packages: dependency: transitive description: name: path_provider_android - sha256: c464428172cb986b758c6d1724c603097febb8fb855aa265aeecc9280c294d4a + sha256: "4adf4fd5423ec60a29506c76581bc05854c55e3a0b72d35bb28d661c9686edf2" url: "https://pub.dev" source: hosted - version: "2.2.12" + version: "2.2.15" path_provider_foundation: dependency: transitive description: name: path_provider_foundation - sha256: f234384a3fdd67f989b4d54a5d73ca2a6c422fa55ae694381ae0f4375cd1ea16 + sha256: "4843174df4d288f5e29185bd6e72a6fbdf5a4a4602717eed565497429f179942" url: "https://pub.dev" source: hosted - version: "2.4.0" + version: "2.4.1" path_provider_linux: dependency: transitive description: @@ -1426,10 +1370,10 @@ packages: dependency: transitive description: name: permission_handler_html - sha256: "6b9cb54b7135073841a35513fba39e598b421702d5f4d92319992fd6eb5532a9" + sha256: "38f000e83355abb3392140f6bc3030660cfaef189e1f87824facb76300b4ff24" url: "https://pub.dev" source: hosted - version: "0.1.3+4" + version: "0.1.3+5" permission_handler_platform_interface: dependency: transitive description: @@ -1486,6 +1430,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.5.1" + posix: + dependency: transitive + description: + name: posix + sha256: a0117dc2167805aa9125b82eee515cc891819bac2f538c83646d355b16f58b9a + url: "https://pub.dev" + source: hosted + version: "6.0.1" protobuf: dependency: "direct main" description: @@ -1498,10 +1450,10 @@ packages: dependency: transitive description: name: pub_semver - sha256: "40d3ab1bbd474c4c2328c91e3a7df8c6dd629b79ece4c4bd04bee496a224fb0c" + sha256: "7b3cfbf654f3edd0c6298ecd5be782ce997ddf0e00531b9464b55245185bbbbd" url: "https://pub.dev" source: hosted - version: "2.1.4" + version: "2.1.5" pubspec_parse: dependency: transitive description: @@ -1510,14 +1462,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.0" - pull_to_refresh_notification: - dependency: "direct main" - description: - name: pull_to_refresh_notification - sha256: "5a06c242a6c3264bac3a7facbe2c6d317a5f54fc10c20b556dbd34ceee32c9aa" - url: "https://pub.dev" - source: hosted - version: "3.1.0" qr: dependency: transitive description: @@ -1554,18 +1498,18 @@ packages: dependency: "direct main" description: name: saver_gallery - sha256: ef9b06de9a947fa85226cd478cf3af394c8464594f87b4a6c373772a19dc372b + sha256: bf59475e50b73d666630bed7a5fdb621fed92d637f64e3c61ce81653ec6a833c url: "https://pub.dev" source: hosted - version: "4.0.0" + version: "4.0.1" screen_brightness: dependency: "direct overridden" description: name: screen_brightness - sha256: a43fdbccd5b90044f68057412dde7715cd7499a4c24f5d5da7e01ed4cf41e0af + sha256: a9a98666045ad4ea0d82bca09fe5f007b8440e315075dc948c1507a9b72ee41f url: "https://pub.dev" source: hosted - version: "2.0.0+2" + version: "2.0.1" screen_brightness_android: dependency: transitive description: @@ -1602,10 +1546,10 @@ packages: dependency: transitive description: name: screen_brightness_windows - sha256: fa97ae838c42f762f04d2d70adb3d957350d6a84e3598ec800e269e7c466eedd + sha256: "5edbfb1dcaedf960f6858efac8ca45d6c18faae17df86e2c03137d3a563ea155" url: "https://pub.dev" source: hosted - version: "2.0.0" + version: "2.0.1" scrollable_positioned_list: dependency: "direct main" description: @@ -1618,10 +1562,10 @@ packages: dependency: transitive description: name: sentry - sha256: "2440763ae96fa8fd1bcdfc224f5232e1b7a09af76a72f4e626ee313a261faf6f" + sha256: "0c2bb3c23c074130f60b2f6ee0851bd3714021758ac86df87fdd7cde6783feff" url: "https://pub.dev" source: hosted - version: "8.10.1" + version: "8.11.0" share_plus: dependency: "direct main" description: @@ -1635,10 +1579,10 @@ packages: dependency: transitive description: name: share_plus_platform_interface - sha256: c57c0bbfec7142e3a0f55633be504b796af72e60e3c791b44d5a017b985f7a48 + sha256: cc012a23fc2d479854e6c80150696c4a5f5bb62cb89af4de1c505cf78d0a5d0b url: "https://pub.dev" source: hosted - version: "5.0.1" + version: "5.0.2" shared_preferences: dependency: transitive description: @@ -1651,18 +1595,18 @@ packages: dependency: transitive description: name: shared_preferences_android - sha256: "3b9febd815c9ca29c9e3520d50ec32f49157711e143b7a4ca039eb87e8ade5ab" + sha256: "02a7d8a9ef346c9af715811b01fbd8e27845ad2c41148eefd31321471b41863d" url: "https://pub.dev" source: hosted - version: "2.3.3" + version: "2.4.0" shared_preferences_foundation: dependency: transitive description: name: shared_preferences_foundation - sha256: "07e050c7cd39bad516f8d64c455f04508d09df104be326d8c02551590a0d513d" + sha256: "6a52cfcdaeac77cad8c97b539ff688ccfc458c007b4db12be584fbe5c0e49e03" url: "https://pub.dev" source: hosted - version: "2.5.3" + version: "2.5.4" shared_preferences_linux: dependency: transitive description: @@ -1707,10 +1651,10 @@ packages: dependency: transitive description: name: shelf_web_socket - sha256: "073c147238594ecd0d193f3456a5fe91c4b0abbcc68bf5cd95b36c4e194ac611" + sha256: cc36c297b52866d203dbf9332263c94becc2fe0ceaa9681d07b6ef9807023b67 url: "https://pub.dev" source: hosted - version: "2.0.0" + version: "2.0.1" sky_engine: dependency: transitive description: flutter @@ -1768,10 +1712,10 @@ packages: dependency: transitive description: name: sqflite_common - sha256: "4468b24876d673418a7b7147e5a08a715b4998a7ae69227acafaab762e0e5490" + sha256: "761b9740ecbd4d3e66b8916d784e581861fd3c3553eda85e167bc49fdb68f709" url: "https://pub.dev" source: hosted - version: "2.5.4+5" + version: "2.5.4+6" sqflite_darwin: dependency: transitive description: @@ -1864,10 +1808,10 @@ packages: dependency: transitive description: name: timing - sha256: "70a3b636575d4163c477e6de42f247a23b315ae20e86442bebe32d3cabf61c32" + sha256: "62ee18aca144e4a9f29d212f5a4c6a053be252b895ab14b5821996cff4ed90fe" url: "https://pub.dev" source: hosted - version: "1.0.1" + version: "1.0.2" typed_data: dependency: transitive description: @@ -1885,7 +1829,7 @@ packages: source: hosted version: "2.2.2" universal_platform: - dependency: "direct main" + dependency: transitive description: name: universal_platform sha256: "64e16458a0ea9b99260ceb5467a214c1f298d647c659af1bff6d3bf82536b1ec" @@ -1920,10 +1864,10 @@ packages: dependency: transitive description: name: url_launcher_ios - sha256: e43b677296fadce447e987a2f519dcf5f6d1e527dc35d01ffab4fff5b8a7063e + sha256: "16a513b6c12bb419304e72ea0ae2ab4fed569920d1c7cb850263fe3acc824626" url: "https://pub.dev" source: hosted - version: "6.3.1" + version: "6.3.2" url_launcher_linux: dependency: transitive description: @@ -1936,10 +1880,10 @@ packages: dependency: transitive description: name: url_launcher_macos - sha256: "769549c999acdb42b8bcfa7c43d72bf79a382ca7441ab18a808e101149daf672" + sha256: "17ba2000b847f334f16626a574c702b196723af2a289e7a93ffcb79acff855c2" url: "https://pub.dev" source: hosted - version: "3.2.1" + version: "3.2.2" url_launcher_platform_interface: dependency: transitive description: @@ -1976,10 +1920,10 @@ packages: dependency: transitive description: name: vector_graphics - sha256: "773c9522d66d523e1c7b25dfb95cc91c26a1e17b107039cfe147285e92de7878" + sha256: "27d5fefe86fb9aace4a9f8375b56b3c292b64d8c04510df230f849850d912cb7" url: "https://pub.dev" source: hosted - version: "1.1.14" + version: "1.1.15" vector_graphics_codec: dependency: transitive description: @@ -1992,10 +1936,10 @@ packages: dependency: transitive description: name: vector_graphics_compiler - sha256: ab9ff38fc771e9ee1139320adbe3d18a60327370c218c60752068ebee4b49ab1 + sha256: "1b4b9e706a10294258727674a340ae0d6e64a7231980f9f9a3d12e4b42407aad" url: "https://pub.dev" source: hosted - version: "1.1.15" + version: "1.1.16" vector_math: dependency: transitive description: @@ -2092,46 +2036,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.0.6" - webview_flutter: - dependency: "direct main" - description: - name: webview_flutter - sha256: "889a0a678e7c793c308c68739996227c9661590605e70b1f6cf6b9a6634f7aec" - url: "https://pub.dev" - source: hosted - version: "4.10.0" - webview_flutter_android: - dependency: transitive - description: - name: webview_flutter_android - sha256: "86c2d01c37c4578ee46560109cf2e18fb271f0d080a796f09188d0952352e057" - url: "https://pub.dev" - source: hosted - version: "4.0.2" - webview_flutter_platform_interface: - dependency: transitive - description: - name: webview_flutter_platform_interface - sha256: d937581d6e558908d7ae3dc1989c4f87b786891ab47bb9df7de548a151779d8d - url: "https://pub.dev" - source: hosted - version: "2.10.0" - webview_flutter_wkwebview: - dependency: transitive - description: - name: webview_flutter_wkwebview - sha256: "3be297aa4ca78205abdd284cf55f168c35246c75b3079990ad8ba9d257681a30" - url: "https://pub.dev" - source: hosted - version: "3.16.2" win32: dependency: transitive description: name: win32 - sha256: "84ba388638ed7a8cb3445a320c8273136ab2631cd5f2c57888335504ddab1bc2" + sha256: "8b338d4486ab3fbc0ba0db9f9b4f5239b6697fcee427939a40e720cbb9ee0a69" url: "https://pub.dev" source: hosted - version: "5.8.0" + version: "5.9.0" win32_registry: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 197e4563..a9bd81ed 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -44,13 +44,13 @@ dependencies: dio: ^5.7.0 cookie_jar: ^4.0.8 dio_cookie_manager: ^3.1.1 - connectivity_plus: ^6.1.0 + connectivity_plus: ^6.1.1 dio_http2_adapter: ^2.5.3 # 图片 cached_network_image: ^3.4.1 # extended_image: ^9.0.7 - saver_gallery: ^4.0.0 + saver_gallery: ^4.0.1 # QRCode qr_flutter: ^4.1.0 @@ -61,7 +61,7 @@ dependencies: hive_flutter: ^1.1.0 # 设备信息 - device_info_plus: ^11.1.1 + device_info_plus: ^11.2.0 # 权限 permission_handler: ^11.3.1 # 分享 @@ -74,22 +74,22 @@ dependencies: # cookie 管理 webview_cookie_manager: ^2.0.6 # 浏览器 - webview_flutter: ^4.10.0 + # webview_flutter: ^4.10.0 flutter_inappwebview: ^6.1.5 # 解决sliver滑动不同步 extended_nested_scroll_view: ^6.2.1 # 上拉加载 - loading_more_list: ^7.1.0 + # loading_more_list: ^7.1.0 # 下拉刷新 - pull_to_refresh_notification: ^3.1.0 + # pull_to_refresh_notification: ^3.1.0 # 图标 font_awesome_flutter: ^10.8.0 material_design_icons_flutter: ^7.0.7296 # toast flutter_smart_dialog: ^4.9.8+5 # 下滑关闭 - dismissible_page: ^1.0.2 - custom_sliding_segmented_control: ^1.8.4 + # dismissible_page: ^1.0.2 + # custom_sliding_segmented_control: ^1.8.4 # 加密 crypto: ^3.0.6 encrypt: ^5.0.3 @@ -101,12 +101,12 @@ dependencies: # 媒体通知 audio_service: ^0.18.15 - audio_session: ^0.1.21 + audio_session: ^0.1.23 # 音量、亮度、屏幕控制 - flutter_volume_controller: ^1.3.2 + flutter_volume_controller: ^1.3.3 wakelock_plus: ^1.2.8 - universal_platform: ^1.1.0 + # universal_platform: ^1.1.0 auto_orientation: git: url: https://github.com/orz12/auto_orientation.git @@ -124,10 +124,14 @@ dependencies: # scheme跳转 app_links: ^6.3.2 # 弹幕 - ns_danmaku: + # ns_danmaku: + # git: + # url: https://github.com/bggRGjQaUbCoE/flutter_ns_danmaku.git + # ref: master + canvas_danmaku: git: - url: https://github.com/orz12/flutter_ns_danmaku.git - ref: master + url: https://github.com/bggRGjQaUbCoE/canvas_danmaku.git + ref: main # 状态栏图标控制 status_bar_control: ^3.2.1 # 代理 @@ -147,14 +151,14 @@ dependencies: uuid: ^4.5.1 scrollable_positioned_list: ^0.3.8 nil: ^1.1.1 - catcher_2: ^2.0.2 + catcher_2: ^2.1.0 logger: ^2.5.0 #瀑布流 waterfall_flow: ^3.1.0 #跑马灯 marquee: ^2.3.0 #富文本 - extended_text: ^14.1.0 + # extended_text: ^14.1.0 # chat_bottom_container: ^0.2.0 chat_bottom_container: git: @@ -172,7 +176,7 @@ dependencies: flex_seed_scheme: ^3.4.1 dependency_overrides: - screen_brightness: ^2.0.0+2 + screen_brightness: ^2.0.1 path: 1.9.1 # mime: # git: https://github.com/orz12/mime.git