mirror of
https://github.com/HChaZZY/PiliPlus.git
synced 2025-12-16 15:16:15 +08:00
opt to live room
Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
@@ -3,10 +3,10 @@ import 'package:PiliPlus/models/common/avatar_badge_type.dart';
|
|||||||
import 'package:PiliPlus/models/common/image_type.dart';
|
import 'package:PiliPlus/models/common/image_type.dart';
|
||||||
import 'package:PiliPlus/utils/extension.dart';
|
import 'package:PiliPlus/utils/extension.dart';
|
||||||
import 'package:PiliPlus/utils/image_util.dart';
|
import 'package:PiliPlus/utils/image_util.dart';
|
||||||
|
import 'package:PiliPlus/utils/page_utils.dart';
|
||||||
import 'package:PiliPlus/utils/storage_pref.dart';
|
import 'package:PiliPlus/utils/storage_pref.dart';
|
||||||
import 'package:cached_network_image/cached_network_image.dart';
|
import 'package:cached_network_image/cached_network_image.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:get/get.dart';
|
|
||||||
|
|
||||||
class PendantAvatar extends StatelessWidget {
|
class PendantAvatar extends StatelessWidget {
|
||||||
final BadgeType _badgeType;
|
final BadgeType _badgeType;
|
||||||
@@ -14,7 +14,7 @@ class PendantAvatar extends StatelessWidget {
|
|||||||
final double size;
|
final double size;
|
||||||
final double badgeSize;
|
final double badgeSize;
|
||||||
final String? garbPendantImage;
|
final String? garbPendantImage;
|
||||||
final dynamic roomId;
|
final int? roomId;
|
||||||
final VoidCallback? onTap;
|
final VoidCallback? onTap;
|
||||||
|
|
||||||
const PendantAvatar({
|
const PendantAvatar({
|
||||||
@@ -71,7 +71,7 @@ class PendantAvatar extends StatelessWidget {
|
|||||||
Positioned(
|
Positioned(
|
||||||
bottom: 0,
|
bottom: 0,
|
||||||
child: InkWell(
|
child: InkWell(
|
||||||
onTap: () => Get.toNamed('/liveRoom?roomid=$roomId'),
|
onTap: () => PageUtils.toLiveRoom(roomId),
|
||||||
child: Container(
|
child: Container(
|
||||||
padding: const EdgeInsets.symmetric(horizontal: 5, vertical: 1),
|
padding: const EdgeInsets.symmetric(horizontal: 5, vertical: 1),
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
|
|||||||
@@ -16,7 +16,6 @@ import 'package:PiliPlus/utils/duration_util.dart';
|
|||||||
import 'package:PiliPlus/utils/page_utils.dart';
|
import 'package:PiliPlus/utils/page_utils.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
|
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
|
||||||
import 'package:get/get.dart';
|
|
||||||
|
|
||||||
// 视频卡片 - 水平布局
|
// 视频卡片 - 水平布局
|
||||||
class VideoCardH extends StatelessWidget {
|
class VideoCardH extends StatelessWidget {
|
||||||
@@ -81,7 +80,7 @@ class VideoCardH extends StatelessWidget {
|
|||||||
if (videoItem case SearchVideoItemModel item) {
|
if (videoItem case SearchVideoItemModel item) {
|
||||||
int? roomId = item.id;
|
int? roomId = item.id;
|
||||||
if (roomId != null) {
|
if (roomId != null) {
|
||||||
Get.toNamed('/liveRoom?roomid=$roomId');
|
PageUtils.toLiveRoom(roomId);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
SmartDialog.showToast(
|
SmartDialog.showToast(
|
||||||
@@ -96,6 +95,7 @@ class VideoCardH extends StatelessWidget {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
final int? cid =
|
final int? cid =
|
||||||
videoItem.cid ??
|
videoItem.cid ??
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
import 'package:PiliPlus/common/widgets/image/image_save.dart';
|
import 'package:PiliPlus/common/widgets/image/image_save.dart';
|
||||||
import 'package:PiliPlus/common/widgets/image/network_img_layer.dart';
|
import 'package:PiliPlus/common/widgets/image/network_img_layer.dart';
|
||||||
import 'package:PiliPlus/models/dynamics/result.dart';
|
import 'package:PiliPlus/models/dynamics/result.dart';
|
||||||
|
import 'package:PiliPlus/utils/page_utils.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:get/get.dart';
|
|
||||||
|
|
||||||
Widget livePanel(
|
Widget livePanel(
|
||||||
ThemeData theme,
|
ThemeData theme,
|
||||||
@@ -20,7 +20,7 @@ Widget livePanel(
|
|||||||
children: [
|
children: [
|
||||||
GestureDetector(
|
GestureDetector(
|
||||||
behavior: HitTestBehavior.opaque,
|
behavior: HitTestBehavior.opaque,
|
||||||
onTap: () => Get.toNamed('/liveRoom?roomid=${content.live?.id}'),
|
onTap: () => PageUtils.toLiveRoom(content.live?.id),
|
||||||
onLongPress: () {
|
onLongPress: () {
|
||||||
Feedback.forLongPress(context);
|
Feedback.forLongPress(context);
|
||||||
imageSaveDialog(
|
imageSaveDialog(
|
||||||
|
|||||||
@@ -3,8 +3,8 @@ import 'package:PiliPlus/common/widgets/badge.dart';
|
|||||||
import 'package:PiliPlus/common/widgets/image/network_img_layer.dart';
|
import 'package:PiliPlus/common/widgets/image/network_img_layer.dart';
|
||||||
import 'package:PiliPlus/models/common/badge_type.dart';
|
import 'package:PiliPlus/models/common/badge_type.dart';
|
||||||
import 'package:PiliPlus/models/dynamics/result.dart';
|
import 'package:PiliPlus/models/dynamics/result.dart';
|
||||||
|
import 'package:PiliPlus/utils/page_utils.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:get/get.dart';
|
|
||||||
|
|
||||||
Widget livePanelSub(
|
Widget livePanelSub(
|
||||||
ThemeData theme,
|
ThemeData theme,
|
||||||
@@ -24,7 +24,7 @@ Widget livePanelSub(
|
|||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.symmetric(horizontal: StyleString.safeSpace),
|
padding: const EdgeInsets.symmetric(horizontal: StyleString.safeSpace),
|
||||||
child: GestureDetector(
|
child: GestureDetector(
|
||||||
onTap: () => Get.toNamed('/liveRoom?roomid=${content.roomId}'),
|
onTap: () => PageUtils.toLiveRoom(content.roomId),
|
||||||
child: LayoutBuilder(
|
child: LayoutBuilder(
|
||||||
builder: (context, box) {
|
builder: (context, box) {
|
||||||
double width = box.maxWidth;
|
double width = box.maxWidth;
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import 'package:PiliPlus/models/dynamics/up.dart';
|
|||||||
import 'package:PiliPlus/pages/dynamics/controller.dart';
|
import 'package:PiliPlus/pages/dynamics/controller.dart';
|
||||||
import 'package:PiliPlus/pages/live_follow/view.dart';
|
import 'package:PiliPlus/pages/live_follow/view.dart';
|
||||||
import 'package:PiliPlus/utils/feed_back.dart';
|
import 'package:PiliPlus/utils/feed_back.dart';
|
||||||
|
import 'package:PiliPlus/utils/page_utils.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
|
|
||||||
@@ -144,7 +145,7 @@ class _UpPanelState extends State<UpPanel> {
|
|||||||
feedBack();
|
feedBack();
|
||||||
switch (data) {
|
switch (data) {
|
||||||
case LiveUserItem():
|
case LiveUserItem():
|
||||||
Get.toNamed('/liveRoom?roomid=${data.roomId}');
|
PageUtils.toLiveRoom(data.roomId);
|
||||||
case UpItem():
|
case UpItem():
|
||||||
_onSelect(data);
|
_onSelect(data);
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ class HistoryItem extends StatelessWidget {
|
|||||||
);
|
);
|
||||||
} else if (item.history.business == 'live') {
|
} else if (item.history.business == 'live') {
|
||||||
if (item.liveStatus == 1) {
|
if (item.liveStatus == 1) {
|
||||||
Get.toNamed('/liveRoom?roomid=${item.history.oid}');
|
PageUtils.toLiveRoom(item.history.oid);
|
||||||
} else {
|
} else {
|
||||||
SmartDialog.showToast('直播未开播');
|
SmartDialog.showToast('直播未开播');
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ import 'package:PiliPlus/pages/live_area/view.dart';
|
|||||||
import 'package:PiliPlus/pages/live_follow/view.dart';
|
import 'package:PiliPlus/pages/live_follow/view.dart';
|
||||||
import 'package:PiliPlus/pages/search/widgets/search_text.dart';
|
import 'package:PiliPlus/pages/search/widgets/search_text.dart';
|
||||||
import 'package:PiliPlus/utils/grid.dart';
|
import 'package:PiliPlus/utils/grid.dart';
|
||||||
|
import 'package:PiliPlus/utils/page_utils.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
|
|
||||||
@@ -292,7 +293,7 @@ class _LivePageState extends CommonPageState<LivePage, LiveController>
|
|||||||
return SizedBox(
|
return SizedBox(
|
||||||
width: 65,
|
width: 65,
|
||||||
child: GestureDetector(
|
child: GestureDetector(
|
||||||
onTap: () => Get.toNamed('/liveRoom?roomid=${item.roomid}'),
|
onTap: () => PageUtils.toLiveRoom(item.roomid),
|
||||||
onLongPress: () {
|
onLongPress: () {
|
||||||
Feedback.forLongPress(context);
|
Feedback.forLongPress(context);
|
||||||
Get.toNamed('/member?mid=${item.uid}');
|
Get.toNamed('/member?mid=${item.uid}');
|
||||||
|
|||||||
@@ -3,8 +3,8 @@ import 'package:PiliPlus/common/widgets/image/image_save.dart';
|
|||||||
import 'package:PiliPlus/common/widgets/image/network_img_layer.dart';
|
import 'package:PiliPlus/common/widgets/image/network_img_layer.dart';
|
||||||
import 'package:PiliPlus/models_new/live/live_feed_index/card_data_list_item.dart';
|
import 'package:PiliPlus/models_new/live/live_feed_index/card_data_list_item.dart';
|
||||||
import 'package:PiliPlus/utils/num_util.dart';
|
import 'package:PiliPlus/utils/num_util.dart';
|
||||||
|
import 'package:PiliPlus/utils/page_utils.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:get/get.dart';
|
|
||||||
|
|
||||||
// 视频卡片 - 垂直布局
|
// 视频卡片 - 垂直布局
|
||||||
class LiveCardVApp extends StatelessWidget {
|
class LiveCardVApp extends StatelessWidget {
|
||||||
@@ -20,7 +20,7 @@ class LiveCardVApp extends StatelessWidget {
|
|||||||
return Card(
|
return Card(
|
||||||
clipBehavior: Clip.hardEdge,
|
clipBehavior: Clip.hardEdge,
|
||||||
child: InkWell(
|
child: InkWell(
|
||||||
onTap: () => Get.toNamed('/liveRoom?roomid=${item.roomid}'),
|
onTap: () => PageUtils.toLiveRoom(item.roomid),
|
||||||
onLongPress: () => imageSaveDialog(
|
onLongPress: () => imageSaveDialog(
|
||||||
title: item.title,
|
title: item.title,
|
||||||
cover: item.cover,
|
cover: item.cover,
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ import 'package:PiliPlus/common/constants.dart';
|
|||||||
import 'package:PiliPlus/common/widgets/image/image_save.dart';
|
import 'package:PiliPlus/common/widgets/image/image_save.dart';
|
||||||
import 'package:PiliPlus/common/widgets/image/network_img_layer.dart';
|
import 'package:PiliPlus/common/widgets/image/network_img_layer.dart';
|
||||||
import 'package:PiliPlus/models_new/live/live_follow/item.dart';
|
import 'package:PiliPlus/models_new/live/live_follow/item.dart';
|
||||||
|
import 'package:PiliPlus/utils/page_utils.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:get/get.dart';
|
|
||||||
|
|
||||||
// 视频卡片 - 垂直布局
|
// 视频卡片 - 垂直布局
|
||||||
class LiveCardVFollow extends StatelessWidget {
|
class LiveCardVFollow extends StatelessWidget {
|
||||||
@@ -19,7 +19,7 @@ class LiveCardVFollow extends StatelessWidget {
|
|||||||
return Card(
|
return Card(
|
||||||
clipBehavior: Clip.hardEdge,
|
clipBehavior: Clip.hardEdge,
|
||||||
child: InkWell(
|
child: InkWell(
|
||||||
onTap: () => Get.toNamed('/liveRoom?roomid=${liveItem.roomid}'),
|
onTap: () => PageUtils.toLiveRoom(liveItem.roomid),
|
||||||
onLongPress: () => imageSaveDialog(
|
onLongPress: () => imageSaveDialog(
|
||||||
title: liveItem.title,
|
title: liveItem.title,
|
||||||
cover: liveItem.roomCover,
|
cover: liveItem.roomCover,
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ class LiveRoomController extends GetxController {
|
|||||||
LiveRoomController(this.heroTag);
|
LiveRoomController(this.heroTag);
|
||||||
final String heroTag;
|
final String heroTag;
|
||||||
|
|
||||||
int roomId = int.parse(Get.parameters['roomid']!);
|
int roomId = Get.arguments;
|
||||||
PlPlayerController plPlayerController = PlPlayerController.getInstance(
|
PlPlayerController plPlayerController = PlPlayerController.getInstance(
|
||||||
isLive: true,
|
isLive: true,
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -37,8 +37,7 @@ class LiveRoomPage extends StatefulWidget {
|
|||||||
|
|
||||||
class _LiveRoomPageState extends State<LiveRoomPage>
|
class _LiveRoomPageState extends State<LiveRoomPage>
|
||||||
with WidgetsBindingObserver {
|
with WidgetsBindingObserver {
|
||||||
late final String heroTag;
|
final String heroTag = Utils.generateRandomString(6);
|
||||||
late final int _roomId;
|
|
||||||
late final LiveRoomController _liveRoomController;
|
late final LiveRoomController _liveRoomController;
|
||||||
late final PlPlayerController plPlayerController;
|
late final PlPlayerController plPlayerController;
|
||||||
bool get isFullScreen => plPlayerController.isFullScreen.value;
|
bool get isFullScreen => plPlayerController.isFullScreen.value;
|
||||||
@@ -58,8 +57,6 @@ class _LiveRoomPageState extends State<LiveRoomPage>
|
|||||||
void initState() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
WidgetsBinding.instance.addObserver(this);
|
WidgetsBinding.instance.addObserver(this);
|
||||||
_roomId = int.parse(Get.parameters['roomid'] ?? '-1');
|
|
||||||
heroTag = Utils.makeHeroTag(_roomId);
|
|
||||||
_liveRoomController = Get.put(
|
_liveRoomController = Get.put(
|
||||||
LiveRoomController(heroTag),
|
LiveRoomController(heroTag),
|
||||||
tag: heroTag,
|
tag: heroTag,
|
||||||
@@ -528,7 +525,7 @@ class _LiveRoomPageState extends State<LiveRoomPage>
|
|||||||
child: LiveRoomChat(
|
child: LiveRoomChat(
|
||||||
key: chatKey,
|
key: chatKey,
|
||||||
isPP: isPP ?? false,
|
isPP: isPP ?? false,
|
||||||
roomId: _roomId,
|
roomId: _liveRoomController.roomId,
|
||||||
liveRoomController: _liveRoomController,
|
liveRoomController: _liveRoomController,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ import 'package:PiliPlus/models/common/live_search_type.dart';
|
|||||||
import 'package:PiliPlus/pages/live_search/child/controller.dart';
|
import 'package:PiliPlus/pages/live_search/child/controller.dart';
|
||||||
import 'package:PiliPlus/utils/extension.dart';
|
import 'package:PiliPlus/utils/extension.dart';
|
||||||
import 'package:PiliPlus/utils/id_utils.dart';
|
import 'package:PiliPlus/utils/id_utils.dart';
|
||||||
|
import 'package:PiliPlus/utils/page_utils.dart';
|
||||||
import 'package:PiliPlus/utils/utils.dart';
|
import 'package:PiliPlus/utils/utils.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
@@ -41,7 +42,7 @@ class LiveSearchController extends GetxController
|
|||||||
void submit() {
|
void submit() {
|
||||||
if (editingController.text.isNotEmpty) {
|
if (editingController.text.isNotEmpty) {
|
||||||
if (IdUtils.digitOnlyRegExp.hasMatch(editingController.text)) {
|
if (IdUtils.digitOnlyRegExp.hasMatch(editingController.text)) {
|
||||||
Get.toNamed('/liveRoom?roomid=${editingController.text}');
|
PageUtils.toLiveRoom(int.parse(editingController.text));
|
||||||
} else {
|
} else {
|
||||||
hasData.value = true;
|
hasData.value = true;
|
||||||
roomCtr
|
roomCtr
|
||||||
|
|||||||
@@ -3,8 +3,8 @@ import 'package:PiliPlus/common/widgets/image/image_save.dart';
|
|||||||
import 'package:PiliPlus/common/widgets/image/network_img_layer.dart';
|
import 'package:PiliPlus/common/widgets/image/network_img_layer.dart';
|
||||||
import 'package:PiliPlus/models_new/live/live_search/room_item.dart';
|
import 'package:PiliPlus/models_new/live/live_search/room_item.dart';
|
||||||
import 'package:PiliPlus/utils/num_util.dart';
|
import 'package:PiliPlus/utils/num_util.dart';
|
||||||
|
import 'package:PiliPlus/utils/page_utils.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:get/get.dart';
|
|
||||||
|
|
||||||
// 视频卡片 - 垂直布局
|
// 视频卡片 - 垂直布局
|
||||||
class LiveCardVSearch extends StatelessWidget {
|
class LiveCardVSearch extends StatelessWidget {
|
||||||
@@ -20,7 +20,7 @@ class LiveCardVSearch extends StatelessWidget {
|
|||||||
return Card(
|
return Card(
|
||||||
clipBehavior: Clip.hardEdge,
|
clipBehavior: Clip.hardEdge,
|
||||||
child: InkWell(
|
child: InkWell(
|
||||||
onTap: () => Get.toNamed('/liveRoom?roomid=${item.roomid}'),
|
onTap: () => PageUtils.toLiveRoom(item.roomid),
|
||||||
onLongPress: () => imageSaveDialog(
|
onLongPress: () => imageSaveDialog(
|
||||||
title: item.title,
|
title: item.title,
|
||||||
cover: item.cover,
|
cover: item.cover,
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ import 'package:PiliPlus/common/widgets/image/network_img_layer.dart';
|
|||||||
import 'package:PiliPlus/models/common/image_type.dart';
|
import 'package:PiliPlus/models/common/image_type.dart';
|
||||||
import 'package:PiliPlus/models_new/live/live_search/user_item.dart';
|
import 'package:PiliPlus/models_new/live/live_search/user_item.dart';
|
||||||
import 'package:PiliPlus/utils/num_util.dart';
|
import 'package:PiliPlus/utils/num_util.dart';
|
||||||
|
import 'package:PiliPlus/utils/page_utils.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:get/get.dart';
|
|
||||||
|
|
||||||
class LiveSearchUserItem extends StatelessWidget {
|
class LiveSearchUserItem extends StatelessWidget {
|
||||||
const LiveSearchUserItem({
|
const LiveSearchUserItem({
|
||||||
@@ -23,9 +23,7 @@ class LiveSearchUserItem extends StatelessWidget {
|
|||||||
return Material(
|
return Material(
|
||||||
type: MaterialType.transparency,
|
type: MaterialType.transparency,
|
||||||
child: InkWell(
|
child: InkWell(
|
||||||
onTap: () => Get.toNamed(
|
onTap: () => PageUtils.toLiveRoom(item.roomid),
|
||||||
'/liveRoom?roomid=${item.roomid}',
|
|
||||||
),
|
|
||||||
child: Row(
|
child: Row(
|
||||||
children: [
|
children: [
|
||||||
const SizedBox(width: 15),
|
const SizedBox(width: 15),
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ import 'package:PiliPlus/pages/video/reply/widgets/reply_item_grpc.dart';
|
|||||||
import 'package:PiliPlus/pages/video/reply_reply/view.dart';
|
import 'package:PiliPlus/pages/video/reply_reply/view.dart';
|
||||||
import 'package:PiliPlus/utils/date_util.dart';
|
import 'package:PiliPlus/utils/date_util.dart';
|
||||||
import 'package:PiliPlus/utils/feed_back.dart';
|
import 'package:PiliPlus/utils/feed_back.dart';
|
||||||
|
import 'package:PiliPlus/utils/page_utils.dart';
|
||||||
import 'package:PiliPlus/utils/utils.dart';
|
import 'package:PiliPlus/utils/utils.dart';
|
||||||
import 'package:easy_debounce/easy_throttle.dart';
|
import 'package:easy_debounce/easy_throttle.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
@@ -162,9 +163,8 @@ class _MatchInfoPageState extends CommonDynPageState<MatchInfoPage> {
|
|||||||
visualDensity: VisualDensity.compact,
|
visualDensity: VisualDensity.compact,
|
||||||
tapTargetSize: MaterialTapTargetSize.shrinkWrap,
|
tapTargetSize: MaterialTapTargetSize.shrinkWrap,
|
||||||
),
|
),
|
||||||
onPressed: () => Get.toNamed(
|
onPressed: () =>
|
||||||
'/liveRoom?roomid=${data.liveRoom}',
|
PageUtils.toLiveRoom(data.liveRoom),
|
||||||
),
|
|
||||||
child: const Text('看直播'),
|
child: const Text('看直播'),
|
||||||
)
|
)
|
||||||
else if (data.contestStatus == 3)
|
else if (data.contestStatus == 3)
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ import 'package:PiliPlus/common/constants.dart';
|
|||||||
import 'package:PiliPlus/common/widgets/image/image_save.dart';
|
import 'package:PiliPlus/common/widgets/image/image_save.dart';
|
||||||
import 'package:PiliPlus/common/widgets/image/network_img_layer.dart';
|
import 'package:PiliPlus/common/widgets/image/network_img_layer.dart';
|
||||||
import 'package:PiliPlus/models/search/result.dart';
|
import 'package:PiliPlus/models/search/result.dart';
|
||||||
|
import 'package:PiliPlus/utils/page_utils.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:get/get.dart';
|
|
||||||
|
|
||||||
class LiveItem extends StatelessWidget {
|
class LiveItem extends StatelessWidget {
|
||||||
final SearchLiveItemModel liveItem;
|
final SearchLiveItemModel liveItem;
|
||||||
@@ -16,7 +16,7 @@ class LiveItem extends StatelessWidget {
|
|||||||
return Card(
|
return Card(
|
||||||
clipBehavior: Clip.hardEdge,
|
clipBehavior: Clip.hardEdge,
|
||||||
child: InkWell(
|
child: InkWell(
|
||||||
onTap: () => Get.toNamed('/liveRoom?roomid=${liveItem.roomid}'),
|
onTap: () => PageUtils.toLiveRoom(liveItem.roomid),
|
||||||
onLongPress: () => imageSaveDialog(
|
onLongPress: () => imageSaveDialog(
|
||||||
title: liveItem.title.map((item) => item.text).join(),
|
title: liveItem.title.map((item) => item.text).join(),
|
||||||
cover: liveItem.cover,
|
cover: liveItem.cover,
|
||||||
|
|||||||
@@ -203,7 +203,13 @@ class ChatItem extends StatelessWidget {
|
|||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
children: [
|
children: [
|
||||||
GestureDetector(
|
GestureDetector(
|
||||||
onTap: () => Get.toNamed('/liveRoom?roomid=${content['sourceID']}'),
|
onTap: () {
|
||||||
|
var roomId = content['sourceID'];
|
||||||
|
if (roomId is String) {
|
||||||
|
roomId = int.parse(roomId);
|
||||||
|
}
|
||||||
|
PageUtils.toLiveRoom(roomId);
|
||||||
|
},
|
||||||
child: NetworkImgLayer(
|
child: NetworkImgLayer(
|
||||||
width: 220,
|
width: 220,
|
||||||
height: 220 * 9 / 16,
|
height: 220 * 9 / 16,
|
||||||
|
|||||||
@@ -424,6 +424,8 @@ class PlPlayerController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static PlPlayerController? get instance => _instance;
|
||||||
|
|
||||||
static bool instanceExists() {
|
static bool instanceExists() {
|
||||||
return _instance != null;
|
return _instance != null;
|
||||||
}
|
}
|
||||||
@@ -476,8 +478,7 @@ class PlPlayerController {
|
|||||||
Box video = GStorage.video;
|
Box video = GStorage.video;
|
||||||
|
|
||||||
// 添加一个私有构造函数
|
// 添加一个私有构造函数
|
||||||
PlPlayerController._({bool isLive = false}) {
|
PlPlayerController._() {
|
||||||
_isLive = isLive;
|
|
||||||
if (!Accounts.heartbeat.isLogin || Pref.historyPause) {
|
if (!Accounts.heartbeat.isLogin || Pref.historyPause) {
|
||||||
enableHeart = false;
|
enableHeart = false;
|
||||||
}
|
}
|
||||||
@@ -504,7 +505,7 @@ class PlPlayerController {
|
|||||||
// 获取实例 传参
|
// 获取实例 传参
|
||||||
static PlPlayerController getInstance({bool isLive = false}) {
|
static PlPlayerController getInstance({bool isLive = false}) {
|
||||||
// 如果实例尚未创建,则创建一个新实例
|
// 如果实例尚未创建,则创建一个新实例
|
||||||
_instance ??= PlPlayerController._(isLive: isLive);
|
_instance ??= PlPlayerController._().._isLive = isLive;
|
||||||
_instance!._playerCount.value += 1;
|
_instance!._playerCount.value += 1;
|
||||||
return _instance!;
|
return _instance!;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -191,7 +191,7 @@ class PiliScheme {
|
|||||||
// bilibili://live/12345678?extra_jump_from=1&from=1&is_room_feed=1&h5awaken=random
|
// bilibili://live/12345678?extra_jump_from=1&from=1&is_room_feed=1&h5awaken=random
|
||||||
String? roomId = uriDigitRegExp.firstMatch(path)?.group(1);
|
String? roomId = uriDigitRegExp.firstMatch(path)?.group(1);
|
||||||
if (roomId != null) {
|
if (roomId != null) {
|
||||||
PageUtils.toDupNamed('/liveRoom?roomid=$roomId', off: off);
|
PageUtils.toLiveRoom(int.parse(roomId), off: off);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@@ -561,7 +561,7 @@ class PiliScheme {
|
|||||||
if (host.contains('live.bilibili.com')) {
|
if (host.contains('live.bilibili.com')) {
|
||||||
String? roomId = uriDigitRegExp.firstMatch(path)?.group(1);
|
String? roomId = uriDigitRegExp.firstMatch(path)?.group(1);
|
||||||
if (roomId != null) {
|
if (roomId != null) {
|
||||||
PageUtils.toDupNamed('/liveRoom?roomid=$roomId', off: off);
|
PageUtils.toLiveRoom(int.parse(roomId), off: off);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
launchURL();
|
launchURL();
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ import 'package:PiliPlus/pages/contact/view.dart';
|
|||||||
import 'package:PiliPlus/pages/fav_panel/view.dart';
|
import 'package:PiliPlus/pages/fav_panel/view.dart';
|
||||||
import 'package:PiliPlus/pages/share/view.dart';
|
import 'package:PiliPlus/pages/share/view.dart';
|
||||||
import 'package:PiliPlus/pages/video/introduction/ugc/widgets/menu_row.dart';
|
import 'package:PiliPlus/pages/video/introduction/ugc/widgets/menu_row.dart';
|
||||||
|
import 'package:PiliPlus/plugin/pl_player/controller.dart';
|
||||||
import 'package:PiliPlus/services/shutdown_timer_service.dart';
|
import 'package:PiliPlus/services/shutdown_timer_service.dart';
|
||||||
import 'package:PiliPlus/utils/app_scheme.dart';
|
import 'package:PiliPlus/utils/app_scheme.dart';
|
||||||
import 'package:PiliPlus/utils/extension.dart';
|
import 'package:PiliPlus/utils/extension.dart';
|
||||||
@@ -444,7 +445,7 @@ class PageUtils {
|
|||||||
case 'DYNAMIC_TYPE_LIVE_RCMD':
|
case 'DYNAMIC_TYPE_LIVE_RCMD':
|
||||||
DynamicLiveModel liveRcmd =
|
DynamicLiveModel liveRcmd =
|
||||||
item.modules.moduleDynamic!.major!.liveRcmd!;
|
item.modules.moduleDynamic!.major!.liveRcmd!;
|
||||||
toDupNamed('/liveRoom?roomid=${liveRcmd.roomId}');
|
toLiveRoom(liveRcmd.roomId);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/// 合集查看
|
/// 合集查看
|
||||||
@@ -663,6 +664,24 @@ class PageUtils {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void toLiveRoom(
|
||||||
|
int? roomId, {
|
||||||
|
bool off = false,
|
||||||
|
}) {
|
||||||
|
if (roomId == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (PlPlayerController.instanceExists()) {
|
||||||
|
SmartDialog.showToast('unsupported');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (off) {
|
||||||
|
Get.offNamed('/liveRoom', arguments: roomId);
|
||||||
|
} else {
|
||||||
|
Get.toNamed('/liveRoom', arguments: roomId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void toVideoPage({
|
static void toVideoPage({
|
||||||
VideoType videoType = VideoType.ugc,
|
VideoType videoType = VideoType.ugc,
|
||||||
int? aid,
|
int? aid,
|
||||||
@@ -679,6 +698,10 @@ class PageUtils {
|
|||||||
bool preventDuplicates = true,
|
bool preventDuplicates = true,
|
||||||
bool off = false,
|
bool off = false,
|
||||||
}) {
|
}) {
|
||||||
|
if (PlPlayerController.instance?.isLive == true) {
|
||||||
|
SmartDialog.showToast('Living');
|
||||||
|
return;
|
||||||
|
}
|
||||||
final arguments = {
|
final arguments = {
|
||||||
'aid': aid ?? IdUtils.bv2av(bvid!),
|
'aid': aid ?? IdUtils.bv2av(bvid!),
|
||||||
'bvid': bvid ?? IdUtils.av2bv(aid!),
|
'bvid': bvid ?? IdUtils.av2bv(aid!),
|
||||||
@@ -698,14 +721,14 @@ class PageUtils {
|
|||||||
'/videoV',
|
'/videoV',
|
||||||
arguments: arguments,
|
arguments: arguments,
|
||||||
id: id,
|
id: id,
|
||||||
preventDuplicates: preventDuplicates,
|
preventDuplicates: false,
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
Get.toNamed(
|
Get.toNamed(
|
||||||
'/videoV',
|
'/videoV',
|
||||||
arguments: arguments,
|
arguments: arguments,
|
||||||
id: id,
|
id: id,
|
||||||
preventDuplicates: preventDuplicates,
|
preventDuplicates: false,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user