You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
439 lines
15 KiB
439 lines
15 KiB
3 years ago
|
import 'package:flutter/cupertino.dart';
|
||
|
import 'package:flutter/foundation.dart';
|
||
|
import 'package:flutter/material.dart';
|
||
|
import 'package:huixiang/generated/l10n.dart';
|
||
|
import 'package:huixiang/retrofit/data/user_info.dart';
|
||
|
import 'package:huixiang/retrofit/retrofit_api.dart';
|
||
|
import 'package:huixiang/utils/flutter_utils.dart';
|
||
|
import 'package:huixiang/utils/font_weight.dart';
|
||
|
import 'package:huixiang/view_widget/border_text.dart';
|
||
|
import 'package:huixiang/view_widget/custom_image.dart';
|
||
|
import 'package:huixiang/view_widget/my_appbar.dart';
|
||
|
import 'package:huixiang/view_widget/round_button.dart';
|
||
|
import 'package:pull_to_refresh/pull_to_refresh.dart';
|
||
|
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||
|
|
||
|
class MineAttainmentPage extends StatefulWidget {
|
||
|
final Map<String, dynamic> arguments;
|
||
|
|
||
|
MineAttainmentPage({this.arguments});
|
||
|
|
||
|
@override
|
||
|
State<StatefulWidget> createState() {
|
||
|
return _MineAttainmentPage();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
class _MineAttainmentPage extends State<MineAttainmentPage> {
|
||
|
ApiService apiService;
|
||
|
final RefreshController _refreshController = RefreshController();
|
||
|
UserInfo userInfo;
|
||
|
var checkIndex = 1;
|
||
|
|
||
|
@override
|
||
|
void dispose() {
|
||
|
super.dispose();
|
||
|
if (_refreshController != null) _refreshController.dispose();
|
||
|
}
|
||
|
|
||
|
@override
|
||
|
void initState() {
|
||
|
super.initState();
|
||
|
userInfo = widget.arguments["userInfo"];
|
||
|
}
|
||
|
|
||
|
@override
|
||
|
Widget build(BuildContext context) {
|
||
|
return Container(decoration: BoxDecoration(
|
||
|
image: DecorationImage(
|
||
|
fit: BoxFit.fill,
|
||
|
image: AssetImage("assets/image/attainment_bj.png"),
|
||
|
),
|
||
|
),child:Scaffold(
|
||
|
backgroundColor: Colors.transparent,
|
||
|
appBar: MyAppBar(
|
||
|
title: "我的成就",
|
||
|
titleColor: Colors.black,
|
||
|
titleSize: 18.sp,
|
||
|
background: Colors.transparent,
|
||
|
leadingColor: Colors.black,
|
||
|
),
|
||
|
body: SingleChildScrollView(
|
||
|
physics: BouncingScrollPhysics(),
|
||
|
child: Column(
|
||
|
children: [
|
||
|
SizedBox(height: 24),
|
||
|
MImage(
|
||
|
userInfo?.headimg ?? "",
|
||
|
isCircle: true,
|
||
|
width: 58,
|
||
|
height: 58,
|
||
|
fit: BoxFit.cover,
|
||
|
errorSrc: "assets/image/default_user.png",
|
||
|
fadeSrc: "assets/image/default_user.png",
|
||
|
),
|
||
|
SizedBox(height: 8),
|
||
|
Text(
|
||
|
userInfo?.nickname ?? S.of(context).denglu,
|
||
|
style: TextStyle(
|
||
|
fontSize: 16.sp,
|
||
|
fontWeight: FontWeight.bold,
|
||
|
color: Color(0xFF353535),
|
||
|
),
|
||
|
),
|
||
|
SizedBox(height: 28),
|
||
|
Container(
|
||
|
margin: EdgeInsets.only(left: 16, right: 16, top: 26, bottom: 8),
|
||
|
padding: EdgeInsets.all(20),
|
||
|
decoration: BoxDecoration(
|
||
|
color: Colors.white,
|
||
|
boxShadow: [
|
||
|
BoxShadow(
|
||
|
color: Colors.black.withAlpha(12),
|
||
|
offset: Offset(0, 3),
|
||
|
blurRadius: 14,
|
||
|
spreadRadius: 0,
|
||
|
)
|
||
|
],
|
||
|
borderRadius: BorderRadius.all(Radius.circular(8)),
|
||
|
),
|
||
|
child: Column(
|
||
|
mainAxisAlignment: MainAxisAlignment.spaceAround,
|
||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||
|
children: [
|
||
|
Row(
|
||
|
children: [
|
||
|
Text(
|
||
|
"成就徽章",
|
||
|
style: TextStyle(
|
||
|
fontWeight: MyFontWeight.medium,
|
||
|
fontSize: 14.sp,
|
||
|
color: Color(0xFF353535)),
|
||
|
),
|
||
|
SizedBox(width: 4),
|
||
|
Text(
|
||
|
"(",
|
||
|
style: TextStyle(
|
||
|
fontWeight: MyFontWeight.medium,
|
||
|
fontSize: 14,
|
||
|
color: Color(0xFF353535)),
|
||
|
),
|
||
|
Text(
|
||
|
"0",
|
||
|
style: TextStyle(
|
||
|
fontWeight: MyFontWeight.medium,
|
||
|
fontSize: 14,
|
||
|
color: Color(0xFF32A060)),
|
||
|
),
|
||
|
Text(
|
||
|
"/8)",
|
||
|
style: TextStyle(
|
||
|
fontWeight: MyFontWeight.medium,
|
||
|
fontSize: 14,
|
||
|
color: Color(0xFF353535)),
|
||
|
),
|
||
|
],
|
||
|
),
|
||
|
SizedBox(height: 12),
|
||
|
attainmentBadge(),
|
||
|
],
|
||
|
),
|
||
|
),
|
||
|
],
|
||
|
),
|
||
|
)),
|
||
|
);
|
||
|
}
|
||
|
|
||
|
///成就徽章列表
|
||
|
Widget attainmentBadge() {
|
||
|
return GridView.builder(
|
||
|
itemCount: 8,
|
||
|
shrinkWrap: true,
|
||
|
physics: NeverScrollableScrollPhysics(),
|
||
|
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
|
||
|
//一行的Widget数量
|
||
|
crossAxisCount: 3,
|
||
|
//水平子Widget之间间距
|
||
|
crossAxisSpacing: 13,
|
||
|
//垂直子Widget之间间距
|
||
|
mainAxisSpacing: 12,
|
||
|
//子Widget宽高比例
|
||
|
childAspectRatio: AppUtils.textScale(context) > 1
|
||
|
? (1 - ((AppUtils.textScale(context) - 1)))
|
||
|
: 0.85,
|
||
|
),
|
||
|
itemBuilder: (context, index) {
|
||
|
return GestureDetector(
|
||
|
onTap: () {
|
||
|
showDeleteDialog();
|
||
|
},
|
||
|
child: badgeItem(),
|
||
|
);
|
||
|
},
|
||
|
);
|
||
|
}
|
||
|
|
||
|
Widget badgeItem() {
|
||
|
return Container(
|
||
|
alignment: Alignment.center,
|
||
|
child: Column(
|
||
|
children: [
|
||
|
// MImage(
|
||
|
// "assets/image/badge_img.png",
|
||
|
// width: 80,
|
||
|
// height: 80,
|
||
|
// fit: BoxFit.cover,
|
||
|
// errorSrc: "assets/image/default_1.png",
|
||
|
// fadeSrc: "assets/image/default_1.png",
|
||
|
// ),
|
||
|
Image.asset(
|
||
|
"assets/image/badge_img.png",
|
||
|
width: 80,
|
||
|
height: 80,
|
||
|
fit: BoxFit.cover,
|
||
|
),
|
||
|
SizedBox(
|
||
|
height: 4.h,
|
||
|
),
|
||
|
Text(
|
||
|
"签到",
|
||
|
overflow: TextOverflow.ellipsis,
|
||
|
style: TextStyle(
|
||
|
color: Color(0xFF181818),
|
||
|
fontWeight: MyFontWeight.medium,
|
||
|
fontSize: 12.sp,
|
||
|
),
|
||
|
),
|
||
|
],
|
||
|
),
|
||
|
);
|
||
|
}
|
||
|
|
||
|
///徽章成就弹窗
|
||
|
showDeleteDialog() {
|
||
|
showDialog(
|
||
|
context: context,
|
||
|
builder: (context) {
|
||
|
return StatefulBuilder(builder: (context, state) {
|
||
|
return AlertDialog(
|
||
|
content: Container(
|
||
|
width: MediaQuery.of(context).size.width - 84,
|
||
|
height: 385.h,
|
||
|
child: Column(
|
||
|
// mainAxisAlignment: MainAxisAlignment.spaceAround,
|
||
|
// crossAxisAlignment: CrossAxisAlignment.start,
|
||
|
children: [
|
||
|
GestureDetector(
|
||
|
onTap: () {
|
||
|
Navigator.of(context).pop();
|
||
|
},
|
||
|
child: Row(
|
||
|
children: [
|
||
|
Spacer(),
|
||
|
Image.asset(
|
||
|
"assets/image/icon_order_cancel.png",
|
||
|
width: 24,
|
||
|
height: 24,
|
||
|
),
|
||
|
],
|
||
|
),
|
||
|
),
|
||
|
Image.asset(
|
||
|
"assets/image/badge_img.png",
|
||
|
width: 150,
|
||
|
height: 150,
|
||
|
fit: BoxFit.cover,
|
||
|
),
|
||
|
Text(
|
||
|
"消费白银徽章",
|
||
|
style: TextStyle(
|
||
|
fontSize: 16.sp,
|
||
|
fontWeight: MyFontWeight.semi_bold,
|
||
|
color: Color(0xFF181818),
|
||
|
),
|
||
|
),
|
||
|
SizedBox(
|
||
|
height: 6.h,
|
||
|
),
|
||
|
Text(
|
||
|
"再消费268.4元即可升级",
|
||
|
style: TextStyle(
|
||
|
fontSize: 12.sp,
|
||
|
fontWeight: MyFontWeight.regular,
|
||
|
color: Color(0xFFA3A3A3),
|
||
|
),
|
||
|
),
|
||
|
SizedBox(
|
||
|
height: 4.h,
|
||
|
),
|
||
|
Row(
|
||
|
mainAxisAlignment: MainAxisAlignment.center,
|
||
|
crossAxisAlignment: CrossAxisAlignment.center,
|
||
|
children: [
|
||
|
Text(
|
||
|
"奖励:",
|
||
|
style: TextStyle(
|
||
|
fontWeight: MyFontWeight.regular,
|
||
|
fontSize: 12.sp,
|
||
|
color: Color(0xFF515151)),
|
||
|
),
|
||
|
SizedBox(width: 8),
|
||
|
Image.asset(
|
||
|
"assets/image/icon_gold_coin.png",
|
||
|
width: 14,
|
||
|
height: 14,
|
||
|
fit: BoxFit.cover,
|
||
|
),
|
||
|
SizedBox(width: 4),
|
||
|
Text(
|
||
|
"+ 10",
|
||
|
style: TextStyle(
|
||
|
fontWeight: MyFontWeight.regular,
|
||
|
fontSize: 12.sp,
|
||
|
color: Color(0xFF515151)),
|
||
|
),
|
||
|
],
|
||
|
),
|
||
|
SizedBox(height: 5),
|
||
|
Row(
|
||
|
mainAxisAlignment: MainAxisAlignment.center,
|
||
|
crossAxisAlignment: CrossAxisAlignment.center,
|
||
|
children: [
|
||
|
GestureDetector(
|
||
|
onTap: () {
|
||
|
state(() {
|
||
|
checkIndex = 1;
|
||
|
});
|
||
|
},
|
||
|
child: Column(
|
||
|
children: [
|
||
|
Image.asset(
|
||
|
"assets/image/qt_badge.png",
|
||
|
width: checkIndex != 1 ? 30 : 55,
|
||
|
height: checkIndex != 1 ? 30 : 55,
|
||
|
fit: BoxFit.cover,
|
||
|
),
|
||
|
SizedBox(height: 10),
|
||
|
Text(
|
||
|
"青铜",
|
||
|
style: TextStyle(
|
||
|
fontSize: 10.sp,
|
||
|
fontWeight: MyFontWeight.regular,
|
||
|
color: Color(0xFFA3A3A3),
|
||
|
),
|
||
|
),
|
||
|
],
|
||
|
),
|
||
|
),
|
||
|
Container(
|
||
|
width: 35.w,
|
||
|
height: 2.h,
|
||
|
decoration: new BoxDecoration(
|
||
|
color: Color(0xFFE1F2F7),
|
||
|
),
|
||
|
),
|
||
|
GestureDetector(
|
||
|
onTap: () {
|
||
|
state(() {
|
||
|
checkIndex = 2;
|
||
|
});
|
||
|
},
|
||
|
child: Column(
|
||
|
children: [
|
||
|
Image.asset(
|
||
|
"assets/image/by_badge.png",
|
||
|
width: checkIndex != 2 ? 35 : 65,
|
||
|
height: checkIndex != 2 ? 35 : 65,
|
||
|
fit: BoxFit.cover,
|
||
|
),
|
||
|
SizedBox(height: 10),
|
||
|
Text(
|
||
|
"白银",
|
||
|
style: TextStyle(
|
||
|
fontSize: 10.sp,
|
||
|
fontWeight: MyFontWeight.regular,
|
||
|
color: Color(0xFFA3A3A3),
|
||
|
),
|
||
|
),
|
||
|
],
|
||
|
),
|
||
|
),
|
||
|
Container(
|
||
|
width: 35.w,
|
||
|
height: 2.h,
|
||
|
decoration: new BoxDecoration(
|
||
|
color: Color(0xFFE1F2F7),
|
||
|
),
|
||
|
),
|
||
|
GestureDetector(
|
||
|
onTap: () {
|
||
|
state(() {
|
||
|
checkIndex = 3;
|
||
|
});
|
||
|
},
|
||
|
child: Column(
|
||
|
children: [
|
||
|
Image.asset(
|
||
|
"assets/image/hj_badge.png",
|
||
|
width: checkIndex != 3 ? 35 : 65,
|
||
|
height: checkIndex != 3 ? 35 : 65,
|
||
|
fit: BoxFit.cover,
|
||
|
),
|
||
|
SizedBox(height: 10),
|
||
|
Text(
|
||
|
"黄金",
|
||
|
style: TextStyle(
|
||
|
fontSize: 10.sp,
|
||
|
fontWeight: MyFontWeight.regular,
|
||
|
color: Color(0xFFA3A3A3),
|
||
|
),
|
||
|
),
|
||
|
],
|
||
|
),
|
||
|
),
|
||
|
Container(
|
||
|
width: 35.w,
|
||
|
height: 2.h,
|
||
|
decoration: new BoxDecoration(
|
||
|
color: Color(0xFFE1F2F7),
|
||
|
),
|
||
|
),
|
||
|
GestureDetector(
|
||
|
onTap: () {
|
||
|
state(() {
|
||
|
checkIndex = 4;
|
||
|
});
|
||
|
},
|
||
|
child: Column(
|
||
|
children: [
|
||
|
Image.asset(
|
||
|
"assets/image/qt_badge.png",
|
||
|
width: checkIndex != 4 ? 35 : 65,
|
||
|
height: checkIndex != 4 ? 35 : 65,
|
||
|
fit: BoxFit.cover,
|
||
|
),
|
||
|
SizedBox(height: 10),
|
||
|
Text(
|
||
|
"铂金",
|
||
|
style: TextStyle(
|
||
|
fontSize: 10.sp,
|
||
|
fontWeight: MyFontWeight.regular,
|
||
|
color: Color(0xFFA3A3A3),
|
||
|
),
|
||
|
),
|
||
|
],
|
||
|
),
|
||
|
),
|
||
|
],
|
||
|
),
|
||
|
],
|
||
|
),
|
||
|
),
|
||
|
);
|
||
|
});
|
||
|
},
|
||
|
);
|
||
|
}
|
||
|
}
|