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.
580 lines
18 KiB
580 lines
18 KiB
import 'package:flutter/cupertino.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:flutter/services.dart';
|
|
|
|
import 'package:recook/base/base_store_state.dart';
|
|
import 'package:recook/constants/api.dart';
|
|
import 'package:recook/constants/header.dart';
|
|
import 'package:recook/constants/styles.dart';
|
|
import 'package:recook/manager/http_manager.dart';
|
|
import 'package:recook/manager/user_manager.dart';
|
|
import 'package:recook/models/base_model.dart';
|
|
import 'package:recook/models/shop_summary_model.dart';
|
|
import 'package:recook/utils/share_tool.dart';
|
|
import 'package:recook/widgets/custom_app_bar.dart';
|
|
import 'package:recook/widgets/custom_cache_image.dart';
|
|
import 'package:recook/widgets/refresh_widget.dart';
|
|
import 'package:recook/widgets/toast.dart';
|
|
|
|
//TODO CLEAN BOTTOM CODES.
|
|
@Deprecated("member_benefits_page deprecated.")
|
|
class MemberBenefitsPage extends StatefulWidget {
|
|
@override
|
|
State<StatefulWidget> createState() {
|
|
return _MemberBenefitsPageState();
|
|
}
|
|
}
|
|
|
|
class _MemberBenefitsPageState extends BaseStoreState<MemberBenefitsPage> {
|
|
bool _hasLoading = false;
|
|
int _inviteCount = 0;
|
|
GSRefreshController _gsRefreshController =
|
|
GSRefreshController(initialRefresh: true);
|
|
@override
|
|
void initState() {
|
|
super.initState();
|
|
}
|
|
|
|
_getData() {
|
|
_getInviteCount();
|
|
_getShopSummary();
|
|
}
|
|
|
|
_getShopSummary() async {
|
|
ResultData resultData = await HttpManager.post(ShopApi.shop_index, {
|
|
"userId": UserManager.instance.user.info.id,
|
|
});
|
|
if (_gsRefreshController.isRefresh()) {
|
|
_gsRefreshController.refreshCompleted();
|
|
}
|
|
if (!resultData.result) {
|
|
if (mounted) showError(resultData.msg);
|
|
return;
|
|
}
|
|
ShopSummaryModel model = ShopSummaryModel.fromJson(resultData.data);
|
|
// String jsonString = jsonEncode(resultData.data);
|
|
if (model.code != HttpStatus.SUCCESS) {
|
|
if (mounted) showError(model.msg);
|
|
return;
|
|
}
|
|
if (UserManager.instance.user.info.roleLevel != model.data.roleLevel) {
|
|
UserManager.instance.user.info.roleLevel = model.data.roleLevel;
|
|
UserManager.instance.refreshUserRole.value =
|
|
!UserManager.instance.refreshUserRole.value;
|
|
UserManager.updateUserInfo(getStore());
|
|
}
|
|
setState(() {});
|
|
}
|
|
|
|
@override
|
|
Widget buildContext(BuildContext context, {store}) {
|
|
return Scaffold(
|
|
appBar: CustomAppBar(
|
|
leading: Container(),
|
|
elevation: 0,
|
|
themeData: AppThemes.themeDataGrey.appBarTheme,
|
|
title: '会员权益',
|
|
),
|
|
// body: !_hasLoading ? _loading() :
|
|
body: RefreshWidget(
|
|
controller: _gsRefreshController,
|
|
onRefresh: () {
|
|
_getData();
|
|
},
|
|
body: ListView(
|
|
physics: AlwaysScrollableScrollPhysics(),
|
|
children: _bodyListWidget(context),
|
|
),
|
|
),
|
|
);
|
|
}
|
|
|
|
List<Widget> _bodyListWidget(context) {
|
|
List<Widget> listWidget = [];
|
|
if (_inviteCount > 0) {
|
|
listWidget.add(_hasInviteTitleWidget());
|
|
listWidget.add(_hasInviteContentWidget());
|
|
listWidget.add(GestureDetector(
|
|
onTap: () {
|
|
ShareTool().inviteShare(context, customTitle: Container());
|
|
},
|
|
child: _hasInviteButtonWidget(),
|
|
));
|
|
}
|
|
if (_inviteCount == 0) {
|
|
// listWidget.add(_imageBgWidgetS());
|
|
listWidget.add(_imageBgWidget());
|
|
listWidget.add(GestureDetector(
|
|
onTap: () {
|
|
ShareTool().inviteShare(context, customTitle: Container());
|
|
},
|
|
child: _buttonWidget(),
|
|
));
|
|
}
|
|
return listWidget;
|
|
}
|
|
|
|
// _imageBgWidgetS() {
|
|
// double width = MediaQuery.of(context).size.width;
|
|
// return Stack(
|
|
// children: [
|
|
// Positioned(
|
|
// top: rSize(1148),
|
|
// // right: 0,
|
|
// left: rSize(120),
|
|
// child: FlatButton(
|
|
// onPressed: () {
|
|
// showDialog(
|
|
// context: context,
|
|
// builder: (BuildContext context) {
|
|
// return Column(
|
|
// children: [
|
|
// Padding(
|
|
// padding: EdgeInsets.fromLTRB(
|
|
// rSize(28), rSize(36), rSize(28), 0),
|
|
// child: Image.asset(
|
|
// 'assets/memberBenefitsPage_dialog.jpg',
|
|
// fit: BoxFit.fill,
|
|
// ),
|
|
// ),
|
|
// rHBox(10),
|
|
// GestureDetector(
|
|
// onTap: () {
|
|
// Navigator.pop(context);
|
|
// },
|
|
// child: Icon(
|
|
// CupertinoIcons.clear_circled,
|
|
// color: Colors.grey,
|
|
// size: rSize(40),
|
|
// ),
|
|
// ),
|
|
// ],
|
|
// );
|
|
// });
|
|
// },
|
|
// child: Text(''),
|
|
// minWidth: rSize(150),
|
|
// height: rSize(35),
|
|
// ),
|
|
// ),
|
|
// Positioned(
|
|
// left: rSize(40),
|
|
// top: rSize(1200),
|
|
// child: FlatButton(
|
|
// onPressed: () {
|
|
// ShareTool().inviteShare(context, customTitle: Container());
|
|
// },
|
|
// child: Text(''),
|
|
// minWidth: rSize(300),
|
|
// height: rSize(70),
|
|
// ))
|
|
// ],
|
|
// );
|
|
// }
|
|
|
|
//TODO CLEAN BOTTOM CODES.
|
|
@Deprecated("member_benefits_page,_imageBgWidget")
|
|
_imageBgWidget() {
|
|
double width = MediaQuery.of(context).size.width;
|
|
double height = width / 750 * 1085;
|
|
return Container(
|
|
width: width,
|
|
height: height,
|
|
);
|
|
}
|
|
|
|
_buttonWidget() {
|
|
return Container(
|
|
width: MediaQuery.of(context).size.width,
|
|
decoration: BoxDecoration(
|
|
color: Color.fromARGB(255, 249, 139, 7),
|
|
borderRadius: BorderRadius.all(Radius.circular(10)),
|
|
boxShadow: [
|
|
BoxShadow(
|
|
color: Colors.black.withOpacity(0.3),
|
|
offset: Offset(3.0, 3.0),
|
|
blurRadius: 10.0,
|
|
spreadRadius: 2.0),
|
|
],
|
|
),
|
|
height: 45,
|
|
margin: EdgeInsets.symmetric(horizontal: 40, vertical: 15),
|
|
child: Container(
|
|
alignment: Alignment.center,
|
|
child: Text(
|
|
'马上去邀请',
|
|
style: TextStyle(
|
|
fontWeight: FontWeight.w500,
|
|
color: Colors.white,
|
|
fontSize: 17 * 2.sp,
|
|
),
|
|
),
|
|
));
|
|
}
|
|
|
|
_hasInviteTitleWidget() {
|
|
return Container(
|
|
height: 250,
|
|
color: Color(0xffc20f2f),
|
|
child: Column(
|
|
children: <Widget>[
|
|
_hasInviteUserInfoWidget(),
|
|
_hasInviteProgress(),
|
|
],
|
|
),
|
|
);
|
|
}
|
|
|
|
_hasInviteUserInfoWidget() {
|
|
String nickname = UserManager.instance.user.info.nickname;
|
|
if (TextUtils.isEmpty(nickname, whiteSpace: true)) {
|
|
String mobile = UserManager.instance.user.info.mobile;
|
|
nickname = "用户${mobile.substring(mobile.length - 4)}";
|
|
}
|
|
return Container(
|
|
height: 125,
|
|
padding: EdgeInsets.symmetric(horizontal: 16),
|
|
child: Row(
|
|
children: <Widget>[
|
|
Container(
|
|
width: 60,
|
|
height: 60,
|
|
decoration: BoxDecoration(
|
|
color: Colors.white,
|
|
borderRadius: BorderRadius.all(Radius.circular(30))),
|
|
child: CustomCacheImage(
|
|
borderRadius: BorderRadius.all(Radius.circular(30)),
|
|
fit: BoxFit.cover,
|
|
width: 60,
|
|
height: 60,
|
|
imageUrl:
|
|
TextUtils.isEmpty(UserManager.instance.user.info.headImgUrl)
|
|
? ""
|
|
: Api.getResizeImgUrl(
|
|
UserManager.instance.user.info.headImgUrl, 80),
|
|
),
|
|
),
|
|
Container(
|
|
width: 10,
|
|
),
|
|
Expanded(
|
|
child: Column(
|
|
mainAxisAlignment: MainAxisAlignment.center,
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
children: <Widget>[
|
|
Row(
|
|
children: <Widget>[
|
|
Text(
|
|
nickname,
|
|
style:
|
|
TextStyle(color: Colors.white, fontSize: 16 * 2.sp),
|
|
),
|
|
Container(
|
|
width: 10,
|
|
),
|
|
Container(
|
|
alignment: Alignment.center,
|
|
height: 20,
|
|
width: 70,
|
|
decoration: BoxDecoration(
|
|
color: AppColor.themeColor,
|
|
borderRadius: BorderRadius.circular(10)),
|
|
child: Text(
|
|
'普通会员',
|
|
style: TextStyle(
|
|
fontWeight: FontWeight.w400,
|
|
color: Colors.white,
|
|
fontSize: 12 * 2.sp),
|
|
),
|
|
),
|
|
Spacer(),
|
|
// Text('已邀请人数:${_inviteCount}', style: TextStyle(color: Colors.white, fontSize: 16*2.sp),),
|
|
],
|
|
),
|
|
Container(
|
|
child: Text(
|
|
'已邀请人数:$_inviteCount',
|
|
style: TextStyle(color: Colors.white, fontSize: 16 * 2.sp),
|
|
),
|
|
),
|
|
Row(
|
|
children: <Widget>[
|
|
Text(
|
|
'邀请码: ${UserManager.instance.user.info.invitationNo}',
|
|
style:
|
|
TextStyle(color: Colors.white, fontSize: 12 * 2.sp),
|
|
),
|
|
Container(
|
|
width: 10,
|
|
),
|
|
Container(
|
|
alignment: Alignment.center,
|
|
height: 16,
|
|
width: 40,
|
|
decoration: BoxDecoration(
|
|
color: Colors.white.withAlpha(100),
|
|
borderRadius: BorderRadius.circular(8)),
|
|
child: GestureDetector(
|
|
onTap: () {
|
|
ClipboardData data = new ClipboardData(
|
|
text: UserManager
|
|
.instance.user.info.invitationNo
|
|
.toString());
|
|
Clipboard.setData(data);
|
|
Toast.showSuccess('邀请码已经保存到剪贴板');
|
|
},
|
|
child: Text(
|
|
'复制',
|
|
style: TextStyle(
|
|
color: Colors.white, fontSize: 10 * 2.sp),
|
|
),
|
|
))
|
|
],
|
|
)
|
|
],
|
|
),
|
|
)
|
|
],
|
|
),
|
|
);
|
|
}
|
|
|
|
_hasInviteProgress() {
|
|
Color pinkColor = Color.fromARGB(255, 252, 208, 195);
|
|
Color deepPinkColor = Color.fromARGB(255, 250, 98, 101);
|
|
double progressWidth = MediaQuery.of(context).size.width - 20 - 20;
|
|
return Container(
|
|
width: MediaQuery.of(context).size.width - 20,
|
|
height: 105,
|
|
margin: EdgeInsets.symmetric(horizontal: 10, vertical: 10),
|
|
padding: EdgeInsets.symmetric(horizontal: 10, vertical: 10),
|
|
decoration: BoxDecoration(
|
|
borderRadius: BorderRadius.all(Radius.circular(10)),
|
|
color: Colors.white),
|
|
child: Column(
|
|
children: <Widget>[
|
|
Container(
|
|
alignment: Alignment.centerLeft,
|
|
child: Text(
|
|
'成长值: $_inviteCount',
|
|
style: TextStyle(
|
|
color: Colors.black.withOpacity(0.6), fontSize: 13 * 2.sp),
|
|
),
|
|
),
|
|
Container(
|
|
height: 7,
|
|
),
|
|
Stack(
|
|
children: <Widget>[
|
|
Container(
|
|
height: 14,
|
|
width: progressWidth,
|
|
decoration: BoxDecoration(
|
|
color: pinkColor,
|
|
borderRadius: BorderRadius.all(Radius.circular(7))),
|
|
),
|
|
Container(
|
|
height: 14,
|
|
width: progressWidth * _progressPercent(),
|
|
decoration: BoxDecoration(
|
|
color: deepPinkColor,
|
|
borderRadius: BorderRadius.all(Radius.circular(7))),
|
|
),
|
|
],
|
|
),
|
|
Container(
|
|
height: 5,
|
|
),
|
|
Container(
|
|
height: 33,
|
|
child: Row(
|
|
children: <Widget>[
|
|
Container(
|
|
width: 10,
|
|
),
|
|
Column(
|
|
children: <Widget>[
|
|
Image.asset(
|
|
'assets/pink_bottom_arrow.png',
|
|
width: 14,
|
|
height: 10,
|
|
),
|
|
Text(
|
|
'1人',
|
|
style: TextStyle(color: deepPinkColor),
|
|
)
|
|
],
|
|
),
|
|
Spacer(),
|
|
Column(
|
|
children: <Widget>[
|
|
Image.asset(
|
|
'assets/pink_bottom_arrow.png',
|
|
width: 14,
|
|
height: 10,
|
|
),
|
|
Text(
|
|
'3人',
|
|
style: TextStyle(color: deepPinkColor),
|
|
)
|
|
],
|
|
),
|
|
Spacer(),
|
|
Column(
|
|
children: <Widget>[
|
|
Image.asset(
|
|
'assets/pink_bottom_arrow.png',
|
|
width: 14,
|
|
height: 10,
|
|
),
|
|
Text(
|
|
'5人',
|
|
style: TextStyle(color: deepPinkColor),
|
|
)
|
|
],
|
|
),
|
|
Spacer(),
|
|
Column(
|
|
children: <Widget>[
|
|
Image.asset(
|
|
'assets/pink_bottom_arrow.png',
|
|
width: 14,
|
|
height: 10,
|
|
),
|
|
Text(
|
|
'10人以上',
|
|
style: TextStyle(color: deepPinkColor),
|
|
)
|
|
],
|
|
),
|
|
Container(
|
|
width: 7,
|
|
),
|
|
],
|
|
),
|
|
)
|
|
],
|
|
),
|
|
);
|
|
}
|
|
|
|
_hasInviteContentWidget() {
|
|
double width = MediaQuery.of(context).size.width;
|
|
double height = width / 750 * 578;
|
|
return Container(
|
|
height: height,
|
|
width: width,
|
|
);
|
|
}
|
|
|
|
_hasInviteButtonWidget() {
|
|
return Container(
|
|
width: MediaQuery.of(context).size.width,
|
|
decoration: BoxDecoration(
|
|
color: Color.fromARGB(255, 241, 88, 92),
|
|
borderRadius: BorderRadius.all(Radius.circular(10)),
|
|
),
|
|
height: 45,
|
|
margin: EdgeInsets.symmetric(horizontal: 40, vertical: 15),
|
|
child: Container(
|
|
alignment: Alignment.center,
|
|
child: Text(
|
|
'马上去邀请',
|
|
style: TextStyle(
|
|
fontWeight: FontWeight.w500,
|
|
color: Colors.white,
|
|
fontSize: 17 * 2.sp,
|
|
),
|
|
),
|
|
));
|
|
}
|
|
|
|
_getInviteCount() async {
|
|
ResultData resultData = await HttpManager.post(
|
|
UserApi.invite_count, {'userId': UserManager.instance.user.info.id});
|
|
if (!resultData.result) {
|
|
showError(resultData.msg);
|
|
return;
|
|
}
|
|
BaseModel model = BaseModel.fromJson(resultData.data);
|
|
if (model.code != HttpStatus.SUCCESS) {
|
|
showError(model.msg);
|
|
return;
|
|
}
|
|
_hasLoading = true;
|
|
if (resultData.data['data']['count'] != null &&
|
|
resultData.data['data']['count'] is int) {
|
|
_inviteCount = resultData.data['data']['count'];
|
|
}
|
|
if (resultData.data['data']['role'] != null &&
|
|
resultData.data['data']['role'] is int) {
|
|
// _inviteCount = resultData.data['data']['count'];
|
|
getStore().state.userBrief.roleLevel = resultData.data['data']['role'];
|
|
if (UserManager.instance.user.info.roleLevel !=
|
|
getStore().state.userBrief.roleLevel) {
|
|
UserManager.instance.user.info.roleLevel =
|
|
getStore().state.userBrief.roleLevel;
|
|
UserManager.instance.refreshUserRole.value =
|
|
!UserManager.instance.refreshUserRole.value;
|
|
UserManager.updateUserInfo(getStore());
|
|
}
|
|
}
|
|
setState(() {});
|
|
}
|
|
|
|
_progressPercent() {
|
|
switch (_inviteCount) {
|
|
case 0:
|
|
return 0;
|
|
break;
|
|
case 1:
|
|
return .1;
|
|
break;
|
|
case 2:
|
|
return .22;
|
|
break;
|
|
case 3:
|
|
return .35;
|
|
break;
|
|
case 4:
|
|
return .45;
|
|
break;
|
|
case 5:
|
|
return .6;
|
|
break;
|
|
case 6:
|
|
return 0.65;
|
|
break;
|
|
case 7:
|
|
return 0.7;
|
|
break;
|
|
case 8:
|
|
return 0.75;
|
|
break;
|
|
case 9:
|
|
return 0.85;
|
|
break;
|
|
case 10:
|
|
return 1;
|
|
break;
|
|
default:
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
_loading() {
|
|
return !_hasLoading
|
|
? Container(
|
|
decoration: BoxDecoration(color: Colors.white),
|
|
child: Center(
|
|
child: CircularProgressIndicator(
|
|
valueColor:
|
|
new AlwaysStoppedAnimation<Color>(getCurrentThemeColor()),
|
|
strokeWidth: 1.0,
|
|
),
|
|
),
|
|
)
|
|
: Container();
|
|
}
|
|
}
|