1611 lines
78 KiB
Dart
1611 lines
78 KiB
Dart
import 'dart:convert';
|
||
import 'dart:ui';
|
||
import 'package:carousel_slider/carousel_slider.dart';
|
||
import 'package:flutter/material.dart';
|
||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||
import 'package:extended_nested_scroll_view/extended_nested_scroll_view.dart';
|
||
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
|
||
import 'package:yumi/modules/user/profile/profile/sc_profile_page.dart';
|
||
import 'package:yumi/modules/user/profile/props/sc_giftwall_page.dart';
|
||
import 'package:yumi/ui_kit/components/sc_debounce_widget.dart';
|
||
import 'package:yumi/ui_kit/components/text/sc_text.dart';
|
||
import 'package:yumi/shared/tools/sc_room_utils.dart';
|
||
import 'package:yumi/shared/tools/sc_user_utils.dart';
|
||
import 'package:yumi/modules/index/main_route.dart';
|
||
import 'package:provider/provider.dart';
|
||
import 'package:tencent_cloud_chat_sdk/enum/conversation_type.dart';
|
||
import 'package:tencent_cloud_chat_sdk/models/v2_tim_conversation.dart';
|
||
import 'package:yumi/app_localizations.dart';
|
||
import 'package:yumi/ui_kit/components/appbar/socialchat_appbar.dart';
|
||
import 'package:yumi/ui_kit/components/dialog/dialog_base.dart';
|
||
import 'package:yumi/ui_kit/components/sc_compontent.dart';
|
||
import 'package:yumi/ui_kit/components/sc_tts.dart';
|
||
import 'package:yumi/app/routes/sc_routes.dart';
|
||
import 'package:yumi/app/routes/sc_fluro_navigator.dart';
|
||
import 'package:yumi/shared/tools/sc_loading_manager.dart';
|
||
import 'package:yumi/shared/data_sources/sources/local/user_manager.dart';
|
||
import 'package:yumi/shared/data_sources/sources/repositories/sc_user_repository_impl.dart';
|
||
import 'package:yumi/shared/business_logic/models/res/login_res.dart';
|
||
import 'package:yumi/services/audio/rtm_manager.dart';
|
||
import 'package:yumi/services/auth/user_profile_manager.dart';
|
||
import 'package:yumi/ui_kit/theme/socialchat_theme.dart';
|
||
|
||
import '../../../app/constants/sc_screen.dart';
|
||
import '../../../shared/business_logic/models/res/sc_user_counter_res.dart';
|
||
import '../../../shared/business_logic/models/res/sc_user_identity_res.dart';
|
||
import '../../../shared/business_logic/usecases/sc_fixed_width_tabIndicator.dart';
|
||
import '../../chat/chat_route.dart';
|
||
|
||
class PersonDetailPage extends StatefulWidget {
|
||
final String isMe;
|
||
final String tageId;
|
||
|
||
const PersonDetailPage({Key? key, required this.isMe, required this.tageId})
|
||
: super(key: key);
|
||
|
||
@override
|
||
_PersonDetailPageState createState() => _PersonDetailPageState();
|
||
}
|
||
|
||
class _PersonDetailPageState extends State<PersonDetailPage>
|
||
with SingleTickerProviderStateMixin {
|
||
late TabController _tabController;
|
||
final List<Widget> _pages = [];
|
||
final List<Widget> _tabs = [];
|
||
SCUserIdentityRes? userIdentity;
|
||
|
||
bool isFollow = false;
|
||
bool isLoading = true;
|
||
bool isBlacklistLoading = true;
|
||
bool isBlacklist = false;
|
||
|
||
Map<String, SCUserCounterRes> counterMap = {};
|
||
|
||
// 添加滚动控制器
|
||
final ScrollController _scrollController = ScrollController();
|
||
double _opacity = 0.0;
|
||
|
||
@override
|
||
void initState() {
|
||
super.initState();
|
||
|
||
// _pages.add(PersonDynamicListPage(false, widget.tageId));
|
||
_pages.add(SCProfilePage(false, widget.tageId));
|
||
_pages.add(SCGiftwallPage(widget.tageId));
|
||
// _pages.add(RelationShipPage(false, widget.tageId));
|
||
_tabController = TabController(
|
||
initialIndex: 0,
|
||
length: _pages.length,
|
||
vsync: this,
|
||
);
|
||
_tabController.addListener(() {
|
||
setState(() {}); // 刷新UI
|
||
}); // 监听切换
|
||
|
||
// 监听滚动
|
||
_scrollController.addListener(() {
|
||
if (_scrollController.hasClients) {
|
||
final offset = _scrollController.offset;
|
||
// 当滚动到一定位置时,头像和昵称应该完全显示在AppBar上
|
||
// 这里计算透明度,可以根据需要调整
|
||
final newOpacity = (offset / 320).clamp(0.0, 1.0);
|
||
if (newOpacity != _opacity) {
|
||
setState(() {
|
||
_opacity = newOpacity;
|
||
});
|
||
}
|
||
}
|
||
});
|
||
|
||
Provider.of<SocialChatUserProfileManager>(context, listen: false)
|
||
.userProfile = null;
|
||
Provider.of<SocialChatUserProfileManager>(
|
||
context,
|
||
listen: false,
|
||
).getUserInfoById(widget.tageId);
|
||
SCAccountRepository().userIdentity(userId: widget.tageId).then((v) {
|
||
userIdentity = v;
|
||
setState(() {});
|
||
});
|
||
if (widget.isMe != "true") {
|
||
SCAccountRepository()
|
||
.followCheck(widget.tageId)
|
||
.then((v) {
|
||
isFollow = v;
|
||
isLoading = false;
|
||
setState(() {});
|
||
})
|
||
.catchError((e) {
|
||
setState(() {
|
||
isLoading = false;
|
||
});
|
||
});
|
||
SCAccountRepository()
|
||
.blacklistCheck(widget.tageId)
|
||
.then((v) {
|
||
isBlacklist = v;
|
||
isBlacklistLoading = false;
|
||
setState(() {});
|
||
if (isBlacklist) {
|
||
SCTts.show(
|
||
SCAppLocalizations.of(context)!.thisUserHasBeenBlacklisted,
|
||
);
|
||
}
|
||
})
|
||
.catchError((e) {
|
||
setState(() {
|
||
isBlacklistLoading = false;
|
||
});
|
||
});
|
||
} else {
|
||
isBlacklist = false;
|
||
isBlacklistLoading = false;
|
||
}
|
||
userCounter(widget.tageId);
|
||
}
|
||
|
||
void userCounter(String userId) async {
|
||
counterMap.clear();
|
||
var userCounterList = await SCAccountRepository().userCounter(userId);
|
||
counterMap = Map.fromEntries(
|
||
userCounterList.map(
|
||
(counter) => MapEntry(counter.counterType ?? "", counter),
|
||
),
|
||
);
|
||
setState(() {});
|
||
}
|
||
|
||
Widget _buildTab(int index, String text) {
|
||
final isSelected = _tabController.index == index;
|
||
return Tab(text: text);
|
||
}
|
||
|
||
Widget _buildProfileHeader(
|
||
SocialChatUserProfileManager ref,
|
||
List<PersonPhoto> backgroundPhotos,
|
||
) {
|
||
return SizedBox(
|
||
height: 450.w,
|
||
child: Stack(
|
||
children: [
|
||
SizedBox(
|
||
height: 300.w,
|
||
width: ScreenUtil().screenWidth,
|
||
child:
|
||
backgroundPhotos.isNotEmpty
|
||
? CarouselSlider(
|
||
options: CarouselOptions(
|
||
height: 300.w,
|
||
autoPlay: backgroundPhotos.length > 1,
|
||
enlargeCenterPage: false,
|
||
aspectRatio: 1 / 1,
|
||
enableInfiniteScroll: true,
|
||
autoPlayAnimationDuration: Duration(milliseconds: 800),
|
||
viewportFraction: 1,
|
||
onPageChanged: (index, reason) {
|
||
setState(() {});
|
||
},
|
||
),
|
||
items:
|
||
backgroundPhotos.map((item) {
|
||
return GestureDetector(
|
||
child: netImage(
|
||
url: item.url ?? "",
|
||
width: ScreenUtil().screenWidth,
|
||
height: 300.w,
|
||
fit: BoxFit.cover,
|
||
),
|
||
onTap: () {},
|
||
);
|
||
}).toList(),
|
||
)
|
||
: Image.asset(
|
||
'sc_images/person/sc_icon_my_head_bg_defalt.png',
|
||
width: ScreenUtil().screenWidth,
|
||
height: 300.w,
|
||
fit: BoxFit.cover,
|
||
),
|
||
),
|
||
Positioned(
|
||
top: 250.w,
|
||
left: 0,
|
||
right: 0,
|
||
bottom: 0,
|
||
child: Container(
|
||
decoration: BoxDecoration(
|
||
color: Color(0xff083b2f),
|
||
borderRadius: BorderRadius.only(
|
||
topLeft: Radius.circular(8.w),
|
||
topRight: Radius.circular(8.w),
|
||
),
|
||
),
|
||
),
|
||
),
|
||
Positioned(
|
||
top: 210.w,
|
||
left: 0,
|
||
right: 0,
|
||
child: Column(
|
||
crossAxisAlignment: CrossAxisAlignment.start,
|
||
children: [
|
||
Row(
|
||
children: [
|
||
SizedBox(width: 15.w),
|
||
(ref.userProfile?.cpList?.isNotEmpty ?? false)
|
||
? SizedBox(
|
||
height: 100.w,
|
||
child: Stack(
|
||
alignment: Alignment.center,
|
||
children: [
|
||
Transform.translate(
|
||
offset: Offset(0, -5),
|
||
child: Row(
|
||
mainAxisSize: MainAxisSize.min,
|
||
crossAxisAlignment: CrossAxisAlignment.center,
|
||
children: [
|
||
GestureDetector(
|
||
child: netImage(
|
||
url:
|
||
ref
|
||
.userProfile
|
||
?.cpList
|
||
?.first
|
||
.meUserAvatar ??
|
||
"",
|
||
defaultImg:
|
||
"sc_images/general/sc_icon_avar_defalt.png",
|
||
width: 56.w,
|
||
shape: BoxShape.circle,
|
||
),
|
||
onTap: () {
|
||
String encodedUrls =
|
||
Uri.encodeComponent(
|
||
jsonEncode([
|
||
ref
|
||
.userProfile
|
||
?.cpList
|
||
?.first
|
||
.meUserAvatar,
|
||
]),
|
||
);
|
||
SCNavigatorUtils.push(
|
||
context,
|
||
"${SCMainRoute.imagePreview}?imageUrls=$encodedUrls&initialIndex=0",
|
||
);
|
||
},
|
||
),
|
||
SizedBox(width: 32.w),
|
||
GestureDetector(
|
||
onTap: () {
|
||
SCNavigatorUtils.push(
|
||
context,
|
||
replace: true,
|
||
"${SCMainRoute.person}?isMe=${AccountStorage().getCurrentUser()?.userProfile?.id == ref.userProfile?.cpList?.first.cpUserId}&tageId=${ref.userProfile?.cpList?.first.cpUserId}",
|
||
);
|
||
},
|
||
child: netImage(
|
||
url:
|
||
ref
|
||
.userProfile
|
||
?.cpList
|
||
?.first
|
||
.cpUserAvatar ??
|
||
"",
|
||
defaultImg:
|
||
"sc_images/general/sc_icon_avar_defalt.png",
|
||
width: 56.w,
|
||
shape: BoxShape.circle,
|
||
),
|
||
),
|
||
],
|
||
),
|
||
),
|
||
IgnorePointer(
|
||
child: Transform.translate(
|
||
offset: Offset(0, -15),
|
||
child: Image.asset(
|
||
"sc_images/person/sc_icon_send_cp_requst_dialog_head.png",
|
||
),
|
||
),
|
||
),
|
||
],
|
||
),
|
||
)
|
||
: GestureDetector(
|
||
child: head(
|
||
url: ref.userProfile?.userAvatar ?? "",
|
||
width: 88.w,
|
||
headdress:
|
||
ref.userProfile?.getHeaddress()?.sourceUrl,
|
||
),
|
||
onTap: () {
|
||
String encodedUrls = Uri.encodeComponent(
|
||
jsonEncode([ref.userProfile?.userAvatar]),
|
||
);
|
||
SCNavigatorUtils.push(
|
||
context,
|
||
"${SCMainRoute.imagePreview}?imageUrls=$encodedUrls&initialIndex=0",
|
||
);
|
||
},
|
||
),
|
||
],
|
||
),
|
||
SizedBox(height: 6.w),
|
||
Row(
|
||
children: [
|
||
SizedBox(width: 25.w),
|
||
socialchatNickNameText(
|
||
maxWidth: 135.w,
|
||
ref.userProfile?.userNickname ?? "",
|
||
fontSize: 18.sp,
|
||
textColor: Colors.white,
|
||
fontWeight: FontWeight.w600,
|
||
type: ref.userProfile?.getVIP()?.name ?? "",
|
||
needScroll:
|
||
(ref.userProfile?.userNickname?.characters.length ??
|
||
0) >
|
||
13,
|
||
),
|
||
SizedBox(width: 3.w),
|
||
getVIPBadge(
|
||
ref.userProfile?.getVIP()?.name,
|
||
width: 45.w,
|
||
height: 25.w,
|
||
),
|
||
Row(
|
||
children: [
|
||
SizedBox(width: 5.w),
|
||
Container(
|
||
width:
|
||
(ref.userProfile?.age ?? 0) > 999 ? 58.w : 48.w,
|
||
height: 24.w,
|
||
decoration: BoxDecoration(
|
||
image: DecorationImage(
|
||
image: AssetImage(
|
||
ref.userProfile?.userSex == 0
|
||
? "sc_images/login/sc_icon_sex_woman_bg.png"
|
||
: "sc_images/login/sc_icon_sex_man_bg.png",
|
||
),
|
||
),
|
||
),
|
||
child: Row(
|
||
crossAxisAlignment: CrossAxisAlignment.center,
|
||
mainAxisAlignment: MainAxisAlignment.center,
|
||
children: [
|
||
xb(ref.userProfile?.userSex),
|
||
text(
|
||
"${ref.userProfile?.age}",
|
||
textColor: Colors.white,
|
||
fontSize: 14.sp,
|
||
fontWeight: FontWeight.w600,
|
||
),
|
||
SizedBox(width: 3.w),
|
||
],
|
||
),
|
||
),
|
||
],
|
||
),
|
||
],
|
||
),
|
||
SizedBox(height: 5.w),
|
||
Row(
|
||
children: [
|
||
SizedBox(width: 25.w),
|
||
text(
|
||
"ID:${ref.userProfile?.account ?? ""}",
|
||
textColor: Colors.white,
|
||
fontWeight: FontWeight.w400,
|
||
fontSize: 16.sp,
|
||
),
|
||
],
|
||
),
|
||
SizedBox(height: 5.w),
|
||
Consumer<SocialChatUserProfileManager>(
|
||
builder: (context, ref, child) {
|
||
return Container(
|
||
height: 72.w,
|
||
alignment: AlignmentDirectional.center,
|
||
width: ScreenUtil().screenWidth,
|
||
margin: EdgeInsets.symmetric(horizontal: 18.w),
|
||
padding: EdgeInsets.symmetric(horizontal: 35.w),
|
||
child: Row(
|
||
mainAxisSize: MainAxisSize.max,
|
||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||
children: [
|
||
GestureDetector(
|
||
child: Column(
|
||
mainAxisAlignment: MainAxisAlignment.center,
|
||
children: [
|
||
text(
|
||
"${counterMap["INTERVIEW"]?.quantity ?? 0}",
|
||
fontSize: 17.sp,
|
||
textColor: Colors.white,
|
||
fontWeight: FontWeight.bold,
|
||
),
|
||
text(
|
||
SCAppLocalizations.of(context)!.vistors,
|
||
fontSize: 14.sp,
|
||
textColor: Color(0xffB1B1B1),
|
||
),
|
||
],
|
||
),
|
||
onTap: () {
|
||
if (widget.isMe == "true") {
|
||
SCNavigatorUtils.push(
|
||
context,
|
||
SCMainRoute.vistors,
|
||
);
|
||
}
|
||
},
|
||
),
|
||
Container(
|
||
decoration: BoxDecoration(
|
||
gradient: LinearGradient(
|
||
colors: [
|
||
Color(0xff333333).withOpacity(0.0),
|
||
Color(0xff333333),
|
||
Color(0xff333333).withOpacity(0.0),
|
||
],
|
||
begin: Alignment.topCenter,
|
||
end: Alignment.bottomCenter,
|
||
),
|
||
),
|
||
height: 25.w,
|
||
width: 1.w,
|
||
),
|
||
GestureDetector(
|
||
onTap: () {
|
||
if (widget.isMe == "true") {
|
||
SCNavigatorUtils.push(
|
||
context,
|
||
SCMainRoute.follow,
|
||
);
|
||
}
|
||
},
|
||
child: Column(
|
||
mainAxisAlignment: MainAxisAlignment.center,
|
||
children: [
|
||
text(
|
||
"${counterMap["SUBSCRIPTION"]?.quantity ?? 0}",
|
||
fontSize: 17.sp,
|
||
textColor: Colors.white,
|
||
fontWeight: FontWeight.bold,
|
||
),
|
||
text(
|
||
SCAppLocalizations.of(context)!.follow,
|
||
fontSize: 14.sp,
|
||
textColor: Color(0xffB1B1B1),
|
||
),
|
||
],
|
||
),
|
||
),
|
||
Container(
|
||
decoration: BoxDecoration(
|
||
gradient: LinearGradient(
|
||
colors: [
|
||
Color(0xff333333).withOpacity(0.0),
|
||
Color(0xff333333),
|
||
Color(0xff333333).withOpacity(0.0),
|
||
],
|
||
begin: Alignment.topCenter,
|
||
end: Alignment.bottomCenter,
|
||
),
|
||
),
|
||
height: 25.w,
|
||
width: 1.w,
|
||
),
|
||
GestureDetector(
|
||
child: Column(
|
||
mainAxisAlignment: MainAxisAlignment.center,
|
||
children: [
|
||
text(
|
||
"${counterMap["FANS"]?.quantity ?? 0}",
|
||
fontSize: 17.sp,
|
||
textColor: Colors.white,
|
||
fontWeight: FontWeight.bold,
|
||
),
|
||
text(
|
||
SCAppLocalizations.of(context)!.fans,
|
||
fontSize: 14.sp,
|
||
textColor: Color(0xffB1B1B1),
|
||
),
|
||
],
|
||
),
|
||
onTap: () {
|
||
if (widget.isMe == "true") {
|
||
SCNavigatorUtils.push(
|
||
context,
|
||
SCMainRoute.fans,
|
||
);
|
||
}
|
||
},
|
||
),
|
||
],
|
||
),
|
||
);
|
||
},
|
||
),
|
||
SizedBox(height: 6.w),
|
||
],
|
||
),
|
||
),
|
||
],
|
||
),
|
||
);
|
||
}
|
||
|
||
Widget _buildSkeletonPiece({
|
||
double? width,
|
||
required double height,
|
||
BorderRadius? borderRadius,
|
||
BoxShape shape = BoxShape.rectangle,
|
||
}) {
|
||
return Container(
|
||
width: width,
|
||
height: height,
|
||
decoration: BoxDecoration(
|
||
color: Colors.white.withOpacity(0.14),
|
||
borderRadius:
|
||
shape == BoxShape.circle
|
||
? null
|
||
: (borderRadius ?? BorderRadius.circular(8.w)),
|
||
shape: shape,
|
||
),
|
||
);
|
||
}
|
||
|
||
Widget _buildProfileSkeleton() {
|
||
return SingleChildScrollView(
|
||
physics: const NeverScrollableScrollPhysics(),
|
||
child: Column(
|
||
crossAxisAlignment: CrossAxisAlignment.start,
|
||
children: [
|
||
SizedBox(height: 210.w),
|
||
Padding(
|
||
padding: EdgeInsets.only(left: 15.w),
|
||
child: _buildSkeletonPiece(
|
||
width: 88.w,
|
||
height: 88.w,
|
||
shape: BoxShape.circle,
|
||
),
|
||
),
|
||
SizedBox(height: 10.w),
|
||
Padding(
|
||
padding: EdgeInsets.only(left: 25.w),
|
||
child: Column(
|
||
crossAxisAlignment: CrossAxisAlignment.start,
|
||
children: [
|
||
_buildSkeletonPiece(width: 150.w, height: 24.w),
|
||
SizedBox(height: 10.w),
|
||
_buildSkeletonPiece(width: 110.w, height: 18.w),
|
||
],
|
||
),
|
||
),
|
||
SizedBox(height: 12.w),
|
||
Container(
|
||
height: 72.w,
|
||
alignment: AlignmentDirectional.center,
|
||
width: ScreenUtil().screenWidth,
|
||
margin: EdgeInsets.symmetric(horizontal: 18.w),
|
||
padding: EdgeInsets.symmetric(horizontal: 35.w),
|
||
child: Row(
|
||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||
children: List.generate(
|
||
3,
|
||
(_) => Column(
|
||
mainAxisAlignment: MainAxisAlignment.center,
|
||
children: [
|
||
_buildSkeletonPiece(width: 24.w, height: 22.w),
|
||
SizedBox(height: 8.w),
|
||
_buildSkeletonPiece(width: 58.w, height: 14.w),
|
||
],
|
||
),
|
||
),
|
||
),
|
||
),
|
||
SizedBox(height: 6.w),
|
||
Container(
|
||
padding: EdgeInsets.symmetric(horizontal: 3.w),
|
||
decoration: const BoxDecoration(
|
||
gradient: LinearGradient(
|
||
colors: [Color(0xff083b2f), Color(0xff083b2f)],
|
||
begin: AlignmentDirectional.topStart,
|
||
end: AlignmentDirectional.bottomEnd,
|
||
),
|
||
),
|
||
child: Column(
|
||
children: [
|
||
SizedBox(height: 10.w),
|
||
Padding(
|
||
padding: EdgeInsets.symmetric(horizontal: 10.w),
|
||
child: Row(
|
||
children: [
|
||
_buildSkeletonPiece(width: 92.w, height: 18.w),
|
||
SizedBox(width: 14.w),
|
||
_buildSkeletonPiece(width: 72.w, height: 18.w),
|
||
],
|
||
),
|
||
),
|
||
SizedBox(height: 24.w),
|
||
Padding(
|
||
padding: EdgeInsets.symmetric(horizontal: 18.w),
|
||
child: Column(
|
||
crossAxisAlignment: CrossAxisAlignment.start,
|
||
children: [
|
||
_buildSkeletonPiece(width: 100.w, height: 22.w),
|
||
SizedBox(height: 18.w),
|
||
_buildSkeletonPiece(width: 220.w, height: 16.w),
|
||
SizedBox(height: 14.w),
|
||
_buildSkeletonPiece(width: 190.w, height: 16.w),
|
||
SizedBox(height: 14.w),
|
||
_buildSkeletonPiece(width: 240.w, height: 16.w),
|
||
SizedBox(height: 14.w),
|
||
_buildSkeletonPiece(width: 200.w, height: 16.w),
|
||
SizedBox(height: 14.w),
|
||
_buildSkeletonPiece(width: 160.w, height: 16.w),
|
||
],
|
||
),
|
||
),
|
||
SizedBox(height: 220.w),
|
||
],
|
||
),
|
||
),
|
||
],
|
||
),
|
||
);
|
||
}
|
||
|
||
@override
|
||
Widget build(BuildContext context) {
|
||
_tabs.clear();
|
||
// _tabs.add(_buildTab(0, SCAppLocalizations.of(context)!.dynamicT));
|
||
_tabs.add(_buildTab(0, SCAppLocalizations.of(context)!.aboutMe));
|
||
_tabs.add(_buildTab(1, SCAppLocalizations.of(context)!.giftwall));
|
||
// _tabs.add(_buildTab(3, SCAppLocalizations.of(context)!.relationShip));
|
||
return Consumer<SocialChatUserProfileManager>(
|
||
builder: (context, ref, child) {
|
||
final bool isProfileLoading = ref.userProfile == null;
|
||
List<PersonPhoto> backgroundPhotos = [];
|
||
backgroundPhotos =
|
||
(isProfileLoading
|
||
? <PersonPhoto>[]
|
||
: (ref.userProfile?.backgroundPhotos ?? []))
|
||
.where((t) => t.status == 1)
|
||
.toList();
|
||
return Directionality(
|
||
textDirection:
|
||
window.locale.languageCode == "ar"
|
||
? TextDirection.rtl
|
||
: TextDirection.ltr,
|
||
child: SafeArea(
|
||
top: false,
|
||
child: Stack(
|
||
children: [
|
||
Positioned.fill(
|
||
child: Column(
|
||
children: [
|
||
SizedBox(
|
||
height: 300.w,
|
||
width: ScreenUtil().screenWidth,
|
||
child:
|
||
backgroundPhotos.isNotEmpty
|
||
? netImage(
|
||
url: backgroundPhotos.first.url ?? "",
|
||
width: ScreenUtil().screenWidth,
|
||
height: 300.w,
|
||
fit: BoxFit.cover,
|
||
)
|
||
: Image.asset(
|
||
'sc_images/person/sc_icon_my_head_bg_defalt.png',
|
||
width: ScreenUtil().screenWidth,
|
||
height: 300.w,
|
||
fit: BoxFit.cover,
|
||
),
|
||
),
|
||
Expanded(
|
||
child: Container(color: const Color(0xff083b2f)),
|
||
),
|
||
],
|
||
),
|
||
),
|
||
Scaffold(
|
||
extendBodyBehindAppBar: true,
|
||
resizeToAvoidBottomInset: false,
|
||
backgroundColor: Colors.transparent,
|
||
appBar: SocialChatStandardAppBar(
|
||
backButtonColor: Colors.white,
|
||
title: "",
|
||
leading: GestureDetector(
|
||
behavior: HitTestBehavior.opaque,
|
||
onTap: () {
|
||
Navigator.pop(context);
|
||
},
|
||
child: Container(
|
||
width: width(50),
|
||
height: height(30),
|
||
alignment: AlignmentDirectional.centerStart,
|
||
padding: EdgeInsetsDirectional.only(start: width(15)),
|
||
child: Icon(
|
||
window.locale.languageCode == "ar"
|
||
? Icons.keyboard_arrow_right
|
||
: Icons.keyboard_arrow_left,
|
||
size: 28.w,
|
||
color: Colors.white,
|
||
),
|
||
),
|
||
),
|
||
actions: [
|
||
// 在AppBar中显示头像和昵称
|
||
if (_opacity > 0.5 && !isProfileLoading) ...[
|
||
SizedBox(width: 45.w),
|
||
head(
|
||
url: ref.userProfile?.userAvatar ?? "",
|
||
width: 50.w,
|
||
height: 50.w,
|
||
),
|
||
SizedBox(width: 8.w),
|
||
socialchatNickNameText(
|
||
maxWidth: 135.w,
|
||
textColor: Colors.white,
|
||
ref.userProfile?.userNickname ?? "",
|
||
fontSize: 16.sp,
|
||
fontWeight: FontWeight.w600,
|
||
type: ref.userProfile?.getVIP()?.name ?? "",
|
||
needScroll:
|
||
(ref
|
||
.userProfile
|
||
?.userNickname
|
||
?.characters
|
||
.length ??
|
||
0) >
|
||
13,
|
||
),
|
||
SizedBox(width: 8.w),
|
||
],
|
||
Spacer(),
|
||
Builder(
|
||
builder: (ct) {
|
||
return IconButton(
|
||
icon:
|
||
widget.isMe == "true"
|
||
? Image.asset(
|
||
"sc_images/person/sc_icon_edit_user_info2.png",
|
||
width: 22.w,
|
||
color: Colors.white,
|
||
)
|
||
: Icon(
|
||
Icons.more_horiz,
|
||
size: 22.w,
|
||
color: Colors.white,
|
||
),
|
||
onPressed: () {
|
||
if (widget.isMe == "true") {
|
||
SCNavigatorUtils.push(
|
||
context,
|
||
SCMainRoute.edit,
|
||
replace: false,
|
||
);
|
||
return;
|
||
}
|
||
SmartDialog.showAttach(
|
||
tag: "showUserInfoOptMenu",
|
||
targetContext: ct,
|
||
alignment: Alignment.bottomCenter,
|
||
maskColor: Colors.transparent,
|
||
animationType: SmartAnimationType.fade,
|
||
scalePointBuilder:
|
||
(selfSize) => Offset(selfSize.width, 10),
|
||
builder: (_) {
|
||
return GestureDetector(
|
||
child: Transform.translate(
|
||
offset: Offset(0, -10),
|
||
child: Container(
|
||
width: 163.w,
|
||
margin: EdgeInsetsDirectional.only(
|
||
end: 8.w,
|
||
),
|
||
decoration: BoxDecoration(
|
||
color: Colors.white30,
|
||
borderRadius: BorderRadius.circular(
|
||
4,
|
||
),
|
||
),
|
||
padding: EdgeInsets.symmetric(
|
||
horizontal: 8.w,
|
||
vertical: 5.w,
|
||
),
|
||
child: Column(
|
||
mainAxisSize: MainAxisSize.min,
|
||
children: [
|
||
GestureDetector(
|
||
child: text(
|
||
SCAppLocalizations.of(
|
||
context,
|
||
)!.report,
|
||
textColor: Colors.white,
|
||
fontSize: 12.sp,
|
||
),
|
||
onTap: () {
|
||
SmartDialog.dismiss(
|
||
tag: "showUserInfoOptMenu",
|
||
);
|
||
SCNavigatorUtils.push(
|
||
context,
|
||
"${SCMainRoute.report}?type=user&tageId=${ref.userProfile?.id}",
|
||
replace: false,
|
||
);
|
||
},
|
||
),
|
||
((!(userIdentity?.admin ?? false) &&
|
||
!(userIdentity
|
||
?.superAdmin ??
|
||
false)) &&
|
||
((Provider.of<
|
||
SocialChatUserProfileManager
|
||
>(
|
||
context,
|
||
listen: false,
|
||
).userIdentity?.admin ??
|
||
false)))
|
||
? GestureDetector(
|
||
child: Container(
|
||
margin: EdgeInsets.only(
|
||
top: 5.w,
|
||
),
|
||
child: text(
|
||
SCAppLocalizations.of(
|
||
context,
|
||
)!.userEditing,
|
||
letterSpacing: 0.1,
|
||
textColor: Colors.white,
|
||
fontSize: 12.sp,
|
||
),
|
||
),
|
||
onTap: () {
|
||
SmartDialog.dismiss(
|
||
tag:
|
||
"showUserInfoOptMenu",
|
||
);
|
||
SCNavigatorUtils.push(
|
||
context,
|
||
"${SCMainRoute.editingUserRoomAdmin}?type=User&profile=${Uri.encodeComponent(jsonEncode(ref.userProfile?.toJson()))}",
|
||
);
|
||
},
|
||
)
|
||
: Container(),
|
||
((ref.userIdentity?.admin ??
|
||
false) ||
|
||
(ref
|
||
.userIdentity
|
||
?.superFreightAgent ??
|
||
false)) &&
|
||
!((userIdentity?.admin ??
|
||
false) ||
|
||
(userIdentity
|
||
?.superFreightAgent ??
|
||
false))
|
||
? SizedBox(height: 5.w)
|
||
: Container(),
|
||
((ref.userIdentity?.admin ??
|
||
false) ||
|
||
(ref
|
||
.userIdentity
|
||
?.superFreightAgent ??
|
||
false)) &&
|
||
!((userIdentity?.admin ??
|
||
false) ||
|
||
(userIdentity
|
||
?.superFreightAgent ??
|
||
false))
|
||
? GestureDetector(
|
||
child: text(
|
||
letterSpacing: 0.1,
|
||
SCAppLocalizations.of(
|
||
context,
|
||
)!.becomeAgent,
|
||
textColor: Colors.white,
|
||
fontSize: 12.sp,
|
||
),
|
||
onTap: () {
|
||
SmartDialog.dismiss(
|
||
tag:
|
||
"showUserInfoOptMenu",
|
||
);
|
||
SCAccountRepository()
|
||
.teamCreate(
|
||
ref.userProfile
|
||
?.getID() ??
|
||
"",
|
||
);
|
||
},
|
||
)
|
||
: Container(),
|
||
(ref.userProfile?.isCpRelation ??
|
||
false)
|
||
? GestureDetector(
|
||
behavior:
|
||
HitTestBehavior.opaque,
|
||
child: Container(
|
||
padding: EdgeInsets.only(
|
||
top: 3.w,
|
||
),
|
||
child: text(
|
||
letterSpacing: 0.1,
|
||
SCAppLocalizations.of(
|
||
context,
|
||
)!.partWays,
|
||
textColor: Colors.white,
|
||
fontSize: 12.sp,
|
||
),
|
||
),
|
||
onTap: () {
|
||
SmartDialog.dismiss(
|
||
tag:
|
||
"showUserInfoOptMenu",
|
||
);
|
||
_showPartWaysDialog(ref);
|
||
},
|
||
)
|
||
: Container(),
|
||
isBlacklistLoading
|
||
? Container()
|
||
: GestureDetector(
|
||
behavior:
|
||
HitTestBehavior.opaque,
|
||
child: Container(
|
||
padding: EdgeInsets.only(
|
||
top: 3.w,
|
||
),
|
||
child: text(
|
||
letterSpacing: 0.1,
|
||
isBlacklist
|
||
? SCAppLocalizations.of(
|
||
context,
|
||
)!.removeFromBlacklist
|
||
: SCAppLocalizations.of(
|
||
context,
|
||
)!.moveToBlacklist,
|
||
textColor: Colors.white,
|
||
fontSize: 12.sp,
|
||
),
|
||
),
|
||
onTap: () {
|
||
if ((ref
|
||
.userProfile
|
||
?.isCpRelation ??
|
||
false)) {
|
||
SmartDialog.show(
|
||
tag:
|
||
"showConfirmDialog",
|
||
alignment:
|
||
Alignment.center,
|
||
debounce: true,
|
||
animationType:
|
||
SmartAnimationType
|
||
.fade,
|
||
builder: (_) {
|
||
return MsgDialog(
|
||
title:
|
||
SCAppLocalizations.of(
|
||
context,
|
||
)!.tips,
|
||
msg:
|
||
SCAppLocalizations.of(
|
||
context,
|
||
)!.youAreCurrentlyCPRelationshipPleaseDissolve,
|
||
btnText:
|
||
SCAppLocalizations.of(
|
||
context,
|
||
)!.confirm,
|
||
onEnsure: () {},
|
||
);
|
||
},
|
||
);
|
||
return;
|
||
}
|
||
SCAccountHelper.optBlacklist(
|
||
widget.tageId,
|
||
isBlacklist,
|
||
context,
|
||
(isOptBlacklist) {
|
||
isBlacklist =
|
||
isOptBlacklist;
|
||
setState(() {});
|
||
},
|
||
);
|
||
},
|
||
),
|
||
],
|
||
),
|
||
),
|
||
),
|
||
onTap: () {
|
||
SmartDialog.dismiss(
|
||
tag: "showUserInfoOptMenu",
|
||
);
|
||
},
|
||
);
|
||
},
|
||
);
|
||
},
|
||
);
|
||
},
|
||
),
|
||
],
|
||
),
|
||
body:
|
||
isBlacklist
|
||
? Container()
|
||
: (isProfileLoading || isBlacklistLoading
|
||
? _buildProfileSkeleton()
|
||
: ExtendedNestedScrollView(
|
||
controller: _scrollController,
|
||
onlyOneScrollInBody: true,
|
||
headerSliverBuilder: (
|
||
BuildContext context,
|
||
bool innerBoxIsScrolled,
|
||
) {
|
||
return [
|
||
SliverToBoxAdapter(
|
||
child: _buildProfileHeader(
|
||
ref,
|
||
backgroundPhotos,
|
||
),
|
||
),
|
||
];
|
||
},
|
||
body: Container(
|
||
padding: EdgeInsets.symmetric(
|
||
horizontal: 3.w,
|
||
),
|
||
decoration: BoxDecoration(
|
||
gradient:
|
||
ref.userProfile?.userSex == 0
|
||
? LinearGradient(
|
||
colors: [
|
||
Color(0xff083b2f),
|
||
Color(0xff083b2f),
|
||
],
|
||
begin:
|
||
AlignmentDirectional.topStart,
|
||
end:
|
||
AlignmentDirectional
|
||
.bottomEnd,
|
||
)
|
||
: LinearGradient(
|
||
colors: [
|
||
Color(0xff083b2f),
|
||
Color(0xff083b2f),
|
||
],
|
||
begin:
|
||
AlignmentDirectional.topStart,
|
||
end:
|
||
AlignmentDirectional
|
||
.bottomEnd,
|
||
),
|
||
),
|
||
child: Column(
|
||
children: [
|
||
Row(
|
||
children: [
|
||
SizedBox(width: 6.w),
|
||
SizedBox(
|
||
height: 35.w,
|
||
child: TabBar(
|
||
tabAlignment: TabAlignment.start,
|
||
indicator:
|
||
SCFixedWidthTabIndicator(
|
||
width: 20.w,
|
||
height: 4.w,
|
||
gradient:
|
||
ref
|
||
.userProfile
|
||
?.userSex ==
|
||
0
|
||
? LinearGradient(
|
||
colors: [
|
||
Color(
|
||
0xffFFD800,
|
||
),
|
||
Color(
|
||
0xffFFD800,
|
||
),
|
||
],
|
||
)
|
||
: LinearGradient(
|
||
colors: [
|
||
Color(
|
||
0xffFFD800,
|
||
),
|
||
Color(
|
||
0xffFFD800,
|
||
),
|
||
],
|
||
),
|
||
),
|
||
labelPadding:
|
||
EdgeInsets.symmetric(
|
||
horizontal: 12.w,
|
||
),
|
||
labelColor: Colors.white,
|
||
isScrollable: true,
|
||
unselectedLabelColor: Color(
|
||
0xffB1B1B1,
|
||
),
|
||
labelStyle: TextStyle(
|
||
fontSize: 15.sp,
|
||
fontWeight: FontWeight.bold,
|
||
),
|
||
unselectedLabelStyle: TextStyle(
|
||
fontSize: 13.sp,
|
||
),
|
||
indicatorColor:
|
||
Colors.transparent,
|
||
dividerColor: Colors.transparent,
|
||
controller: _tabController,
|
||
tabs: _tabs,
|
||
),
|
||
),
|
||
SizedBox(width: 6.w),
|
||
],
|
||
),
|
||
Expanded(
|
||
child: TabBarView(
|
||
controller: _tabController,
|
||
children: _pages,
|
||
),
|
||
),
|
||
SizedBox(height: 25.w),
|
||
],
|
||
),
|
||
),
|
||
)),
|
||
),
|
||
// 底部按钮区域
|
||
isBlacklistLoading || isBlacklist || isProfileLoading
|
||
? Container()
|
||
: Positioned(
|
||
bottom: 0,
|
||
left: 0,
|
||
right: 0,
|
||
child:
|
||
widget.isMe == "true"
|
||
? Container()
|
||
: (isLoading
|
||
? Container()
|
||
: Container(
|
||
alignment: AlignmentDirectional.center,
|
||
width: ScreenUtil().screenWidth,
|
||
height: 75.w,
|
||
decoration: BoxDecoration(
|
||
color: Color(0xff18F2B1).withOpacity(0.1),
|
||
borderRadius: BorderRadius.only(
|
||
topLeft: Radius.circular(10.w),
|
||
topRight: Radius.circular(10.w),
|
||
),
|
||
),
|
||
child: Column(
|
||
children: [
|
||
SizedBox(height: 10.w),
|
||
Row(
|
||
mainAxisAlignment:
|
||
MainAxisAlignment.center,
|
||
children: [
|
||
SCDebounceWidget(
|
||
debounceTime: Duration(
|
||
milliseconds: 800,
|
||
),
|
||
child: SizedBox(
|
||
width: 110.w,
|
||
child: Column(
|
||
mainAxisAlignment:
|
||
MainAxisAlignment.center,
|
||
children: [
|
||
Image.asset(
|
||
"sc_images/person/sc_icon_person_in_room.png",
|
||
width: 23.w,
|
||
),
|
||
SizedBox(height: 5.w),
|
||
Container(
|
||
margin: EdgeInsets.only(
|
||
bottom: 0.w,
|
||
),
|
||
child: text(
|
||
SCAppLocalizations.of(
|
||
context,
|
||
)!.inRoom,
|
||
textColor:
|
||
SocialChatTheme
|
||
.primaryLight,
|
||
fontWeight:
|
||
FontWeight.w600,
|
||
fontSize: 14.sp,
|
||
),
|
||
),
|
||
],
|
||
),
|
||
),
|
||
onTap: () {
|
||
if ((ref
|
||
.userProfile
|
||
?.inRoomId ??
|
||
"")
|
||
.isNotEmpty) {
|
||
SCRoomUtils.goRoom(
|
||
ref.userProfile?.inRoomId ??
|
||
"",
|
||
context,
|
||
);
|
||
}
|
||
},
|
||
),
|
||
SizedBox(width: 10.w),
|
||
SCDebounceWidget(
|
||
debounceTime: Duration(
|
||
milliseconds: 800,
|
||
),
|
||
child: Container(
|
||
width: 110.w,
|
||
child: Column(
|
||
mainAxisAlignment:
|
||
MainAxisAlignment.center,
|
||
children: [
|
||
Image.asset(
|
||
"sc_images/person/sc_icon_person_tochat.png",
|
||
width: 23.w,
|
||
),
|
||
SizedBox(height: 5.w),
|
||
Container(
|
||
margin: EdgeInsets.only(
|
||
bottom: 0.w,
|
||
),
|
||
child: text(
|
||
SCAppLocalizations.of(
|
||
context,
|
||
)!.message,
|
||
textColor:
|
||
SocialChatTheme
|
||
.primaryLight,
|
||
fontWeight:
|
||
FontWeight.w600,
|
||
fontSize: 14.sp,
|
||
),
|
||
),
|
||
],
|
||
),
|
||
),
|
||
onTap: () async {
|
||
var conversation =
|
||
V2TimConversation(
|
||
type:
|
||
ConversationType
|
||
.V2TIM_C2C,
|
||
userID: widget.tageId,
|
||
conversationID: '',
|
||
);
|
||
var bool = await Provider.of<
|
||
RtmProvider
|
||
>(
|
||
context,
|
||
listen: false,
|
||
).startConversation(
|
||
conversation,
|
||
);
|
||
if (!bool) return;
|
||
var json = jsonEncode(
|
||
conversation.toJson(),
|
||
);
|
||
SCNavigatorUtils.push(
|
||
context,
|
||
"${SCChatRouter.chat}?conversation=${Uri.encodeComponent(json)}",
|
||
);
|
||
},
|
||
),
|
||
SizedBox(width: 10.w),
|
||
SCDebounceWidget(
|
||
debounceTime: Duration(
|
||
milliseconds: 800,
|
||
),
|
||
child: Container(
|
||
width: 110.w,
|
||
child: Column(
|
||
mainAxisAlignment:
|
||
MainAxisAlignment.center,
|
||
children: [
|
||
Image.asset(
|
||
"sc_images/person/sc_icon_person_follow.png",
|
||
width: 23.w,
|
||
),
|
||
SizedBox(height: 5.w),
|
||
Container(
|
||
margin: EdgeInsets.only(
|
||
bottom: 0.w,
|
||
),
|
||
child: text(
|
||
isFollow
|
||
? SCAppLocalizations.of(
|
||
context,
|
||
)!.following
|
||
: SCAppLocalizations.of(
|
||
context,
|
||
)!.follow,
|
||
textColor:
|
||
SocialChatTheme
|
||
.primaryLight,
|
||
fontWeight:
|
||
FontWeight.w600,
|
||
fontSize: 14.sp,
|
||
),
|
||
),
|
||
],
|
||
),
|
||
),
|
||
onTap: () {
|
||
SCAccountRepository()
|
||
.followUser(widget.tageId)
|
||
.then((v) {
|
||
isFollow = !isFollow;
|
||
setState(() {});
|
||
});
|
||
},
|
||
),
|
||
],
|
||
),
|
||
],
|
||
),
|
||
)),
|
||
),
|
||
],
|
||
),
|
||
),
|
||
);
|
||
},
|
||
);
|
||
}
|
||
|
||
void _showPartWaysDialog(SocialChatUserProfileManager ref) {
|
||
SmartDialog.show(
|
||
tag: "showPartWaysDialog",
|
||
alignment: Alignment.center,
|
||
debounce: true,
|
||
animationType: SmartAnimationType.fade,
|
||
builder: (_) {
|
||
return Container(
|
||
height: 530.w,
|
||
width: ScreenUtil().screenWidth * 0.9,
|
||
decoration: BoxDecoration(
|
||
image: DecorationImage(
|
||
image: AssetImage(
|
||
"sc_images/person/sc_icon_send_cp_requst_dialog_bg.png",
|
||
),
|
||
fit: BoxFit.fill,
|
||
),
|
||
),
|
||
child: Column(
|
||
children: [
|
||
SizedBox(height: 58.w),
|
||
Container(
|
||
child: text(
|
||
SCAppLocalizations.of(context)!.partWays,
|
||
fontSize: 22.sp,
|
||
textColor: Color(0xffDB5872),
|
||
fontWeight: FontWeight.bold,
|
||
),
|
||
),
|
||
Transform.translate(
|
||
offset: Offset(0, -25),
|
||
child: Stack(
|
||
alignment: AlignmentDirectional.center,
|
||
children: [
|
||
PositionedDirectional(
|
||
top: 28.w,
|
||
child: Row(
|
||
mainAxisSize: MainAxisSize.min,
|
||
children: [
|
||
head(
|
||
url:
|
||
AccountStorage()
|
||
.getCurrentUser()
|
||
?.userProfile
|
||
?.userAvatar ??
|
||
"",
|
||
width: 90.w,
|
||
),
|
||
SizedBox(width: 15.w),
|
||
head(
|
||
url: ref.userProfile?.userAvatar ?? "",
|
||
width: 90.w,
|
||
),
|
||
],
|
||
),
|
||
),
|
||
Image.asset(
|
||
"sc_images/person/sc_icon_send_cp_requst_dialog_head2.png",
|
||
height: 120.w,
|
||
fit: BoxFit.fill,
|
||
),
|
||
],
|
||
),
|
||
),
|
||
Transform.translate(
|
||
offset: Offset(0, -23),
|
||
child: Container(
|
||
height: 25.w,
|
||
width: ScreenUtil().screenWidth * 0.6,
|
||
decoration: BoxDecoration(
|
||
image: DecorationImage(
|
||
image: AssetImage(
|
||
"sc_images/person/sc_icon_send_cp_requst_username_bg.png",
|
||
),
|
||
fit: BoxFit.fill,
|
||
),
|
||
),
|
||
child: Row(
|
||
children: [
|
||
socialchatNickNameText(
|
||
maxWidth: 100.w,
|
||
AccountStorage()
|
||
.getCurrentUser()
|
||
?.userProfile
|
||
?.userNickname ??
|
||
"",
|
||
fontSize: 10.sp,
|
||
fontWeight: FontWeight.w600,
|
||
type:
|
||
AccountStorage()
|
||
.getCurrentUser()
|
||
?.userProfile
|
||
?.getVIP()
|
||
?.name ??
|
||
"",
|
||
needScroll:
|
||
(AccountStorage()
|
||
.getCurrentUser()
|
||
?.userProfile
|
||
?.userNickname
|
||
?.characters
|
||
.length ??
|
||
0) >
|
||
8,
|
||
),
|
||
SizedBox(width: 20.w),
|
||
socialchatNickNameText(
|
||
maxWidth: 100.w,
|
||
ref.userProfile?.userNickname ?? "",
|
||
fontSize: 10.sp,
|
||
fontWeight: FontWeight.w600,
|
||
type: ref.userProfile?.getVIP()?.name ?? "",
|
||
needScroll:
|
||
(ref.userProfile?.userNickname?.characters.length ??
|
||
0) >
|
||
8,
|
||
),
|
||
],
|
||
),
|
||
),
|
||
),
|
||
|
||
Container(
|
||
padding: EdgeInsets.only(bottom: 12.w),
|
||
margin: EdgeInsets.symmetric(horizontal: 18.w),
|
||
decoration: BoxDecoration(
|
||
image: DecorationImage(
|
||
image: AssetImage(
|
||
"sc_images/person/sc_icon_send_cp_requst_dialog_content.png",
|
||
),
|
||
fit: BoxFit.fill,
|
||
),
|
||
),
|
||
child: Column(
|
||
children: [
|
||
Container(
|
||
margin: EdgeInsets.symmetric(
|
||
horizontal: 35.w,
|
||
).copyWith(top: 45.w),
|
||
child: text(
|
||
SCAppLocalizations.of(
|
||
context,
|
||
)!.areYouSureYouWantToPartWaysWithYourCP,
|
||
fontWeight: FontWeight.w500,
|
||
textColor: Color(0xffFF79A1),
|
||
maxLines: 3,
|
||
fontSize: 14.sp,
|
||
),
|
||
),
|
||
Container(
|
||
margin: EdgeInsets.symmetric(horizontal: 20.w),
|
||
alignment: AlignmentDirectional.center,
|
||
child: text(
|
||
SCAppLocalizations.of(context)!.partWaysTips,
|
||
fontSize: 10.w,
|
||
textColor: Color(0xffFE91B0),
|
||
maxLines: 6,
|
||
fontWeight: FontWeight.w500,
|
||
),
|
||
),
|
||
],
|
||
),
|
||
),
|
||
SizedBox(height: 10.w),
|
||
Row(
|
||
mainAxisSize: MainAxisSize.min,
|
||
children: [
|
||
GestureDetector(
|
||
child: Container(
|
||
padding: EdgeInsets.only(top: 7.w),
|
||
alignment: AlignmentDirectional.center,
|
||
width: 130.w,
|
||
height: 48.w,
|
||
decoration: BoxDecoration(
|
||
image: DecorationImage(
|
||
image: AssetImage(
|
||
"sc_images/person/sc_icon_send_cp_requst_ok_bg.png",
|
||
),
|
||
fit: BoxFit.fill,
|
||
),
|
||
),
|
||
child: text(
|
||
SCAppLocalizations.of(context)!.cancel,
|
||
fontSize: 18.sp,
|
||
fontWeight: FontWeight.bold,
|
||
textColor: Color(0xffDB5872),
|
||
),
|
||
),
|
||
onTap: () {
|
||
SmartDialog.dismiss(tag: "showPartWaysDialog");
|
||
},
|
||
),
|
||
SizedBox(width: 25.w),
|
||
GestureDetector(
|
||
child: Container(
|
||
padding: EdgeInsets.only(top: 7.w),
|
||
alignment: AlignmentDirectional.center,
|
||
width: 130.w,
|
||
height: 48.w,
|
||
decoration: BoxDecoration(
|
||
image: DecorationImage(
|
||
image: AssetImage(
|
||
"sc_images/person/sc_icon_send_cp_requst_cancel_bg.png",
|
||
),
|
||
fit: BoxFit.fill,
|
||
),
|
||
),
|
||
child: text(
|
||
SCAppLocalizations.of(context)!.confirm,
|
||
fontSize: 18.sp,
|
||
fontWeight: FontWeight.bold,
|
||
textColor: Colors.white,
|
||
),
|
||
),
|
||
onTap: () {
|
||
SCLoadingManager.show();
|
||
SCAccountRepository()
|
||
.cpRelationshipDismissApply(ref.userProfile?.id ?? "")
|
||
.then((result) {
|
||
SmartDialog.dismiss(tag: "showPartWaysDialog");
|
||
SCTts.show(
|
||
SCAppLocalizations.of(
|
||
context,
|
||
)!.operationSuccessful,
|
||
);
|
||
SCLoadingManager.hide();
|
||
SCNavigatorUtils.popUntil(
|
||
context,
|
||
ModalRoute.withName(SCRoutes.home),
|
||
);
|
||
})
|
||
.catchError((e) {
|
||
SCLoadingManager.hide();
|
||
});
|
||
},
|
||
),
|
||
],
|
||
),
|
||
],
|
||
),
|
||
);
|
||
},
|
||
);
|
||
}
|
||
}
|