mod: 用户页面跳转直播

This commit is contained in:
guozhigq
2023-07-15 15:58:03 +08:00
parent 6c87e9eebf
commit cd3bb41e71
4 changed files with 158 additions and 90 deletions

View File

@ -10,6 +10,7 @@ class MemberInfoModel {
this.topPhoto, this.topPhoto,
this.official, this.official,
this.vip, this.vip,
this.liveRoom,
}); });
int? mid; int? mid;
@ -29,13 +30,14 @@ class MemberInfoModel {
name = json['name']; name = json['name'];
sex = json['sex']; sex = json['sex'];
face = json['face']; face = json['face'];
sign = json['sign'] == '' ? '该用户还没有签名' : json['sign']; sign = json['sign'] == '' ? '该用户还没有签名' : json['sign'].replaceAll('\n', '');
level = json['level']; level = json['level'];
isFollowed = json['is_followed']; isFollowed = json['is_followed'];
topPhoto = json['top_photo']; topPhoto = json['top_photo'];
official = json['official']; official = json['official'];
vip = Vip.fromJson(json['vip']); vip = Vip.fromJson(json['vip']);
liveRoom = LiveRoom.fromJson(json['live_room']); liveRoom =
json['live_room'] != null ? LiveRoom.fromJson(json['live_room']) : null;
} }
} }
@ -80,12 +82,12 @@ class LiveRoom {
int? roundStatus; int? roundStatus;
LiveRoom.fromJson(Map<String, dynamic> json) { LiveRoom.fromJson(Map<String, dynamic> json) {
roomStatus = json['room_status']; roomStatus = json['roomStatus'];
liveStatus = json['live_status']; liveStatus = json['liveStatus'];
url = json['url']; url = json['url'];
title = json['title']; title = json['title'];
cover = json['cover']; cover = json['cover'];
roomId = json['room_id']; roomId = json['roomid'];
roundStatus = json['round_status']; roundStatus = json['roundStatus'];
} }
} }

View File

@ -141,7 +141,7 @@ class _UpPanelState extends State<UpPanel> {
'roomid': data.roomId, 'roomid': data.roomId,
}); });
Get.toNamed( Get.toNamed(
'/liveRoom?rooid=${data.roomId}', '/liveRoom?roomid=${data.roomId}',
arguments: {'liveItem': liveItem}, arguments: {'liveItem': liveItem},
); );
} }

View File

