diff --git a/lib/pages/dynamics_topic/view.dart b/lib/pages/dynamics_topic/view.dart index 7080c776d..47ded07ca 100644 --- a/lib/pages/dynamics_topic/view.dart +++ b/lib/pages/dynamics_topic/view.dart @@ -12,6 +12,7 @@ import 'package:PiliPlus/models_new/dynamic/dyn_topic_top/top_details.dart'; import 'package:PiliPlus/pages/dynamics/widgets/dynamic_panel.dart'; import 'package:PiliPlus/pages/dynamics_create/view.dart'; import 'package:PiliPlus/pages/dynamics_topic/controller.dart'; +import 'package:PiliPlus/utils/extension/theme_ext.dart'; import 'package:PiliPlus/utils/global_data.dart'; import 'package:PiliPlus/utils/num_utils.dart'; import 'package:PiliPlus/utils/page_utils.dart'; @@ -325,9 +326,8 @@ class _DynTopicPageState extends State with DynMixin { SmartDialog.showToast('账号未登录'); return; } - final isDark = Get.isDarkMode; PageUtils.inAppWebview( - 'https://www.bilibili.com/h5/topic-active/topic-report?topic_id=${_controller.topicId}&topic_name=${_controller.topicName}&native.theme=${isDark ? 2 : 1}&night=${isDark ? 1 : 0}', + 'https://www.bilibili.com/h5/topic-active/topic-report?topic_id=${_controller.topicId}&topic_name=${_controller.topicName}&${Utils.themeUrl(theme.colorScheme.isDark)}', ); }, ), diff --git a/lib/pages/emote/view.dart b/lib/pages/emote/view.dart index 257fe9e56..8a391e8c1 100644 --- a/lib/pages/emote/view.dart +++ b/lib/pages/emote/view.dart @@ -8,6 +8,8 @@ import 'package:PiliPlus/models/common/image_type.dart'; import 'package:PiliPlus/models_new/emote/emote.dart'; import 'package:PiliPlus/models_new/emote/package.dart'; import 'package:PiliPlus/pages/emote/controller.dart'; +import 'package:PiliPlus/utils/extension/theme_ext.dart'; +import 'package:PiliPlus/utils/utils.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; @@ -175,16 +177,13 @@ class _EmotePanelState extends State iconSize: 20, iconColor: theme.colorScheme.onSurfaceVariant .withValues(alpha: 0.8), - onPressed: () { - final isDark = Get.isDarkMode; - Get.toNamed( - '/webview', - parameters: { - 'url': - 'https://www.bilibili.com/h5/mall/emoji-package/home?navhide=1&native.theme=${isDark ? 2 : 1}&night=${isDark ? 1 : 0}', - }, - ); - }, + onPressed: () => Get.toNamed( + '/webview', + parameters: { + 'url': + 'https://www.bilibili.com/h5/mall/emoji-package/home?navhide=1&${Utils.themeUrl(theme.colorScheme.isDark)}', + }, + ), icon: const Icon(Icons.settings), ), ), diff --git a/lib/pages/follow/widgets/follow_item.dart b/lib/pages/follow/widgets/follow_item.dart index 3b22772b1..b4c038883 100644 --- a/lib/pages/follow/widgets/follow_item.dart +++ b/lib/pages/follow/widgets/follow_item.dart @@ -87,7 +87,9 @@ class FollowItem extends StatelessWidget { callback: callback, ), style: FilledButton.styleFrom( - padding: const EdgeInsets.fromLTRB(15, 0, 15, 0), + visualDensity: .compact, + tapTargetSize: .shrinkWrap, + padding: const .symmetric(horizontal: 15), foregroundColor: item.attribute == -1 ? null : colorScheme.outline, diff --git a/lib/pages/live/view.dart b/lib/pages/live/view.dart index 9f217488a..855d0eae3 100644 --- a/lib/pages/live/view.dart +++ b/lib/pages/live/view.dart @@ -21,6 +21,7 @@ import 'package:PiliPlus/utils/extension/theme_ext.dart'; import 'package:PiliPlus/utils/grid.dart'; import 'package:PiliPlus/utils/page_utils.dart'; import 'package:PiliPlus/utils/platform_utils.dart'; +import 'package:PiliPlus/utils/utils.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; @@ -132,17 +133,14 @@ class _LivePageState extends CommonPageState context: context, tooltip: '游戏赛事', icon: const Icon(Icons.gamepad), - onPressed: () { - final isDark = theme.brightness.isDark; - Get.toNamed( - '/webview', - parameters: { - 'uaType': 'mob', - 'url': - 'https://www.bilibili.com/h5/match/data/home?navhide=1&native.theme=${isDark ? 2 : 1}&night=${isDark ? 1 : 0}', - }, - ); - }, + onPressed: () => Get.toNamed( + '/webview', + parameters: { + 'uaType': 'mob', + 'url': + 'https://www.bilibili.com/h5/match/data/home?navhide=1&${Utils.themeUrl(theme.brightness.isDark)}', + }, + ), ), const SizedBox(width: 8), iconButton( diff --git a/lib/pages/live_room/view.dart b/lib/pages/live_room/view.dart index c65bca3af..a03d5bedb 100644 --- a/lib/pages/live_room/view.dart +++ b/lib/pages/live_room/view.dart @@ -520,13 +520,14 @@ class _LiveRoomPageState extends State type: ImageType.avatar, src: roomInfoH5.anchorInfo!.baseInfo!.face, ), - Expanded( + Flexible( child: Column( spacing: 1, crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( spacing: 10, + mainAxisSize: .min, crossAxisAlignment: CrossAxisAlignment.end, children: [ Flexible( @@ -543,6 +544,7 @@ class _LiveRoomPageState extends State ), Row( spacing: 10, + mainAxisSize: .min, children: [ _liveRoomController.watchedWidget, _liveRoomController.timeWidget, diff --git a/lib/pages/whisper/view.dart b/lib/pages/whisper/view.dart index 16d84593b..488a1ea17 100644 --- a/lib/pages/whisper/view.dart +++ b/lib/pages/whisper/view.dart @@ -5,7 +5,9 @@ import 'package:PiliPlus/grpc/bilibili/app/im/v1.pb.dart'; import 'package:PiliPlus/http/loading_state.dart'; import 'package:PiliPlus/pages/whisper/controller.dart'; import 'package:PiliPlus/pages/whisper/widgets/item.dart'; +import 'package:PiliPlus/utils/extension/theme_ext.dart'; import 'package:PiliPlus/utils/extension/three_dot_ext.dart'; +import 'package:PiliPlus/utils/utils.dart'; import 'package:flutter/material.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:get/get.dart'; @@ -22,16 +24,29 @@ class _WhisperPageState extends State { @override Widget build(BuildContext context) { + final theme = Theme.of(context); final padding = MediaQuery.viewPaddingOf(context); return Scaffold( resizeToAvoidBottomInset: false, appBar: AppBar( title: const Text('消息'), actions: [ + IconButton( + tooltip: '新增粉丝', + onPressed: () => Get.toNamed( + '/webview', + parameters: { + 'url': + 'https://www.bilibili.com/h5/follow/newFans?navhide=1&${Utils.themeUrl(theme.colorScheme.isDark)}', + }, + ), + icon: const Icon(Icons.account_circle_outlined), + ), Obx(() { final outsideItem = _controller.outsideItem.value; if (outsideItem != null && outsideItem.isNotEmpty) { return Row( + mainAxisSize: .min, children: outsideItem.map((e) { return IconButton( tooltip: e.hasTitle() ? e.title : null, @@ -74,6 +89,7 @@ class _WhisperPageState extends State { } return const SizedBox.shrink(); }), + const SizedBox(width: 5), ], ), body: refreshIndicator( @@ -81,7 +97,7 @@ class _WhisperPageState extends State { child: CustomScrollView( physics: const AlwaysScrollableScrollPhysics(), slivers: [ - _buildTopItems(padding), + _buildTopItems(theme, padding), SliverPadding( padding: EdgeInsets.only(bottom: padding.bottom + 100), sliver: Obx(() => _buildBody(_controller.loadingState.value)), @@ -133,8 +149,7 @@ class _WhisperPageState extends State { }; } - Widget _buildTopItems(EdgeInsets padding) { - final ThemeData theme = Theme.of(context); + Widget _buildTopItems(ThemeData theme, EdgeInsets padding) { return SliverPadding( padding: EdgeInsets.only(left: padding.left, right: padding.right), sliver: SliverToBoxAdapter( diff --git a/lib/pages/whisper_secondary/view.dart b/lib/pages/whisper_secondary/view.dart index 2dc5f4b82..346cace48 100644 --- a/lib/pages/whisper_secondary/view.dart +++ b/lib/pages/whisper_secondary/view.dart @@ -6,7 +6,6 @@ import 'package:PiliPlus/http/loading_state.dart'; import 'package:PiliPlus/pages/whisper/widgets/item.dart'; import 'package:PiliPlus/pages/whisper_secondary/controller.dart'; import 'package:PiliPlus/utils/extension/three_dot_ext.dart'; -import 'package:PiliPlus/utils/extension/widget_ext.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; @@ -79,7 +78,7 @@ class _WhisperSecPageState extends State { ), ], ), - ).constraintWidth(), + ), ); } diff --git a/lib/utils/reply_utils.dart b/lib/utils/reply_utils.dart index 6f85a90e5..4d19cb32c 100644 --- a/lib/utils/reply_utils.dart +++ b/lib/utils/reply_utils.dart @@ -123,7 +123,7 @@ class ReplyUtils { '/webview', parameters: { 'url': - 'https://www.bilibili.com/h5/comment/appeal?native.theme=2&night=${Get.isDarkMode ? 1 : 0}', + 'https://www.bilibili.com/h5/comment/appeal?${Utils.themeUrl(Get.isDarkMode)}', }, ); }, diff --git a/lib/utils/request_utils.dart b/lib/utils/request_utils.dart index b85d67a2a..dbfd39de6 100644 --- a/lib/utils/request_utils.dart +++ b/lib/utils/request_utils.dart @@ -337,7 +337,7 @@ abstract final class RequestUtils { '/webview', parameters: { 'url': - 'https://www.bilibili.com/h5/comment/appeal?native.theme=2&night=${Get.isDarkMode ? 1 : 0}', + 'https://www.bilibili.com/h5/comment/appeal?${Utils.themeUrl(Get.isDarkMode)}', }, ); }, diff --git a/lib/utils/utils.dart b/lib/utils/utils.dart index e0dd5f467..fa613bcfa 100644 --- a/lib/utils/utils.dart +++ b/lib/utils/utils.dart @@ -21,6 +21,9 @@ abstract class Utils { static const jsonEncoder = JsonEncoder.withIndent(' '); + static String themeUrl(bool isDark) => + 'native.theme=${isDark ? 2 : 1}&night=${isDark ? 1 : 0}'; + static Future saveBytes2File({ required String name, required Uint8List bytes,