1136 lines
39 KiB
Dart
1136 lines
39 KiB
Dart
import 'package:cached_network_image/cached_network_image.dart';
|
||
import 'package:circle_app/app/userinfo/widgets/home_call_out.dart';
|
||
import 'package:circle_app/main.dart';
|
||
import 'package:flutter/material.dart';
|
||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||
import 'package:get/get.dart';
|
||
|
||
import '../../components/my_app_bar.dart';
|
||
import '../../router/app_routers.dart';
|
||
import '../../util/util.dart';
|
||
import '../select_circle/logic.dart';
|
||
import 'logic.dart';
|
||
|
||
class UserinfoPage extends StatefulWidget {
|
||
const UserinfoPage({super.key});
|
||
|
||
@override
|
||
MyTabbedScreenState createState() => MyTabbedScreenState();
|
||
}
|
||
|
||
class MyTabbedScreenState extends State<UserinfoPage>
|
||
with SingleTickerProviderStateMixin {
|
||
late TabController _tabController;
|
||
late PageController _pageController;
|
||
|
||
ScrollController scrollController = ScrollController();
|
||
bool isShowBlackTitle = false;
|
||
|
||
@override
|
||
void initState() {
|
||
super.initState();
|
||
_pageController = PageController();
|
||
_tabController = TabController(length: 2, vsync: this);
|
||
_tabController.animation!.addListener(_handleTabChange);
|
||
// _tabController.addListener(_handleTabChange);
|
||
// _tabController
|
||
}
|
||
|
||
void _handleTabChange() {
|
||
// 在这里可以执行滑动监听后的逻辑操作
|
||
// 比如根据当前选中的标签执行其他操作
|
||
// int currentIndex = .toString());
|
||
logic.isShowAlbum = _tabController.index == 0;
|
||
logic.update();
|
||
}
|
||
|
||
@override
|
||
void dispose() {
|
||
_tabController.dispose();
|
||
super.dispose();
|
||
}
|
||
|
||
final logic = Get.find<UserinfoLogic>();
|
||
final state = Get.find<UserinfoLogic>().state;
|
||
|
||
@override
|
||
Widget build(BuildContext context) {
|
||
return GetBuilder<UserinfoLogic>(
|
||
builder: (logic) {
|
||
return _buildPage(logic);
|
||
},
|
||
);
|
||
}
|
||
|
||
Widget _buildPage(UserinfoLogic logic) {
|
||
return Container(
|
||
decoration: BoxDecoration(
|
||
image: DecorationImage(
|
||
image: AssetImage(getBaseImage("home_back")),
|
||
fit: BoxFit.cover,
|
||
),
|
||
),
|
||
child: Stack(
|
||
children: [
|
||
Scaffold(
|
||
backgroundColor: Colors.transparent,
|
||
appBar: MyAppBar(
|
||
centerTitle: logic.userInfoBean != null
|
||
? "${logic.userInfoBean!.nickname}的主页"
|
||
: "个人主页",
|
||
),
|
||
body: Stack(
|
||
children: [
|
||
Container(
|
||
child: buildContent(logic),
|
||
),
|
||
Positioned(
|
||
bottom: 27.sp,
|
||
width: Get.width,
|
||
child: _meInfoButton(logic),
|
||
),
|
||
!logic.isShowAlbum &&logic.isMe ? Positioned(
|
||
bottom: 36.sp,
|
||
right: 10.sp,
|
||
child: GestureDetector(
|
||
onTap: () async {
|
||
|
||
List<MyConfigData> numbers = [];
|
||
|
||
var data = await Get.toNamed(
|
||
AppRoutes.Call_out,
|
||
arguments: {'numbers': numbers});
|
||
},
|
||
child: Image.asset(
|
||
getCircleImage('send_msg'),
|
||
width: 60.sp,
|
||
))):Container()
|
||
],
|
||
),
|
||
),
|
||
|
||
],
|
||
),
|
||
);
|
||
}
|
||
|
||
Widget _meInfoButton(UserinfoLogic controller) {
|
||
if (controller.isMe) {
|
||
return GestureDetector(
|
||
onTap: () async {
|
||
await Get.toNamed(
|
||
AppRoutes.Complete_materialPage,
|
||
arguments: "user",
|
||
);
|
||
logic.onInit();
|
||
},
|
||
child: Center(
|
||
child: Container(
|
||
decoration: BoxDecoration(
|
||
borderRadius: BorderRadius.circular(17),
|
||
gradient: const LinearGradient(
|
||
colors: [
|
||
Color(0xFF06F9FA),
|
||
Color(0xFFDC5BFD),
|
||
],
|
||
begin: Alignment.centerLeft,
|
||
end: Alignment.centerRight,
|
||
),
|
||
),
|
||
padding: EdgeInsets.symmetric(
|
||
vertical: 10.sp,
|
||
horizontal: 55.sp,
|
||
),
|
||
child: const Text(
|
||
"完善个人形象",
|
||
style: TextStyle(
|
||
color: Colors.white,
|
||
fontSize: 12,
|
||
),
|
||
),
|
||
),
|
||
));
|
||
} else {
|
||
final likeButton = GestureDetector(
|
||
onTap: () {
|
||
_showBottomSheet(context, controller);
|
||
},
|
||
child: Image(
|
||
image: AssetImage(getMineImage("icon_like")),
|
||
width: 40.sp,
|
||
height: 40.sp,
|
||
),
|
||
);
|
||
|
||
final likeText = Text(
|
||
controller.isLike ? "取消喜欢" : "喜欢",
|
||
style: TextStyle(
|
||
color: Colors.white,
|
||
fontSize: 12.sp,
|
||
),
|
||
);
|
||
|
||
final chatText = Text(
|
||
"私聊",
|
||
style: TextStyle(
|
||
color: Colors.white,
|
||
fontSize: 12.sp,
|
||
),
|
||
);
|
||
|
||
final gradientDecoration = BoxDecoration(
|
||
borderRadius: BorderRadius.circular(17.sp),
|
||
gradient: const LinearGradient(
|
||
colors: [
|
||
Color(0xFF06F9FA),
|
||
Color(0xFFDC5BFD),
|
||
],
|
||
begin: Alignment.centerLeft,
|
||
end: Alignment.centerRight,
|
||
),
|
||
);
|
||
|
||
final chatButton = GestureDetector(
|
||
onTap: () {
|
||
if (logic.isBlack || logic.isDestroy || logic.isBlackBeen) {
|
||
showOKToast("私聊失败,存在拉黑关系或者该账户已注销");
|
||
return;
|
||
}
|
||
|
||
if (logic.userInfoBean != null) {
|
||
String msg = Get.previousRoute;
|
||
if (msg == AppRoutes.Chat) {
|
||
Get.back();
|
||
} else {
|
||
pushChatPage(logic.userInfoBean!.id.toString(), logic.imId,
|
||
logic.userInfoBean!.nickname);
|
||
}
|
||
}
|
||
},
|
||
child: Container(
|
||
width: 130.sp,
|
||
height: 34.sp,
|
||
decoration: BoxDecoration(
|
||
borderRadius: BorderRadius.circular(17.sp),
|
||
gradient: const LinearGradient(
|
||
colors: [
|
||
Color(0x26FFFFFF),
|
||
Color(0x26FFFFFF),
|
||
],
|
||
begin: Alignment.centerLeft,
|
||
end: Alignment.centerRight,
|
||
),
|
||
),
|
||
child: Center(child: chatText),
|
||
),
|
||
);
|
||
|
||
return Container(
|
||
margin: EdgeInsets.only(left: 18.sp, right: 18.sp),
|
||
child: Row(
|
||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||
children: [
|
||
likeButton,
|
||
GestureDetector(
|
||
onTap: () {
|
||
logic.setLike();
|
||
},
|
||
child: Container(
|
||
width: 130.sp,
|
||
height: 34.sp,
|
||
decoration: gradientDecoration,
|
||
child: Center(child: likeText),
|
||
),
|
||
),
|
||
chatButton,
|
||
],
|
||
),
|
||
);
|
||
}
|
||
}
|
||
|
||
Widget buildContent(UserinfoLogic controller) {
|
||
final userInfoBean = controller.userInfoBean;
|
||
final interests = userInfoBean?.interests ?? [];
|
||
|
||
return Container(
|
||
padding: EdgeInsets.symmetric(vertical: 14.sp),
|
||
child: Column(
|
||
children: [
|
||
Container(
|
||
padding: EdgeInsets.symmetric(horizontal: 19.sp),
|
||
child: Row(
|
||
crossAxisAlignment: CrossAxisAlignment.start,
|
||
children: [
|
||
_imagelistView(controller),
|
||
Expanded(
|
||
child: buildUserContainer(controller),
|
||
),
|
||
],
|
||
),
|
||
),
|
||
Container(
|
||
padding: EdgeInsets.symmetric(
|
||
horizontal: 19.sp,
|
||
),
|
||
margin: EdgeInsets.only(top: 19.sp),
|
||
child: Row(
|
||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||
children: [
|
||
Row(
|
||
children: [
|
||
Text(
|
||
userInfoBean?.nickname ?? "",
|
||
style: TextStyle(
|
||
color: Color.fromRGBO(247, 250, 250, 1.0),
|
||
fontSize: 14.sp,
|
||
),
|
||
),
|
||
SizedBox(width: 8.sp),
|
||
logic.isBlack || logic.isDestroy || logic.isBlackBeen
|
||
? Container()
|
||
: _buildInfoRow(controller),
|
||
],
|
||
),
|
||
Row(
|
||
children: [
|
||
Container(
|
||
margin: EdgeInsets.only(right: 5.sp),
|
||
width: 5.sp,
|
||
height: 5.sp,
|
||
decoration: BoxDecoration(
|
||
shape: BoxShape.circle,
|
||
color: logic.isOnline
|
||
? const Color(0xFF00FFF4)
|
||
: const Color(0xFF787575),
|
||
),
|
||
),
|
||
logic.isBlack || logic.isDestroy || logic.isBlackBeen
|
||
? Container()
|
||
: Text(
|
||
controller.onLineCity,
|
||
style: TextStyle(
|
||
fontSize: 12.sp,
|
||
color: logic.isOnline
|
||
? const Color(0xFF00FFF4)
|
||
: const Color(0xFF787575),
|
||
),
|
||
),
|
||
],
|
||
),
|
||
],
|
||
),
|
||
),
|
||
SizedBox(
|
||
height: 59.sp,
|
||
child: logic.isBlack || logic.isDestroy || logic.isBlackBeen
|
||
? Container()
|
||
: _buildInterestsListView(interests),
|
||
),
|
||
titleTab(controller),
|
||
Expanded(
|
||
child: PageView(
|
||
controller: _pageController,
|
||
onPageChanged: (index) {
|
||
_tabController.animateTo(index);
|
||
},
|
||
children: [
|
||
logic.isBlack || logic.isDestroy || logic.isBlackBeen
|
||
? Container()
|
||
: _imageAdapter(controller),
|
||
logic.isBlack || logic.isDestroy || logic.isBlackBeen
|
||
? Container()
|
||
: HomeCallOutView(controller.userId),
|
||
],
|
||
),
|
||
),
|
||
],
|
||
),
|
||
);
|
||
}
|
||
|
||
Widget _buildInterestsListView(List<Interest> interests) {
|
||
return ListView.builder(
|
||
itemCount: interests.length,
|
||
scrollDirection: Axis.horizontal,
|
||
padding: EdgeInsets.symmetric(vertical: 18.sp, horizontal: 19.sp),
|
||
itemBuilder: (context, index) {
|
||
final interest = interests[index];
|
||
return GestureDetector(
|
||
onTap: () {
|
||
Get.toNamed(AppRoutes.Signal_circle_list,
|
||
arguments: interests[index].id);
|
||
},
|
||
child: Container(
|
||
margin: EdgeInsets.only(right: 11.sp),
|
||
decoration: BoxDecoration(
|
||
borderRadius: BorderRadius.circular(17.0),
|
||
gradient: const LinearGradient(
|
||
colors: [
|
||
Color(0xFF06F9FA),
|
||
Color(0xFFDC5BFD),
|
||
],
|
||
),
|
||
color: const Color(0xFF392D53),
|
||
),
|
||
child: Container(
|
||
margin: EdgeInsets.all(0.2.sp),
|
||
decoration: BoxDecoration(
|
||
borderRadius: BorderRadius.circular(17.0),
|
||
color: const Color(0xFF392D53),
|
||
),
|
||
child: Padding(
|
||
padding: EdgeInsets.only(
|
||
top: 2.sp,
|
||
bottom: 2.sp,
|
||
left: 15.sp,
|
||
right: 15.sp,
|
||
),
|
||
child: Center(
|
||
child: Text(
|
||
interest.title,
|
||
style: const TextStyle(
|
||
fontSize: 11.0,
|
||
color: Colors.white,
|
||
),
|
||
),
|
||
),
|
||
),
|
||
),
|
||
),
|
||
);
|
||
},
|
||
);
|
||
}
|
||
|
||
Widget titleTab(UserinfoLogic controller) {
|
||
return Container(
|
||
alignment: Alignment.centerLeft,
|
||
padding: EdgeInsets.symmetric(horizontal: 10.sp),
|
||
height: 27.sp,
|
||
child: Row(
|
||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||
children: [
|
||
TabBar(
|
||
isScrollable: true,
|
||
controller: _tabController,
|
||
indicator: UnderlineTabIndicator(
|
||
borderSide: BorderSide(
|
||
color: const Color(0xFF00FFF4),
|
||
width: 2.sp,
|
||
),
|
||
insets: EdgeInsets.symmetric(horizontal: 6.0.sp),
|
||
borderRadius: BorderRadius.circular(18.0),
|
||
),
|
||
indicatorColor: const Color(0xFF00FFF4),
|
||
indicatorWeight: 2.sp,
|
||
labelColor: const Color(0xFF00FFF4),
|
||
unselectedLabelColor: const Color(0xB3FFFFFF),
|
||
indicatorSize: TabBarIndicatorSize.label,
|
||
tabs: const [
|
||
Tab(
|
||
text: "形象照",
|
||
),
|
||
Tab(text: "喊话"),
|
||
],
|
||
onTap: (index) {
|
||
_pageController.animateToPage(
|
||
index, // 目标页面索引
|
||
duration: const Duration(milliseconds: 300), // 动画时长
|
||
curve: Curves.ease, // 动画曲线
|
||
);
|
||
},
|
||
),
|
||
logic.isBlack || logic.isDestroy || logic.isBlackBeen
|
||
? Container()
|
||
: GestureDetector(
|
||
onTap: () {
|
||
if (controller.isMe) {
|
||
controller.isEdit = !controller.isEdit;
|
||
controller.update();
|
||
} else {
|
||
controller.urgeChange();
|
||
}
|
||
},
|
||
child: Visibility(
|
||
visible: logic.isShowAlbum,
|
||
child: Container(
|
||
decoration: BoxDecoration(
|
||
borderRadius: BorderRadius.circular(17),
|
||
gradient: const LinearGradient(
|
||
colors: [
|
||
Color(0xFF06F9FA),
|
||
Color(0xFFDC5BFD),
|
||
],
|
||
begin: Alignment.centerLeft,
|
||
end: Alignment.centerRight,
|
||
),
|
||
),
|
||
padding: EdgeInsets.symmetric(
|
||
vertical: 2.sp,
|
||
horizontal: 12.sp,
|
||
),
|
||
child: Text(
|
||
controller.isMe
|
||
? controller.isEdit
|
||
? "完成"
|
||
: "管理"
|
||
: controller.isUrgeStatus
|
||
? "已催更"
|
||
: "催更",
|
||
style: const TextStyle(
|
||
color: Colors.white,
|
||
fontSize: 12,
|
||
),
|
||
),
|
||
),
|
||
),
|
||
),
|
||
],
|
||
),
|
||
);
|
||
}
|
||
|
||
Widget _imageAdapter(UserinfoLogic controller) {
|
||
//print(controller.state.imaglist);
|
||
|
||
// :
|
||
return Container(
|
||
padding: EdgeInsets.symmetric(horizontal: 19.sp),
|
||
child: Stack(
|
||
children: [
|
||
Column(
|
||
children: [
|
||
if (controller.isMe)
|
||
Container(
|
||
margin: EdgeInsets.only(top: 18.sp, bottom: 14.sp),
|
||
child: Text(
|
||
controller.isLikeFoMsg,
|
||
style: const TextStyle(color: Colors.white30),
|
||
),
|
||
),
|
||
controller.state.imaglist.isEmpty && !controller.isEdit
|
||
? Center(
|
||
child: Column(
|
||
mainAxisAlignment: MainAxisAlignment.start,
|
||
children: [
|
||
const SizedBox(
|
||
height: 100,
|
||
),
|
||
Image.asset(
|
||
getBaseImage('no_result'),
|
||
width: 200,
|
||
// height: 11,
|
||
),
|
||
const SizedBox(
|
||
height: 26,
|
||
),
|
||
Text(
|
||
controller.isMe
|
||
? "点击管理即可上传形象照哦~"
|
||
: "TA还没有发布过形象照,快去催TA更新吧~",
|
||
style: const TextStyle(color: Colors.white30),
|
||
),
|
||
]),
|
||
)
|
||
: Expanded(
|
||
child: GridView.builder(
|
||
padding: const EdgeInsets.only(bottom: 58.0),
|
||
shrinkWrap: true,
|
||
gridDelegate:
|
||
const SliverGridDelegateWithFixedCrossAxisCount(
|
||
crossAxisCount: 3,
|
||
),
|
||
itemCount: controller.isMe
|
||
? controller.isEdit
|
||
? controller.state.imaglist.length < 15
|
||
? controller.state.imaglist.length + 1
|
||
: controller.state.imaglist.length
|
||
: controller.state.imaglist.length
|
||
: controller.state.imaglist.length,
|
||
itemBuilder: (BuildContext context, int index) {
|
||
if (controller.isMe &&
|
||
controller.isEdit &&
|
||
controller.state.imaglist.length < 15) {
|
||
if (index == 0) {
|
||
return GestureDetector(
|
||
onTap: () {
|
||
controller.getImageFile();
|
||
},
|
||
child: Container(
|
||
margin: EdgeInsets.all(5.sp),
|
||
child: Image(
|
||
image: AssetImage(
|
||
getMineImage("icon_img_add")),
|
||
),
|
||
),
|
||
);
|
||
} else {
|
||
return Container(
|
||
margin: EdgeInsets.all(5.sp),
|
||
child: Center(
|
||
child: _buildImageItem(
|
||
controller.state.imaglist[index - 1].url,
|
||
controller,
|
||
index - 1,
|
||
),
|
||
),
|
||
);
|
||
}
|
||
} else {
|
||
return Container(
|
||
margin: EdgeInsets.all(5.sp),
|
||
child: Center(
|
||
child: _buildImageItem(
|
||
controller.state.imaglist[index].urlThumb,
|
||
controller,
|
||
index,
|
||
),
|
||
),
|
||
);
|
||
}
|
||
},
|
||
),
|
||
),
|
||
],
|
||
),
|
||
],
|
||
),
|
||
);
|
||
}
|
||
|
||
Widget _buildInfoRow(UserinfoLogic controller) {
|
||
return Row(
|
||
children: [
|
||
Container(
|
||
decoration: BoxDecoration(
|
||
borderRadius: BorderRadius.circular(17),
|
||
gradient: const LinearGradient(
|
||
colors: [
|
||
Color.fromRGBO(141, 255, 248, 1.0),
|
||
Color.fromRGBO(181, 211, 255, 1.0),
|
||
],
|
||
begin: Alignment.centerLeft,
|
||
end: Alignment.centerRight,
|
||
),
|
||
),
|
||
padding: EdgeInsets.only(
|
||
top: 2.sp,
|
||
bottom: 2.sp,
|
||
left: 10.sp,
|
||
right: 10.sp,
|
||
),
|
||
child: Text(
|
||
controller.ageMsg,
|
||
style: const TextStyle(
|
||
color: Colors.black,
|
||
fontSize: 10,
|
||
),
|
||
),
|
||
),
|
||
const SizedBox(width: 6),
|
||
if (controller.isVip > 0)
|
||
Image(
|
||
image: AssetImage(
|
||
getBaseImage(controller.isVip == 1 ? "vip" : 'year_vip')),
|
||
width: 44.sp,
|
||
height: 18.sp,
|
||
),
|
||
],
|
||
);
|
||
}
|
||
|
||
Widget buildUserContainer(UserinfoLogic controller) {
|
||
return Container(
|
||
margin: EdgeInsets.only(left: 3.sp),
|
||
height: 58.sp,
|
||
decoration: BoxDecoration(
|
||
image: DecorationImage(
|
||
image: AssetImage(getMineImage("icon_user_content")),
|
||
fit: BoxFit.fill,
|
||
),
|
||
),
|
||
child: Container(
|
||
margin: EdgeInsets.only(left: 24.sp),
|
||
child: Center(
|
||
child: Text(
|
||
controller.userInfoBean != null
|
||
? controller.userInfoBean!.signature
|
||
: "",
|
||
maxLines: 2,
|
||
style: const TextStyle(color: Colors.white),
|
||
overflow: TextOverflow.ellipsis,
|
||
),
|
||
),
|
||
),
|
||
);
|
||
}
|
||
|
||
Widget _imagelistView(UserinfoLogic controller) {
|
||
return Stack(
|
||
alignment: Alignment.center,
|
||
children: [
|
||
Container(
|
||
width: 68.sp,
|
||
height: 68.sp,
|
||
decoration: const BoxDecoration(
|
||
shape: BoxShape.circle,
|
||
gradient: LinearGradient(
|
||
colors: [Color(0xFFDD3DF4), Color(0xFF30FFD9)],
|
||
begin: Alignment.topCenter,
|
||
end: Alignment.bottomCenter,
|
||
),
|
||
),
|
||
),
|
||
SizedBox(
|
||
width: 66.sp,
|
||
height: 66.sp,
|
||
child: _buildAvatar1(controller),
|
||
),
|
||
],
|
||
);
|
||
}
|
||
|
||
Widget _buildAvatar1(UserinfoLogic controller) {
|
||
if (controller.userInfoBean == null) {
|
||
return SizedBox(
|
||
width: 66.sp,
|
||
height: 66.sp,
|
||
);
|
||
} else {
|
||
return ClipOval(
|
||
child: GestureDetector(
|
||
onTap: () {
|
||
var imgList = <String>[];
|
||
imgList.add(controller.userInfoBean!.avatar);
|
||
Get.toNamed(AppRoutes.Swiper,
|
||
arguments: {'imaglist': imgList, 'index': 0});
|
||
},
|
||
child: CachedNetworkImage(
|
||
fit: BoxFit.cover,
|
||
placeholder: null,
|
||
imageUrl: controller.userInfoBean != null
|
||
? controller.userInfoBean!.avatar
|
||
: "",
|
||
width: 66.sp,
|
||
height: 66.sp,
|
||
),
|
||
),
|
||
);
|
||
}
|
||
}
|
||
|
||
Widget _buildImageItem(String url, UserinfoLogic controller, int index) {
|
||
return Stack(
|
||
children: [
|
||
SizedBox(
|
||
width: double.infinity,
|
||
height: double.infinity,
|
||
child: ClipRRect(
|
||
borderRadius: BorderRadius.circular(0.0),
|
||
child: GestureDetector(
|
||
onTap: () {
|
||
List<String> imaglist = [];
|
||
for (var element in controller.state.imaglist) {
|
||
imaglist.add(element.url);
|
||
}
|
||
Get.toNamed(AppRoutes.Swiper,
|
||
arguments: {'imaglist': imaglist, 'index': index});
|
||
},
|
||
child: Image.network(
|
||
fit: BoxFit.cover,
|
||
url,
|
||
),
|
||
),
|
||
),
|
||
),
|
||
if (controller.userId == "")
|
||
Positioned(
|
||
top: 0,
|
||
right: 0,
|
||
child: GestureDetector(
|
||
onTap: () {
|
||
_showDelImgDialog(context, controller, index);
|
||
},
|
||
child: Visibility(
|
||
visible: controller.isEdit,
|
||
child: Image(
|
||
image: AssetImage(getMineImage("icon_img_del")),
|
||
width: 20.sp,
|
||
height: 20.sp,
|
||
),
|
||
),
|
||
),
|
||
),
|
||
],
|
||
);
|
||
}
|
||
|
||
void _showBottomSheet(BuildContext context, UserinfoLogic controller) {
|
||
showModalBottomSheet(
|
||
context: context,
|
||
backgroundColor: Colors.transparent,
|
||
builder: (BuildContext context) {
|
||
return Container(
|
||
decoration: const BoxDecoration(
|
||
borderRadius: BorderRadius.only(
|
||
topLeft: Radius.circular(16.0),
|
||
topRight: Radius.circular(16.0),
|
||
),
|
||
gradient: LinearGradient(
|
||
colors: [
|
||
Color(0xFF4A3E5D),
|
||
Color(0xFF344143),
|
||
],
|
||
begin: Alignment.centerLeft,
|
||
end: Alignment.centerRight,
|
||
),
|
||
),
|
||
height: 118.0,
|
||
width: double.infinity,
|
||
child: Row(
|
||
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||
children: [
|
||
GestureDetector(
|
||
onTap: () {
|
||
Navigator.pop(context);
|
||
Get.toNamed(AppRoutes.ReportActivity,
|
||
arguments: {"userId": logic.userId});
|
||
},
|
||
child: Column(
|
||
mainAxisAlignment: MainAxisAlignment.center,
|
||
children: [
|
||
Image(
|
||
image: AssetImage(getMineImage("icon_report")),
|
||
width: 40.sp,
|
||
height: 40.sp,
|
||
),
|
||
Container(
|
||
margin: EdgeInsets.only(top: 2.sp),
|
||
child: const Text(
|
||
"举报",
|
||
style: TextStyle(color: Colors.white),
|
||
),
|
||
),
|
||
],
|
||
),
|
||
),
|
||
GestureDetector(
|
||
onTap: () {
|
||
if (controller.isBlack) {
|
||
logic.setBlock("0");
|
||
Navigator.pop(context);
|
||
} else {
|
||
Navigator.pop(context);
|
||
_showReportDialog(context);
|
||
}
|
||
},
|
||
child: Column(
|
||
mainAxisAlignment: MainAxisAlignment.center,
|
||
children: [
|
||
Image(
|
||
image: AssetImage(getMineImage("icon_block")),
|
||
width: 40.sp,
|
||
height: 40.sp,
|
||
),
|
||
Container(
|
||
margin: EdgeInsets.only(top: 2.sp),
|
||
child: Text(
|
||
controller.isBlack ? "取消拉黑" : "拉黑",
|
||
style: TextStyle(color: Colors.white),
|
||
),
|
||
),
|
||
],
|
||
),
|
||
),
|
||
],
|
||
),
|
||
);
|
||
},
|
||
);
|
||
}
|
||
|
||
void _showDelImgDialog(
|
||
BuildContext context, UserinfoLogic controller, int index) {
|
||
showDialog(
|
||
context: context,
|
||
builder: (BuildContext context) {
|
||
return Dialog(
|
||
backgroundColor: Colors.transparent,
|
||
child: Container(
|
||
height: 160.sp,
|
||
padding: const EdgeInsets.all(1.0),
|
||
child: Stack(
|
||
children: [
|
||
Container(
|
||
decoration: BoxDecoration(
|
||
shape: BoxShape.rectangle,
|
||
borderRadius: BorderRadius.circular(10.0),
|
||
gradient: const LinearGradient(
|
||
colors: [Color(0xFFDD3DF4), Color(0xFF30FFD9)],
|
||
begin: Alignment.topCenter,
|
||
end: Alignment.bottomCenter,
|
||
),
|
||
),
|
||
),
|
||
Container(
|
||
margin: EdgeInsets.all(1.sp),
|
||
decoration: BoxDecoration(
|
||
shape: BoxShape.rectangle,
|
||
borderRadius: BorderRadius.circular(10.0),
|
||
gradient: const LinearGradient(
|
||
colors: [Color(0xFF4C3E5F), Color(0xFF324140)],
|
||
begin: Alignment.topCenter,
|
||
end: Alignment.bottomCenter,
|
||
),
|
||
),
|
||
),
|
||
Container(
|
||
margin: EdgeInsets.only(top: 24.sp),
|
||
child: Column(
|
||
children: [
|
||
Center(
|
||
child: Text(
|
||
"提示",
|
||
style:
|
||
TextStyle(color: Colors.white, fontSize: 16.sp),
|
||
),
|
||
),
|
||
Container(
|
||
margin: EdgeInsets.only(
|
||
top: 12.sp, left: 14.sp, right: 14.sp),
|
||
alignment: Alignment.center,
|
||
child: Text(
|
||
"是否确认删除该形象照。",
|
||
textAlign: TextAlign.center,
|
||
style: TextStyle(
|
||
color: const Color(0xCCF7FAFA), fontSize: 16.sp),
|
||
),
|
||
),
|
||
Row(
|
||
mainAxisAlignment: MainAxisAlignment.center,
|
||
// mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||
children: [
|
||
GestureDetector(
|
||
onTap: () {
|
||
Navigator.pop(context);
|
||
},
|
||
child: Container(
|
||
margin: EdgeInsets.only(top: 30.sp),
|
||
decoration: BoxDecoration(
|
||
borderRadius: BorderRadius.circular(17),
|
||
gradient: const LinearGradient(
|
||
colors: [
|
||
Color(0x26FFFFFF),
|
||
Color(0x26FFFFFF),
|
||
],
|
||
begin: Alignment.centerLeft,
|
||
end: Alignment.centerRight,
|
||
),
|
||
),
|
||
padding: EdgeInsets.only(
|
||
top: 10.sp,
|
||
bottom: 10.sp,
|
||
left: 52.sp,
|
||
right: 52.sp),
|
||
child: const Text(
|
||
"否",
|
||
style: TextStyle(
|
||
color: Colors.white,
|
||
fontSize: 12,
|
||
),
|
||
),
|
||
),
|
||
),
|
||
SizedBox(width: 24.sp),
|
||
GestureDetector(
|
||
onTap: () {
|
||
Navigator.pop(context);
|
||
controller.delAlbumImage(index);
|
||
},
|
||
child: Container(
|
||
margin: EdgeInsets.only(top: 24.sp),
|
||
decoration: BoxDecoration(
|
||
borderRadius: BorderRadius.circular(17),
|
||
gradient: const LinearGradient(
|
||
colors: [
|
||
Color(0xFF06F9FA),
|
||
Color(0xFFDC5BFD),
|
||
],
|
||
begin: Alignment.centerLeft,
|
||
end: Alignment.centerRight,
|
||
),
|
||
),
|
||
padding: EdgeInsets.only(
|
||
top: 10.sp,
|
||
bottom: 10.sp,
|
||
left: 52.sp,
|
||
right: 52.sp),
|
||
child: const Text(
|
||
"是",
|
||
style: TextStyle(
|
||
color: Colors.white,
|
||
fontSize: 12,
|
||
),
|
||
),
|
||
),
|
||
)
|
||
],
|
||
)
|
||
],
|
||
),
|
||
)
|
||
],
|
||
),
|
||
),
|
||
);
|
||
},
|
||
);
|
||
}
|
||
|
||
void _showReportDialog(BuildContext context) {
|
||
showDialog(
|
||
context: context,
|
||
builder: (BuildContext context) {
|
||
return Dialog(
|
||
backgroundColor: Colors.transparent,
|
||
child: Container(
|
||
height: 277.sp,
|
||
padding: const EdgeInsets.all(1.0),
|
||
child: Stack(
|
||
children: [
|
||
Container(
|
||
decoration: BoxDecoration(
|
||
shape: BoxShape.rectangle,
|
||
borderRadius: BorderRadius.circular(10.0),
|
||
gradient: const LinearGradient(
|
||
colors: [Color(0xFFDD3DF4), Color(0xFF30FFD9)],
|
||
begin: Alignment.topCenter,
|
||
end: Alignment.bottomCenter,
|
||
),
|
||
),
|
||
),
|
||
Container(
|
||
margin: EdgeInsets.all(1.sp),
|
||
decoration: BoxDecoration(
|
||
shape: BoxShape.rectangle,
|
||
borderRadius: BorderRadius.circular(10.0),
|
||
gradient: const LinearGradient(
|
||
colors: [Color(0xFF4C3E5F), Color(0xFF324140)],
|
||
begin: Alignment.topCenter,
|
||
end: Alignment.bottomCenter,
|
||
),
|
||
),
|
||
),
|
||
Container(
|
||
margin: EdgeInsets.only(top: 24.sp),
|
||
child: Column(
|
||
children: [
|
||
Center(
|
||
child: Text(
|
||
"是否拉黑",
|
||
style:
|
||
TextStyle(color: Colors.white, fontSize: 16.sp),
|
||
),
|
||
),
|
||
Container(
|
||
margin: EdgeInsets.only(top: 14.sp),
|
||
alignment: Alignment.center,
|
||
child: Image(
|
||
image: AssetImage(getMineImage("icon_dialog_black")),
|
||
width: 70.sp,
|
||
height: 70.sp,
|
||
),
|
||
),
|
||
Container(
|
||
margin: EdgeInsets.only(
|
||
top: 12.sp, left: 14.sp, right: 14.sp),
|
||
alignment: Alignment.center,
|
||
child: Text(
|
||
"拉黑后,你将屏蔽对方的任何信息若您关注了对方,将自动取消关注。",
|
||
textAlign: TextAlign.center,
|
||
style: TextStyle(
|
||
color: const Color(0xCCF7FAFA), fontSize: 16.sp),
|
||
),
|
||
),
|
||
Row(
|
||
mainAxisAlignment: MainAxisAlignment.center,
|
||
// mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||
children: [
|
||
GestureDetector(
|
||
onTap: () {
|
||
Navigator.pop(context);
|
||
},
|
||
child: Container(
|
||
margin: EdgeInsets.only(top: 24.sp),
|
||
decoration: BoxDecoration(
|
||
borderRadius: BorderRadius.circular(17),
|
||
gradient: const LinearGradient(
|
||
colors: [
|
||
Color(0x26FFFFFF),
|
||
Color(0x26FFFFFF),
|
||
],
|
||
begin: Alignment.centerLeft,
|
||
end: Alignment.centerRight,
|
||
),
|
||
),
|
||
padding: EdgeInsets.only(
|
||
top: 10.sp,
|
||
bottom: 10.sp,
|
||
left: 52.sp,
|
||
right: 52.sp),
|
||
child: const Text(
|
||
"否",
|
||
style: TextStyle(
|
||
color: Colors.white,
|
||
fontSize: 12,
|
||
),
|
||
),
|
||
),
|
||
),
|
||
SizedBox(width: 24.sp),
|
||
GestureDetector(
|
||
onTap: () {
|
||
logic.setBlock("1");
|
||
},
|
||
child: Container(
|
||
margin: EdgeInsets.only(top: 24.sp),
|
||
decoration: BoxDecoration(
|
||
borderRadius: BorderRadius.circular(17),
|
||
gradient: const LinearGradient(
|
||
colors: [
|
||
Color(0xFF06F9FA),
|
||
Color(0xFFDC5BFD),
|
||
],
|
||
begin: Alignment.centerLeft,
|
||
end: Alignment.centerRight,
|
||
),
|
||
),
|
||
padding: EdgeInsets.only(
|
||
top: 10.sp,
|
||
bottom: 10.sp,
|
||
left: 52.sp,
|
||
right: 52.sp),
|
||
child: const Text(
|
||
"是",
|
||
style: TextStyle(
|
||
color: Colors.white,
|
||
fontSize: 12,
|
||
),
|
||
),
|
||
),
|
||
)
|
||
],
|
||
)
|
||
],
|
||
),
|
||
)
|
||
],
|
||
),
|
||
),
|
||
);
|
||
},
|
||
);
|
||
}
|
||
}
|