@ -1,6 +1,8 @@
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:hive/hive.dart';
import 'package:pilipala/http/member.dart'; import 'package:pilipala/http/member.dart';
import 'package:pilipala/models/member/info.dart'; import 'package:pilipala/models/member/info.dart';
import 'package:pilipala/utils/storage.dart';
import 'package:pilipala/utils/wbi_sign.dart'; import 'package:pilipala/utils/wbi_sign.dart';
class MemberController extends GetxController { class MemberController extends GetxController {
@ -9,11 +11,14 @@ class MemberController extends GetxController {
Map? userStat; Map? userStat;
String? face; String? face;
String? heroTag; String? heroTag;
Box user = GStrorage.user;
late int ownerMid;
@override @override
void onInit() { void onInit() {
super.onInit(); super.onInit();
mid = int.parse(Get.parameters['mid']!); mid = int.parse(Get.parameters['mid']!);
ownerMid = user.get(UserBoxKey.userMid);
face = Get.arguments['face']!; face = Get.arguments['face']!;
heroTag = Get.arguments['heroTag']!; heroTag = Get.arguments['heroTag']!;
} }

View File

@ -1,7 +1,10 @@
import 'package:extended_nested_scroll_view/extended_nested_scroll_view.dart'; import 'package:extended_nested_scroll_view/extended_nested_scroll_view.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:pilipala/common/widgets/network_img_layer.dart'; import 'package:pilipala/common/widgets/network_img_layer.dart';
import 'package:pilipala/models/live/item.dart';
import 'package:pilipala/models/user/stat.dart'; import 'package:pilipala/models/user/stat.dart';
import 'package:pilipala/pages/member/index.dart'; import 'package:pilipala/pages/member/index.dart';
import 'package:pilipala/utils/utils.dart'; import 'package:pilipala/utils/utils.dart';
@ -39,7 +42,7 @@ class _MemberPageState extends State<MemberPage>
elevation: 0, elevation: 0,
scrolledUnderElevation: 0, scrolledUnderElevation: 0,
forceElevated: innerBoxIsScrolled, forceElevated: innerBoxIsScrolled,
expandedHeight: 300, expandedHeight: 320,
actions: [ actions: [
IconButton(onPressed: () {}, icon: const Icon(Icons.more_vert)), IconButton(onPressed: () {}, icon: const Icon(Icons.more_vert)),
const SizedBox(width: 4), const SizedBox(width: 4),
@ -97,8 +100,6 @@ class _MemberPageState extends State<MemberPage>
alignment: AlignmentDirectional.center, alignment: AlignmentDirectional.center,
children: [ children: [
Column( Column(
// mainAxisAlignment:
// MainAxisAlignment.center,
crossAxisAlignment: crossAxisAlignment:
CrossAxisAlignment.start, CrossAxisAlignment.start,
children: [ children: [
@ -117,7 +118,24 @@ class _MemberPageState extends State<MemberPage>
fontWeight: fontWeight:
FontWeight.bold), FontWeight.bold),
), ),
const SizedBox(width: 6), const SizedBox(width: 2),
if (_memberController
.memberInfo.value.sex ==
'')
const Icon(
FontAwesomeIcons.venus,
size: 14,
color: Colors.pink,
),
if (_memberController
.memberInfo.value.sex ==
'')
const Icon(
FontAwesomeIcons.mars,
size: 14,
color: Colors.blue,
),
const SizedBox(width: 4),
Image.asset( Image.asset(
'assets/images/lv/lv${_memberController.memberInfo.value.level}.png', 'assets/images/lv/lv${_memberController.memberInfo.value.level}.png',
height: 11, height: 11,
@ -159,14 +177,13 @@ class _MemberPageState extends State<MemberPage>
.official!['title'] != .official!['title'] !=
'') ...[ '') ...[
const SizedBox(height: 6), const SizedBox(height: 6),
Row( Text.rich(
children: [ maxLines: 2,
Text( TextSpan(
_memberController text: _memberController
.memberInfo .memberInfo
.value .value
.official![ .official!['role'] ==
'role'] ==
1 1
? '个人认证:' ? '个人认证:'
: '企业认证:', : '企业认证:',
@ -174,25 +191,36 @@ class _MemberPageState extends State<MemberPage>
color: Theme.of(context) color: Theme.of(context)
.primaryColor, .primaryColor,
), ),
), children: [
Text( TextSpan(
_memberController.memberInfo text: _memberController
.value.official!['title']!, .memberInfo
.value
.official!['title'],
), ),
], ],
), ),
softWrap: true,
),
], ],
const SizedBox(height: 4), const SizedBox(height: 4),
if (_memberController if (_memberController
.memberInfo.value.sign != .memberInfo.value.sign !=
'') '')
Text( SelectableRegion(
magnifierConfiguration:
const TextMagnifierConfiguration(),
focusNode: FocusNode(),
selectionControls:
MaterialTextSelectionControls(),
child: Text(
_memberController _memberController
.memberInfo.value.sign!, .memberInfo.value.sign!,
textAlign: TextAlign.left, textAlign: TextAlign.left,
maxLines: 2, maxLines: 2,
overflow: TextOverflow.ellipsis, overflow: TextOverflow.ellipsis,
), ),
),
], ],
), ),
], ],
@ -261,9 +289,25 @@ class _MemberPageState extends State<MemberPage>
? memberInfo.face ? memberInfo.face
: _memberController.face, : _memberController.face,
), ),
if (!loadingStatus &&
memberInfo.liveRoom != null &&
memberInfo.liveRoom.liveStatus == 1)
Positioned( Positioned(
bottom: 0, bottom: 0,
left: 14, left: 14,
child: GestureDetector(
onTap: () {
LiveItemModel liveItem = LiveItemModel.fromJson({
'title': memberInfo.liveRoom.title,
'uname': memberInfo.name,
'face': memberInfo.face,
'roomid': memberInfo.liveRoom.roomId,
});
Get.toNamed(
'/liveRoom?roomid=${memberInfo.liveRoom.roomId}',
arguments: {'liveItem': liveItem},
);
},
child: Container( child: Container(
padding: const EdgeInsets.fromLTRB(6, 2, 6, 2), padding: const EdgeInsets.fromLTRB(6, 2, 6, 2),
decoration: BoxDecoration( decoration: BoxDecoration(
@ -287,6 +331,7 @@ class _MemberPageState extends State<MemberPage>
) )
]), ]),
), ),
),
) )
], ],
)), )),
@ -356,18 +401,23 @@ class _MemberPageState extends State<MemberPage>
), ),
), ),
const SizedBox(height: 10), const SizedBox(height: 10),
if (_memberController.ownerMid != _memberController.mid) ...[
Row( Row(
children: [ children: [
TextButton( TextButton(
onPressed: () {}, onPressed: () {},
style: TextButton.styleFrom( style: TextButton.styleFrom(
padding: const EdgeInsets.only(left: 42, right: 42), padding: const EdgeInsets.only(left: 42, right: 42),
foregroundColor: !loadingStatus && memberInfo.isFollowed foregroundColor:
? null !loadingStatus && memberInfo.isFollowed
? Theme.of(context).colorScheme.outline
: Theme.of(context).colorScheme.onPrimary, : Theme.of(context).colorScheme.onPrimary,
backgroundColor: !loadingStatus && memberInfo.isFollowed backgroundColor: !loadingStatus &&
memberInfo.isFollowed
? Theme.of(context).colorScheme.onInverseSurface ? Theme.of(context).colorScheme.onInverseSurface
: Theme.of(context).colorScheme.primary, // 设置按钮背景色 : Theme.of(context)
.colorScheme
.primary, // 设置按钮背景色
), ),
child: Text(!loadingStatus && memberInfo.isFollowed child: Text(!loadingStatus && memberInfo.isFollowed
? '取关' ? '取关'
@ -385,6 +435,17 @@ class _MemberPageState extends State<MemberPage>
) )
], ],
) )
] else ...[
TextButton(
onPressed: () {},
style: TextButton.styleFrom(
padding: const EdgeInsets.only(left: 80, right: 80),
foregroundColor: Theme.of(context).colorScheme.onPrimary,
backgroundColor: Theme.of(context).colorScheme.primary,
),
child: const Text('编辑资料'),
)
]
], ],
), ),
), ),