mirror of
https://github.com/bggRGjQaUbCoE/PiliPlus.git
synced 2026-05-31 08:08:19 +08:00
13
lib/models/common/member/user_info_type.dart
Normal file
13
lib/models/common/member/user_info_type.dart
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
import 'package:flutter/material.dart' show Alignment;
|
||||||
|
|
||||||
|
enum UserInfoType {
|
||||||
|
fan('粉丝', .centerLeft),
|
||||||
|
follow('关注', .center),
|
||||||
|
like('获赞', .centerRight),
|
||||||
|
;
|
||||||
|
|
||||||
|
final String title;
|
||||||
|
final Alignment alignment;
|
||||||
|
|
||||||
|
const UserInfoType(this.title, this.alignment);
|
||||||
|
}
|
||||||
@@ -4,6 +4,7 @@ import 'package:PiliPlus/common/widgets/pendant_avatar.dart';
|
|||||||
import 'package:PiliPlus/common/widgets/view_safe_area.dart';
|
import 'package:PiliPlus/common/widgets/view_safe_area.dart';
|
||||||
import 'package:PiliPlus/models/common/image_preview_type.dart';
|
import 'package:PiliPlus/models/common/image_preview_type.dart';
|
||||||
import 'package:PiliPlus/models/common/image_type.dart';
|
import 'package:PiliPlus/models/common/image_type.dart';
|
||||||
|
import 'package:PiliPlus/models/common/member/user_info_type.dart';
|
||||||
import 'package:PiliPlus/models_new/space/space/card.dart';
|
import 'package:PiliPlus/models_new/space/space/card.dart';
|
||||||
import 'package:PiliPlus/models_new/space/space/followings_followed_upper.dart';
|
import 'package:PiliPlus/models_new/space/space/followings_followed_upper.dart';
|
||||||
import 'package:PiliPlus/models_new/space/space/images.dart';
|
import 'package:PiliPlus/models_new/space/space/images.dart';
|
||||||
@@ -24,17 +25,6 @@ import 'package:cached_network_image/cached_network_image.dart';
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:get/get.dart' hide ContextExtensionss;
|
import 'package:get/get.dart' hide ContextExtensionss;
|
||||||
|
|
||||||
enum _UserInfoType {
|
|
||||||
fan('粉丝', .centerLeft),
|
|
||||||
follow('关注', .center),
|
|
||||||
like('获赞', .centerRight),
|
|
||||||
;
|
|
||||||
|
|
||||||
final String title;
|
|
||||||
final Alignment alignment;
|
|
||||||
|
|
||||||
const _UserInfoType(this.title, this.alignment);
|
|
||||||
}
|
|
||||||
|
|
||||||
class UserInfoCard extends StatelessWidget {
|
class UserInfoCard extends StatelessWidget {
|
||||||
const UserInfoCard({
|
const UserInfoCard({
|
||||||
@@ -71,24 +61,24 @@ class UserInfoCard extends StatelessWidget {
|
|||||||
|
|
||||||
Widget _countWidget({
|
Widget _countWidget({
|
||||||
required ColorScheme colorScheme,
|
required ColorScheme colorScheme,
|
||||||
required _UserInfoType type,
|
required UserInfoType type,
|
||||||
}) {
|
}) {
|
||||||
int? count;
|
int? count;
|
||||||
VoidCallback? onTap;
|
VoidCallback? onTap;
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case _UserInfoType.fan:
|
case UserInfoType.fan:
|
||||||
count = card.fans;
|
count = card.fans;
|
||||||
onTap = () => FansPage.toFansPage(
|
onTap = () => FansPage.toFansPage(
|
||||||
mid: card.mid,
|
mid: card.mid,
|
||||||
name: card.name,
|
name: card.name,
|
||||||
);
|
);
|
||||||
case _UserInfoType.follow:
|
case UserInfoType.follow:
|
||||||
count = card.attention;
|
count = card.attention;
|
||||||
onTap = () => FollowPage.toFollowPage(
|
onTap = () => FollowPage.toFollowPage(
|
||||||
mid: card.mid,
|
mid: card.mid,
|
||||||
name: card.name,
|
name: card.name,
|
||||||
);
|
);
|
||||||
case _UserInfoType.like:
|
case UserInfoType.like:
|
||||||
count = card.likes?.likeNum;
|
count = card.likes?.likeNum;
|
||||||
}
|
}
|
||||||
return GestureDetector(
|
return GestureDetector(
|
||||||
@@ -352,7 +342,7 @@ class UserInfoCard extends StatelessWidget {
|
|||||||
mainAxisSize: MainAxisSize.min,
|
mainAxisSize: MainAxisSize.min,
|
||||||
children: [
|
children: [
|
||||||
Row(
|
Row(
|
||||||
children: _UserInfoType.values
|
children: UserInfoType.values
|
||||||
.map(
|
.map(
|
||||||
(e) => Expanded(
|
(e) => Expanded(
|
||||||
child: _countWidget(
|
child: _countWidget(
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ class MemberFavorite extends StatefulWidget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class _MemberFavoriteState extends State<MemberFavorite>
|
class _MemberFavoriteState extends State<MemberFavorite>
|
||||||
with AutomaticKeepAliveClientMixin {
|
with AutomaticKeepAliveClientMixin, GridMixin {
|
||||||
@override
|
@override
|
||||||
bool get wantKeepAlive => true;
|
bool get wantKeepAlive => true;
|
||||||
|
|
||||||
@@ -115,6 +115,9 @@ class _MemberFavoriteState extends State<MemberFavorite>
|
|||||||
_controller.setExpand(isFav);
|
_controller.setExpand(isFav);
|
||||||
(context as Element).markNeedsBuild();
|
(context as Element).markNeedsBuild();
|
||||||
data.refresh();
|
data.refresh();
|
||||||
|
if (!isEnd.value) {
|
||||||
|
isEnd.refresh();
|
||||||
|
}
|
||||||
},
|
},
|
||||||
child: Container(
|
child: Container(
|
||||||
height: 45,
|
height: 45,
|
||||||
@@ -159,18 +162,11 @@ class _MemberFavoriteState extends State<MemberFavorite>
|
|||||||
if (!_controller.isExpand(isFav)) {
|
if (!_controller.isExpand(isFav)) {
|
||||||
return const SliverToBoxAdapter();
|
return const SliverToBoxAdapter();
|
||||||
}
|
}
|
||||||
final end = isEnd.value;
|
|
||||||
if (list != null && list.isNotEmpty) {
|
if (list != null && list.isNotEmpty) {
|
||||||
return SliverList.builder(
|
return SliverGrid.builder(
|
||||||
itemCount: list.length + (end ? 0 : 1),
|
gridDelegate: gridDelegate,
|
||||||
|
itemCount: list.length,
|
||||||
itemBuilder: (context, index) {
|
itemBuilder: (context, index) {
|
||||||
if (!end && index == list.length) {
|
|
||||||
return Obx(
|
|
||||||
() => isEnd.value
|
|
||||||
? const SizedBox.shrink()
|
|
||||||
: _buildLoadMoreItem(theme, isFav),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
final item = list[index];
|
final item = list[index];
|
||||||
return SizedBox(
|
return SizedBox(
|
||||||
height: 98,
|
height: 98,
|
||||||
@@ -190,6 +186,11 @@ class _MemberFavoriteState extends State<MemberFavorite>
|
|||||||
}
|
}
|
||||||
return const SliverToBoxAdapter();
|
return const SliverToBoxAdapter();
|
||||||
}),
|
}),
|
||||||
|
Obx(
|
||||||
|
() => isEnd.value || !_controller.isExpand(isFav)
|
||||||
|
? const SliverToBoxAdapter()
|
||||||
|
: SliverToBoxAdapter(child: _buildLoadMoreItem(theme, isFav)),
|
||||||
|
),
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -61,10 +61,15 @@ class MemberFavItem extends StatelessWidget {
|
|||||||
Stack(
|
Stack(
|
||||||
clipBehavior: Clip.none,
|
clipBehavior: Clip.none,
|
||||||
children: [
|
children: [
|
||||||
NetworkImgLayer(
|
AspectRatio(
|
||||||
|
aspectRatio: StyleString.aspectRatio,
|
||||||
|
child: LayoutBuilder(
|
||||||
|
builder: (context, constraints) => NetworkImgLayer(
|
||||||
src: item.cover,
|
src: item.cover,
|
||||||
width: 140.8,
|
width: constraints.maxWidth,
|
||||||
height: 88,
|
height: constraints.maxHeight,
|
||||||
|
),
|
||||||
|
),
|
||||||
),
|
),
|
||||||
if (item.type == 21)
|
if (item.type == 21)
|
||||||
const PBadge(
|
const PBadge(
|
||||||
|
|||||||
@@ -181,14 +181,13 @@ class _MemberHomeState extends State<MemberHome>
|
|||||||
param1: 'opus',
|
param1: 'opus',
|
||||||
count: res.article!.count!,
|
count: res.article!.count!,
|
||||||
),
|
),
|
||||||
SliverGrid.builder(
|
SliverToBoxAdapter(
|
||||||
gridDelegate: gridDelegate,
|
child: SizedBox(
|
||||||
itemBuilder: (context, index) {
|
height: 98,
|
||||||
return MemberArticleItem(
|
child: MemberArticleItem(
|
||||||
item: res.article!.item![index],
|
item: res.article!.item!.first,
|
||||||
);
|
),
|
||||||
},
|
),
|
||||||
itemCount: isVertical ? 1 : res.article!.item!.length,
|
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
if (res.audios?.item?.isNotEmpty == true) ...[
|
if (res.audios?.item?.isNotEmpty == true) ...[
|
||||||
@@ -206,7 +205,7 @@ class _MemberHomeState extends State<MemberHome>
|
|||||||
item: res.audios!.item![index],
|
item: res.audios!.item![index],
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
itemCount: isVertical ? 1 : min(2, res.audios!.count!),
|
itemCount: isVertical ? 1 : min(3, res.audios!.count!),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
if (res.comic?.item?.isNotEmpty == true) ...[
|
if (res.comic?.item?.isNotEmpty == true) ...[
|
||||||
@@ -222,7 +221,7 @@ class _MemberHomeState extends State<MemberHome>
|
|||||||
itemBuilder: (context, index) {
|
itemBuilder: (context, index) {
|
||||||
return MemberComicItem(item: res.comic!.item![index]);
|
return MemberComicItem(item: res.comic!.item![index]);
|
||||||
},
|
},
|
||||||
itemCount: isVertical ? 1 : min(2, res.comic!.count!),
|
itemCount: isVertical ? 1 : min(3, res.comic!.count!),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
if (res.season?.item?.isNotEmpty == true) ...[
|
if (res.season?.item?.isNotEmpty == true) ...[
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import 'package:PiliPlus/models/member/info.dart';
|
|||||||
import 'package:PiliPlus/models_new/space/space_archive/data.dart';
|
import 'package:PiliPlus/models_new/space/space_archive/data.dart';
|
||||||
import 'package:PiliPlus/models_new/space/space_archive/item.dart';
|
import 'package:PiliPlus/models_new/space/space_archive/item.dart';
|
||||||
import 'package:PiliPlus/pages/common/common_list_controller.dart';
|
import 'package:PiliPlus/pages/common/common_list_controller.dart';
|
||||||
|
import 'package:PiliPlus/utils/accounts.dart';
|
||||||
import 'package:PiliPlus/utils/extension.dart';
|
import 'package:PiliPlus/utils/extension.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
|
|
||||||
@@ -14,9 +15,9 @@ class HorizontalMemberPageController
|
|||||||
|
|
||||||
dynamic mid;
|
dynamic mid;
|
||||||
|
|
||||||
Rx<LoadingState<MemberInfoModel>> userState =
|
final Rx<LoadingState<MemberInfoModel>> userState =
|
||||||
LoadingState<MemberInfoModel>.loading().obs;
|
LoadingState<MemberInfoModel>.loading().obs;
|
||||||
RxMap userStat = {}.obs;
|
final RxMap userStat = {}.obs;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void onInit() {
|
void onInit() {
|
||||||
@@ -30,6 +31,7 @@ class HorizontalMemberPageController
|
|||||||
if (res['status']) {
|
if (res['status']) {
|
||||||
userState.value = Success(res['data']);
|
userState.value = Success(res['data']);
|
||||||
getMemberStat();
|
getMemberStat();
|
||||||
|
getMemberView();
|
||||||
} else {
|
} else {
|
||||||
userState.value = Error(res['msg']);
|
userState.value = Error(res['msg']);
|
||||||
}
|
}
|
||||||
@@ -38,12 +40,14 @@ class HorizontalMemberPageController
|
|||||||
Future<void> getMemberStat() async {
|
Future<void> getMemberStat() async {
|
||||||
var res = await MemberHttp.memberStat(mid: mid);
|
var res = await MemberHttp.memberStat(mid: mid);
|
||||||
if (res['status']) {
|
if (res['status']) {
|
||||||
userStat.value = res['data'];
|
userStat.addAll(res['data']);
|
||||||
getMemberView();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> getMemberView() async {
|
Future<void> getMemberView() async {
|
||||||
|
if (!Accounts.main.isLogin) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
var res = await MemberHttp.memberView(mid: mid);
|
var res = await MemberHttp.memberView(mid: mid);
|
||||||
if (res['status']) {
|
if (res['status']) {
|
||||||
userStat.addAll(res['data']);
|
userStat.addAll(res['data']);
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
import 'package:PiliPlus/common/skeleton/video_card_h.dart';
|
import 'package:PiliPlus/common/skeleton/video_card_h.dart';
|
||||||
import 'package:PiliPlus/common/widgets/button/icon_button.dart';
|
|
||||||
import 'package:PiliPlus/common/widgets/custom_sliver_persistent_header_delegate.dart';
|
|
||||||
import 'package:PiliPlus/common/widgets/flutter/refresh_indicator.dart';
|
import 'package:PiliPlus/common/widgets/flutter/refresh_indicator.dart';
|
||||||
import 'package:PiliPlus/common/widgets/image/network_img_layer.dart';
|
import 'package:PiliPlus/common/widgets/image/network_img_layer.dart';
|
||||||
import 'package:PiliPlus/common/widgets/loading_widget/http_error.dart';
|
import 'package:PiliPlus/common/widgets/loading_widget/http_error.dart';
|
||||||
@@ -8,6 +6,7 @@ import 'package:PiliPlus/common/widgets/loading_widget/loading_widget.dart';
|
|||||||
import 'package:PiliPlus/http/loading_state.dart';
|
import 'package:PiliPlus/http/loading_state.dart';
|
||||||
import 'package:PiliPlus/models/common/image_preview_type.dart';
|
import 'package:PiliPlus/models/common/image_preview_type.dart';
|
||||||
import 'package:PiliPlus/models/common/image_type.dart';
|
import 'package:PiliPlus/models/common/image_type.dart';
|
||||||
|
import 'package:PiliPlus/models/common/member/user_info_type.dart';
|
||||||
import 'package:PiliPlus/models/member/info.dart';
|
import 'package:PiliPlus/models/member/info.dart';
|
||||||
import 'package:PiliPlus/models_new/space/space_archive/item.dart';
|
import 'package:PiliPlus/models_new/space/space_archive/item.dart';
|
||||||
import 'package:PiliPlus/models_new/video/video_detail/episode.dart';
|
import 'package:PiliPlus/models_new/video/video_detail/episode.dart';
|
||||||
@@ -83,21 +82,8 @@ class _HorizontalMemberPageState extends State<HorizontalMemberPage> {
|
|||||||
Loading() => loadingWidget,
|
Loading() => loadingWidget,
|
||||||
Success(:var response) => Column(
|
Success(:var response) => Column(
|
||||||
children: [
|
children: [
|
||||||
const SizedBox(height: 4),
|
|
||||||
Row(
|
|
||||||
mainAxisAlignment: MainAxisAlignment.end,
|
|
||||||
children: [
|
|
||||||
iconButton(
|
|
||||||
context: context,
|
|
||||||
onPressed: Get.back,
|
|
||||||
tooltip: '关闭',
|
|
||||||
icon: const Icon(Icons.clear),
|
|
||||||
size: 32,
|
|
||||||
),
|
|
||||||
const SizedBox(width: 16),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
_buildUserInfo(theme, response),
|
_buildUserInfo(theme, response),
|
||||||
|
_buildHeader(theme),
|
||||||
Expanded(
|
Expanded(
|
||||||
child: refreshIndicator(
|
child: refreshIndicator(
|
||||||
onRefresh: _controller.onRefresh,
|
onRefresh: _controller.onRefresh,
|
||||||
@@ -105,7 +91,6 @@ class _HorizontalMemberPageState extends State<HorizontalMemberPage> {
|
|||||||
controller: _controller.scrollController,
|
controller: _controller.scrollController,
|
||||||
physics: const AlwaysScrollableScrollPhysics(),
|
physics: const AlwaysScrollableScrollPhysics(),
|
||||||
slivers: [
|
slivers: [
|
||||||
_buildSliverHeader(theme),
|
|
||||||
SliverPadding(
|
SliverPadding(
|
||||||
padding: EdgeInsets.only(
|
padding: EdgeInsets.only(
|
||||||
bottom: MediaQuery.viewPaddingOf(context).bottom + 100,
|
bottom: MediaQuery.viewPaddingOf(context).bottom + 100,
|
||||||
@@ -134,14 +119,8 @@ class _HorizontalMemberPageState extends State<HorizontalMemberPage> {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget _buildSliverHeader(ThemeData theme) {
|
Widget _buildHeader(ThemeData theme) {
|
||||||
return SliverPersistentHeader(
|
return Container(
|
||||||
pinned: false,
|
|
||||||
floating: true,
|
|
||||||
delegate: CustomSliverPersistentHeaderDelegate(
|
|
||||||
extent: 40,
|
|
||||||
bgColor: theme.colorScheme.surface,
|
|
||||||
child: Container(
|
|
||||||
height: 40,
|
height: 40,
|
||||||
padding: const EdgeInsets.fromLTRB(12, 0, 6, 0),
|
padding: const EdgeInsets.fromLTRB(12, 0, 6, 0),
|
||||||
child: Row(
|
child: Row(
|
||||||
@@ -180,8 +159,6 @@ class _HorizontalMemberPageState extends State<HorizontalMemberPage> {
|
|||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
|
||||||
),
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -233,14 +210,15 @@ class _HorizontalMemberPageState extends State<HorizontalMemberPage> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Widget _buildUserInfo(ThemeData theme, MemberInfoModel memberInfoModel) {
|
Widget _buildUserInfo(ThemeData theme, MemberInfoModel memberInfoModel) {
|
||||||
return Row(
|
return Padding(
|
||||||
|
padding: const .only(left: 16, top: 10, right: 16, bottom: 3),
|
||||||
|
child: Row(
|
||||||
|
spacing: 10,
|
||||||
children: [
|
children: [
|
||||||
const SizedBox(width: 16),
|
|
||||||
_buildAvatar(memberInfoModel.face!),
|
_buildAvatar(memberInfoModel.face!),
|
||||||
const SizedBox(width: 10),
|
|
||||||
Expanded(child: _buildInfo(theme, memberInfoModel)),
|
Expanded(child: _buildInfo(theme, memberInfoModel)),
|
||||||
const SizedBox(width: 16),
|
|
||||||
],
|
],
|
||||||
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -272,39 +250,20 @@ class _HorizontalMemberPageState extends State<HorizontalMemberPage> {
|
|||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
const SizedBox(height: 2),
|
const SizedBox(height: 4),
|
||||||
Obx(
|
Obx(
|
||||||
() => Row(
|
() => Row(
|
||||||
children: List.generate(5, (index) {
|
children: UserInfoType.values
|
||||||
if (index.isEven) {
|
.map(
|
||||||
return _buildChildInfo(
|
(e) => _buildChildInfo(
|
||||||
theme: theme,
|
theme: theme,
|
||||||
title: const ['粉丝', '关注', '获赞'][index ~/ 2],
|
type: e,
|
||||||
num: index == 0
|
userStat: _controller.userStat,
|
||||||
? _controller.userStat['follower'] != null
|
memberInfoModel: memberInfoModel,
|
||||||
? NumUtils.numFormat(_controller.userStat['follower'])
|
),
|
||||||
: ''
|
)
|
||||||
: index == 2
|
.expand((child) sync* {
|
||||||
? _controller.userStat['following'] ?? ''
|
yield SizedBox(
|
||||||
: _controller.userStat['likes'] != null
|
|
||||||
? NumUtils.numFormat(_controller.userStat['likes'])
|
|
||||||
: '',
|
|
||||||
onTap: () {
|
|
||||||
if (index == 0) {
|
|
||||||
FansPage.toFansPage(
|
|
||||||
mid: widget.mid,
|
|
||||||
name: memberInfoModel.name,
|
|
||||||
);
|
|
||||||
} else if (index == 2) {
|
|
||||||
FollowPage.toFollowPage(
|
|
||||||
mid: widget.mid,
|
|
||||||
name: memberInfoModel.name,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
return SizedBox(
|
|
||||||
height: 10,
|
height: 10,
|
||||||
width: 20,
|
width: 20,
|
||||||
child: VerticalDivider(
|
child: VerticalDivider(
|
||||||
@@ -312,12 +271,15 @@ class _HorizontalMemberPageState extends State<HorizontalMemberPage> {
|
|||||||
color: theme.colorScheme.outline,
|
color: theme.colorScheme.outline,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
yield child;
|
||||||
}),
|
})
|
||||||
|
.skip(1)
|
||||||
|
.toList(),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
const SizedBox(height: 2),
|
const SizedBox(height: 8),
|
||||||
Row(
|
Row(
|
||||||
|
spacing: 8,
|
||||||
children: [
|
children: [
|
||||||
Expanded(
|
Expanded(
|
||||||
child: FilledButton.tonal(
|
child: FilledButton.tonal(
|
||||||
@@ -329,6 +291,7 @@ class _HorizontalMemberPageState extends State<HorizontalMemberPage> {
|
|||||||
? theme.colorScheme.outline
|
? theme.colorScheme.outline
|
||||||
: null,
|
: null,
|
||||||
padding: EdgeInsets.zero,
|
padding: EdgeInsets.zero,
|
||||||
|
tapTargetSize: .shrinkWrap,
|
||||||
visualDensity: const VisualDensity(vertical: -2),
|
visualDensity: const VisualDensity(vertical: -2),
|
||||||
),
|
),
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
@@ -362,11 +325,11 @@ class _HorizontalMemberPageState extends State<HorizontalMemberPage> {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
const SizedBox(width: 8),
|
|
||||||
Expanded(
|
Expanded(
|
||||||
child: OutlinedButton(
|
child: OutlinedButton(
|
||||||
style: OutlinedButton.styleFrom(
|
style: OutlinedButton.styleFrom(
|
||||||
padding: EdgeInsets.zero,
|
padding: EdgeInsets.zero,
|
||||||
|
tapTargetSize: .shrinkWrap,
|
||||||
visualDensity: const VisualDensity(vertical: -2),
|
visualDensity: const VisualDensity(vertical: -2),
|
||||||
),
|
),
|
||||||
onPressed: () => Get.toNamed('/member?mid=${widget.mid}'),
|
onPressed: () => Get.toNamed('/member?mid=${widget.mid}'),
|
||||||
@@ -384,14 +347,36 @@ class _HorizontalMemberPageState extends State<HorizontalMemberPage> {
|
|||||||
|
|
||||||
Widget _buildChildInfo({
|
Widget _buildChildInfo({
|
||||||
required ThemeData theme,
|
required ThemeData theme,
|
||||||
required String title,
|
required UserInfoType type,
|
||||||
required dynamic num,
|
required Map userStat,
|
||||||
required VoidCallback onTap,
|
required MemberInfoModel memberInfoModel,
|
||||||
}) {
|
}) {
|
||||||
|
dynamic num;
|
||||||
|
VoidCallback? onTap;
|
||||||
|
switch (type) {
|
||||||
|
case UserInfoType.fan:
|
||||||
|
num = userStat['follower'] != null
|
||||||
|
? NumUtils.numFormat(userStat['follower'])
|
||||||
|
: '';
|
||||||
|
onTap = () => FansPage.toFansPage(
|
||||||
|
mid: widget.mid,
|
||||||
|
name: memberInfoModel.name,
|
||||||
|
);
|
||||||
|
case UserInfoType.follow:
|
||||||
|
num = userStat['following'] ?? '';
|
||||||
|
onTap = () => FollowPage.toFollowPage(
|
||||||
|
mid: widget.mid,
|
||||||
|
name: memberInfoModel.name,
|
||||||
|
);
|
||||||
|
case UserInfoType.like:
|
||||||
|
num = userStat['likes'] != null
|
||||||
|
? NumUtils.numFormat(userStat['likes'])
|
||||||
|
: '';
|
||||||
|
}
|
||||||
return GestureDetector(
|
return GestureDetector(
|
||||||
onTap: onTap,
|
onTap: onTap,
|
||||||
child: Text(
|
child: Text(
|
||||||
'$num$title',
|
'$num${type.title}',
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
fontSize: 14,
|
fontSize: 14,
|
||||||
color: theme.colorScheme.outline,
|
color: theme.colorScheme.outline,
|
||||||
|
|||||||
Reference in New Issue
Block a user