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.

186 lines
6.4 KiB

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:url_launcher/url_launcher.dart';
import 'package:recook/base/base_store_state.dart';
import 'package:recook/constants/api.dart';
import 'package:recook/constants/header.dart';
import 'package:recook/manager/http_manager.dart';
import 'package:recook/models/base_model.dart';
import 'package:recook/models/invite_list_model.dart';
import 'package:recook/pages/store/modify_info_page.dart';
import 'package:recook/utils/user_level_tool.dart';
import 'package:recook/widgets/custom_app_bar.dart';
import 'package:recook/widgets/custom_cache_image.dart';
import 'package:recook/widgets/toast.dart';
class UserInviteDetail extends StatefulWidget {
final Map arguments;
UserInviteDetail({Key key, this.arguments}) : super(key: key);
static setArguments(InviteModel inviteModel) {
return {
"inviteModel": inviteModel,
};
}
@override
_UserInviteDetailState createState() => _UserInviteDetailState();
}
class _UserInviteDetailState extends BaseStoreState<UserInviteDetail> {
InviteModel _inviteModel;
@override
void initState() {
super.initState();
_inviteModel = widget.arguments["inviteModel"];
}
@override
Widget buildContext(BuildContext context, {store}) {
return Scaffold(
appBar: CustomAppBar(
title: "用户详情",
elevation: 1,
backEvent: (){
pop();
},),
backgroundColor: AppColor.frenchColor,
body: _body(),
);
}
_body(){
return ListView(
physics: AlwaysScrollableScrollPhysics(),
children: <Widget>[
_rowContainer("头像", headImage: true),
_rowContainer("角色", vip: true),
_rowContainer("昵称", subTitle: _inviteModel.nickname),
GestureDetector(
onTap: (){
push(RouteName.MODIFY_DETAIL_PAGE,
arguments:
ModifyInfoPage.setArguments("修改备注", _inviteModel.remarkName, maxLength: 7))
.then((value) {
if (value != null) {
_updateRemarkName(value);
}
});
},
child: _rowContainer("备注", subTitle: TextUtils.isEmpty(_inviteModel.remarkName)?"未设置":_inviteModel.remarkName, edit: true),
),
_rowContainer("注册时间", subTitle: _inviteModel.createdAt),
Container(height: 20,),
GestureDetector(
onTap: (){
if (!TextUtils.isEmpty(_inviteModel.phoneNum)) launch("tel:${_inviteModel.phoneNum}");
},
child: _rowContainer("手机号", subTitle: TextUtils.isEmpty(_inviteModel.phoneNum)?"未设置":_inviteModel.phoneNum, phone: true),
),
GestureDetector(
onTap: (){
if(TextUtils.isEmpty(_inviteModel.wechatNo)) return;
ClipboardData data = new ClipboardData(text:_inviteModel.wechatNo.toString());
Clipboard.setData(data);
Toast.showSuccess('微信号已经保存到剪贴板');
},
child: _rowContainer("微信号", subTitle: TextUtils.isEmpty(_inviteModel.wechatNo)?"未设置":_inviteModel.wechatNo, copy: !TextUtils.isEmpty(_inviteModel.wechatNo)),
),
],
);
}
_rowContainer(title, {bool headImage=false, bool vip = false, String subTitle = "", bool edit=false,bool copy=false,bool phone=false})
{
return Container(
height: 60, width: MediaQuery.of(context).size.width,
child: Stack(
children: <Widget>[
Positioned(
left: 0, right: 0, bottom: 0, top: 0,
child: Container(
padding: EdgeInsets.symmetric(horizontal: 16),
color: Colors.white,
height: 60,
child: Row(
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
Text(title, style: TextStyle(color: Colors.black,fontSize: 14 ),),
Spacer(),
headImage?
_imageView()
:vip?
UserLevelTool.roleLevelWidget(level: UserLevelTool.roleLevel(_inviteModel.roleLevel))
// UserIconWidget.levelWidget(_inviteModel.role)
:!TextUtils.isEmpty(subTitle)?
Text(subTitle, style: TextStyle(color: Colors.grey, fontSize: 14),)
:Container(),
edit?
Container(
margin: EdgeInsets.only(left: 10),
child: Image.asset("assets/user_invite_detail_edit.png", width: 14, height: 14,),)
:copy?
Container(
margin: EdgeInsets.only(left: 10),
child: Image.asset('assets/user_invite_detail_copy.png', width: 14, height: 14),)
: phone?
Container(
margin: EdgeInsets.only(left: 10),
child: Image.asset('assets/callphone.png', width: 14, height: 14),)
:Container(),
],
),
),
),
Positioned(
left: 0, right: 0, bottom: 0,
child: Container(
margin: EdgeInsets.symmetric(horizontal: 16),
height: 0.5,
color: Colors.grey.withOpacity(0.3),
),
),
],
),
);
}
_imageView() {
return Container( //头像
// margin: EdgeInsets.only(left: 12, right: 12, top: 7.5, bottom: 7.5),
width: 45, height: 45,
child: AspectRatio(
aspectRatio: 1,
child: ClipRRect(
borderRadius: BorderRadius.all(Radius.circular(22.5)),
child: CustomCacheImage(
fit: BoxFit.cover,
imageUrl: Api.getResizeImgUrl(_inviteModel.headImgUrl, 120),
placeholder: AppImageName.placeholder_1x1,
),),
),
);
}
_updateRemarkName(String name) async {
ResultData resultData = await HttpManager.post(UserApi.invite_remark_name, {
"userId": _inviteModel.userId,
"remarkName":name
});
if (!resultData.result) {
showError(resultData.msg);
return;
}
BaseModel model = BaseModel.fromJson(resultData.data);
if (model.code != HttpStatus.SUCCESS) {
showError(model.msg);
return;
}
_inviteModel.remarkName = name;
setState(() {});
}
}