|
|
|
import 'package:flutter/material.dart';
|
|
|
|
import 'package:huixiang/generated/l10n.dart';
|
|
|
|
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
|
|
|
import 'package:huixiang/retrofit/data/rank.dart';
|
|
|
|
import 'package:huixiang/retrofit/data/user_info.dart';
|
|
|
|
import 'package:huixiang/utils/flutter_utils.dart';
|
|
|
|
import 'package:huixiang/view_widget/login_tips_dialog.dart';
|
|
|
|
import 'package:shared_preferences/shared_preferences.dart';
|
|
|
|
|
|
|
|
class MineVipView extends StatelessWidget {
|
|
|
|
int vipLevel;
|
|
|
|
int curLevel;
|
|
|
|
final int rankMax;
|
|
|
|
final int rank;
|
|
|
|
final String createTime;
|
|
|
|
final String tag;
|
|
|
|
final double padding;
|
|
|
|
final UserInfo userInfo;
|
|
|
|
final List<Rank> ranks;
|
|
|
|
|
|
|
|
MineVipView({
|
|
|
|
this.vipLevel = 1,
|
|
|
|
this.ranks,
|
|
|
|
this.tag,
|
|
|
|
this.userInfo,
|
|
|
|
this.padding = 16,
|
|
|
|
this.curLevel = 1,
|
|
|
|
this.rankMax = 0,
|
|
|
|
this.rank = 0,
|
|
|
|
this.createTime = "",
|
|
|
|
});
|
|
|
|
|
|
|
|
String topLeft = "";
|
|
|
|
String levelText = "";
|
|
|
|
|
|
|
|
@override
|
|
|
|
Widget build(BuildContext context) {
|
|
|
|
List<Color> linearColor = [
|
|
|
|
Color(0xFFD6F6F3),
|
|
|
|
Color(0xFF86BEBA),
|
|
|
|
];
|
|
|
|
Color levelColor = Color(0xFF558B87);
|
|
|
|
Color textColor = Colors.white;
|
|
|
|
|
|
|
|
if (userInfo != null &&
|
|
|
|
userInfo.memberRankVo != null &&
|
|
|
|
ranks != null &&
|
|
|
|
ranks.length > 0) {
|
|
|
|
curLevel = (ranks
|
|
|
|
.indexWhere((element) => element.id == userInfo.memberRankVo.id) +
|
|
|
|
1);
|
|
|
|
vipLevel = curLevel;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (curLevel == vipLevel) {
|
|
|
|
topLeft = S.of(context).dangqiandengji;
|
|
|
|
} else if (vipLevel < curLevel) {
|
|
|
|
topLeft = S.of(context).shangyidengji;
|
|
|
|
} else {
|
|
|
|
topLeft = S.of(context).xiayidengji;
|
|
|
|
}
|
|
|
|
|
|
|
|
switch (vipLevel) {
|
|
|
|
case 1:
|
|
|
|
{
|
|
|
|
linearColor = [
|
|
|
|
Color(0xFFD6F6F3),
|
|
|
|
Color(0xFF86BEBA),
|
|
|
|
];
|
|
|
|
levelColor = Color(0xFF558B87);
|
|
|
|
levelText = "LV1 ${S.of(context).qingtonghuiyuan}";
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case 2:
|
|
|
|
{
|
|
|
|
linearColor = [
|
|
|
|
Color(0xFFF2F2F2),
|
|
|
|
Color(0xFFBEBEBE),
|
|
|
|
];
|
|
|
|
levelColor = Color(0xFF575757);
|
|
|
|
textColor = Color(0xFF575757);
|
|
|
|
levelText = "LV2 ${S.of(context).baiyinhuiyuan}";
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case 3:
|
|
|
|
{
|
|
|
|
linearColor = [
|
|
|
|
Color(0xFFFEF5DC),
|
|
|
|
Color(0xFFD1B97D),
|
|
|
|
];
|
|
|
|
levelColor = Color(0xFFAE9B6D);
|
|
|
|
levelText = "LV3 ${S.of(context).huangjinhuiyuan}";
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case 4:
|
|
|
|
{
|
|
|
|
linearColor = [
|
|
|
|
Color(0xFFEEEEEF),
|
|
|
|
Color(0xFFA999DB),
|
|
|
|
];
|
|
|
|
levelColor = Color(0xFF887CB4);
|
|
|
|
levelText = "LV4 ${S.of(context).zuanshihuiyuan}";
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case 5:
|
|
|
|
{
|
|
|
|
linearColor = [
|
|
|
|
Color(0xFFEEEEEF),
|
|
|
|
Color(0xFF000000),
|
|
|
|
];
|
|
|
|
levelColor = Color(0xFF000000);
|
|
|
|
levelText = "LV5 ${S.of(context).zhizunhuiyuan}";
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
Widget widget = Container(
|
|
|
|
margin: EdgeInsets.fromLTRB(padding.w, 16.h, padding.w, 8.h),
|
|
|
|
width: MediaQuery.of(context).size.width - 32.w,
|
|
|
|
height: (MediaQuery.of(context).size.width - 32.w) /
|
|
|
|
1.78 *
|
|
|
|
AppUtils.textScale(context),
|
|
|
|
decoration: BoxDecoration(
|
|
|
|
gradient: LinearGradient(
|
|
|
|
colors: linearColor,
|
|
|
|
begin: Alignment.topLeft,
|
|
|
|
end: Alignment.bottomRight,
|
|
|
|
),
|
|
|
|
borderRadius: BorderRadius.circular(8),
|
|
|
|
boxShadow: [
|
|
|
|
BoxShadow(
|
|
|
|
color: Colors.black.withAlpha(12),
|
|
|
|
offset: Offset(0, 3),
|
|
|
|
blurRadius: 14,
|
|
|
|
spreadRadius: 0,
|
|
|
|
),
|
|
|
|
],
|
|
|
|
),
|
|
|
|
child: Column(
|
|
|
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
|
|
|
children: [
|
|
|
|
Row(
|
|
|
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
children: [
|
|
|
|
Container(
|
|
|
|
height: 86.w,
|
|
|
|
child: Column(
|
|
|
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
children: [
|
|
|
|
Container(
|
|
|
|
padding: EdgeInsets.fromLTRB(9.w, 4.h, 8.w, 4.h),
|
|
|
|
decoration: BoxDecoration(
|
|
|
|
color: levelColor,
|
|
|
|
borderRadius: BorderRadius.only(
|
|
|
|
topLeft: Radius.circular(8),
|
|
|
|
bottomRight: Radius.circular(8),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
child: Text(
|
|
|
|
topLeft,
|
|
|
|
style: TextStyle(
|
|
|
|
fontSize: 12.sp,
|
|
|
|
fontWeight: FontWeight.bold,
|
|
|
|
color: Colors.white,
|
|
|
|
),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
Container(
|
|
|
|
margin: EdgeInsets.only(left: 13.w),
|
|
|
|
child: Text(
|
|
|
|
levelText,
|
|
|
|
style: TextStyle(
|
|
|
|
color: textColor,
|
|
|
|
fontWeight: FontWeight.bold,
|
|
|
|
fontSize: 23.sp,
|
|
|
|
),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
],
|
|
|
|
),
|
|
|
|
),
|
|
|
|
Container(
|
|
|
|
margin: EdgeInsets.only(right: 11.w, bottom: 9.h),
|
|
|
|
child: Image.asset(
|
|
|
|
"assets/image/icon_mine_huixiang_logo.png",
|
|
|
|
width: 86.w,
|
|
|
|
height: 86.w,
|
|
|
|
fit: BoxFit.contain,
|
|
|
|
),
|
|
|
|
),
|
|
|
|
],
|
|
|
|
),
|
|
|
|
Expanded(
|
|
|
|
child: Container(
|
|
|
|
margin: EdgeInsets.only(
|
|
|
|
left: 13.w,
|
|
|
|
right: 12.w,
|
|
|
|
bottom: 12.h,
|
|
|
|
),
|
|
|
|
child: Column(
|
|
|
|
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
|
|
|
children: [
|
|
|
|
Row(
|
|
|
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.baseline,
|
|
|
|
textBaseline: TextBaseline.alphabetic,
|
|
|
|
children: [
|
|
|
|
Expanded(
|
|
|
|
child: Text(
|
|
|
|
rank > rankMax
|
|
|
|
? S.of(context).dangqiandengji
|
|
|
|
: "${S.of(context).jifen_(rankMax - rank)} ${S.of(context).daoxiayidengji}",
|
|
|
|
overflow: TextOverflow.ellipsis,
|
|
|
|
style: TextStyle(
|
|
|
|
color: textColor,
|
|
|
|
fontWeight: FontWeight.w400,
|
|
|
|
fontSize: 14.sp,
|
|
|
|
),
|
|
|
|
),
|
|
|
|
flex: 1,
|
|
|
|
),
|
|
|
|
Text.rich(
|
|
|
|
TextSpan(
|
|
|
|
children: [
|
|
|
|
TextSpan(
|
|
|
|
text: "$rank",
|
|
|
|
style: TextStyle(
|
|
|
|
fontSize: 26.sp,
|
|
|
|
fontWeight: FontWeight.bold,
|
|
|
|
color: textColor,
|
|
|
|
),
|
|
|
|
),
|
|
|
|
if (rank <= rankMax)
|
|
|
|
TextSpan(
|
|
|
|
text: rankMax > 0 ? "/$rankMax" : "/0",
|
|
|
|
style: TextStyle(
|
|
|
|
fontSize: 14.sp,
|
|
|
|
fontWeight: FontWeight.w400,
|
|
|
|
color: textColor,
|
|
|
|
),
|
|
|
|
),
|
|
|
|
],
|
|
|
|
),
|
|
|
|
),
|
|
|
|
],
|
|
|
|
),
|
|
|
|
Container(
|
|
|
|
height: 8.h,
|
|
|
|
child: ClipRRect(
|
|
|
|
borderRadius: BorderRadius.circular(6.5),
|
|
|
|
child: LinearProgressIndicator(
|
|
|
|
value: rankMax > 0 ? rank / rankMax : 0,
|
|
|
|
backgroundColor: Colors.white,
|
|
|
|
color: levelColor,
|
|
|
|
),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
Row(
|
|
|
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.center,
|
|
|
|
children: [
|
|
|
|
Text(
|
|
|
|
S.of(context).kaitongriqi(
|
|
|
|
(createTime != null && createTime != "")
|
|
|
|
? createTime.split(" ")[0]
|
|
|
|
: "$createTime"),
|
|
|
|
style: TextStyle(
|
|
|
|
color: textColor,
|
|
|
|
fontWeight: FontWeight.w400,
|
|
|
|
fontSize: 12.sp,
|
|
|
|
),
|
|
|
|
),
|
|
|
|
Icon(
|
|
|
|
Icons.qr_code,
|
|
|
|
size: 24,
|
|
|
|
color: Colors.white,
|
|
|
|
),
|
|
|
|
],
|
|
|
|
),
|
|
|
|
],
|
|
|
|
),
|
|
|
|
),
|
|
|
|
flex: 1,
|
|
|
|
),
|
|
|
|
],
|
|
|
|
),
|
|
|
|
);
|
|
|
|
|
|
|
|
return GestureDetector(
|
|
|
|
onTap: () {
|
|
|
|
if (userInfo != null) {
|
|
|
|
SharedPreferences.getInstance().then((value) {
|
|
|
|
if (value.getString("token") == null ||
|
|
|
|
value.getString("token") == "") {
|
|
|
|
LoginTipsDialog().show(context);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
Navigator.of(context)
|
|
|
|
.pushNamed('/router/mine_vip_level_page', arguments: {
|
|
|
|
"rankLevel": curLevel,
|
|
|
|
"createTime": (userInfo != null) ? "${userInfo.createTime}" : "",
|
|
|
|
"points": (userInfo != null) ? int.tryParse(userInfo.points) : 0,
|
|
|
|
});
|
|
|
|
});
|
|
|
|
}
|
|
|
|
},
|
|
|
|
child: (tag == null || tag == "")
|
|
|
|
? widget
|
|
|
|
: Hero(tag: tag, child: widget),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|