feat: 关注/取关用户

This commit is contained in:
guozhigq
2023-07-21 22:14:17 +08:00
parent ddc4a8eec2
commit b9f9714677
9 changed files with 251 additions and 195 deletions

View File

@ -9,6 +9,8 @@ import 'package:pilipala/pages/member/archive/view.dart';
import 'package:pilipala/pages/member/index.dart';
import 'package:pilipala/utils/utils.dart';
import 'widgets/profile.dart';
class MemberPage extends StatefulWidget {
const MemberPage({super.key});
@ -106,8 +108,7 @@ class _MemberPageState extends State<MemberPage>
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
profile(
_memberController.memberInfo.value),
profile(_memberController),
const SizedBox(height: 14),
Row(
children: [
@ -234,7 +235,8 @@ class _MemberPageState extends State<MemberPage>
}
} else {
// 骨架屏
return profile(null, loadingStatus: true);
return profile(_memberController,
loadingStatus: true);
}
},
),
@ -251,10 +253,10 @@ class _MemberPageState extends State<MemberPage>
onlyOneScrollInBody: true,
body: Column(
children: [
Container(
SizedBox(
width: double.infinity,
height: 50,
child: TabBar(controller: _tabController, tabs: [
child: TabBar(controller: _tabController, tabs: const [
Tab(text: '主页'),
Tab(text: '动态'),
Tab(text: '投稿'),
@ -263,7 +265,7 @@ class _MemberPageState extends State<MemberPage>
Expanded(
child: TabBarView(
controller: _tabController,
children: [
children: const [
Text('主页'),
Text('动态'),
ArchivePanel(),
@ -274,187 +276,4 @@ class _MemberPageState extends State<MemberPage>
),
);
}
Widget profile(memberInfo, {loadingStatus = false}) {
return Padding(
padding: EdgeInsets.only(top: 3 * MediaQuery.of(context).padding.top),
child: Row(
children: [
Hero(
tag: _memberController.heroTag!,
child: Stack(
children: [
NetworkImgLayer(
width: 90,
height: 90,
type: 'avatar',
src: !loadingStatus
? memberInfo.face
: _memberController.face,
),
if (!loadingStatus &&
memberInfo.liveRoom != null &&
memberInfo.liveRoom.liveStatus == 1)
Positioned(
bottom: 0,
left: 14,
child: GestureDetector(
onTap: () {
LiveItemModel liveItem = LiveItemModel.fromJson({
'title': memberInfo.liveRoom.title,
'uname': memberInfo.name,
'face': memberInfo.face,
'roomid': memberInfo.liveRoom.roomId,
'watched_show': memberInfo.liveRoom.watchedShow,
});
Get.toNamed(
'/liveRoom?roomid=${memberInfo.liveRoom.roomId}',
arguments: {'liveItem': liveItem},
);
},
child: Container(
padding: const EdgeInsets.fromLTRB(6, 2, 6, 2),
decoration: BoxDecoration(
color: Theme.of(context).colorScheme.primary,
borderRadius:
const BorderRadius.all(Radius.circular(10)),
),
child: Row(children: [
Image.asset(
'assets/images/live.gif',
height: 10,
),
Text(
' 直播中',
style: TextStyle(
color: Colors.white,
fontSize: Theme.of(context)
.textTheme
.labelSmall!
.fontSize),
)
]),
),
),
)
],
)),
const SizedBox(width: 12),
Expanded(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Padding(
padding: const EdgeInsets.only(left: 10, right: 10),
child: Row(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
Column(
children: [
Text(
!loadingStatus
? _memberController.userStat!['following']
.toString()
: '-',
style: const TextStyle(fontWeight: FontWeight.bold),
),
Text(
'关注',
style: TextStyle(
fontSize: Theme.of(context)
.textTheme
.labelMedium!
.fontSize),
)
],
),
Column(
children: [
Text(
!loadingStatus
? Utils.numFormat(
_memberController.userStat!['follower'],
)
: '-',
style:
const TextStyle(fontWeight: FontWeight.bold)),
Text('粉丝',
style: TextStyle(
fontSize: Theme.of(context)
.textTheme
.labelMedium!
.fontSize))
],
),
Column(
children: [
const Text('-',
style: TextStyle(fontWeight: FontWeight.bold)),
Text(
'获赞',
style: TextStyle(
fontSize: Theme.of(context)
.textTheme
.labelMedium!
.fontSize),
)
],
),
],
),
),
const SizedBox(height: 10),
if (_memberController.ownerMid != _memberController.mid) ...[
Row(
children: [
TextButton(
onPressed: () {},
style: TextButton.styleFrom(
padding: const EdgeInsets.only(left: 42, right: 42),
foregroundColor:
!loadingStatus && memberInfo.isFollowed
? Theme.of(context).colorScheme.outline
: Theme.of(context).colorScheme.onPrimary,
backgroundColor: !loadingStatus &&
memberInfo.isFollowed
? Theme.of(context).colorScheme.onInverseSurface
: Theme.of(context)
.colorScheme
.primary, // 设置按钮背景色
),
child: Text(!loadingStatus && memberInfo.isFollowed
? '取关'
: '关注'),
),
const SizedBox(width: 8),
TextButton(
onPressed: () {},
style: TextButton.styleFrom(
padding: const EdgeInsets.only(left: 42, right: 42),
backgroundColor:
Theme.of(context).colorScheme.onInverseSurface,
),
child: const Text('发消息'),
)
],
)
] 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('编辑资料'),
)
]
],
),
),
],
),
);
}
}