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.

375 lines
12 KiB

/*
* ====================================================
* package :
* author : Created by nansi.
* time : 2019-08-22 17:14
* remark :
* ====================================================
*/
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_datetime_picker/flutter_datetime_picker.dart';
import 'package:image_picker/image_picker.dart' as flutterImagePicker;
import 'package:oktoast/oktoast.dart';
import 'package:photo/photo.dart';
import 'package:velocity_x/velocity_x.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/manager/user_manager.dart';
import 'package:recook/models/media_model.dart';
import 'package:recook/pages/store/modify_info_page.dart';
import 'package:recook/pages/user/mvp/user_presenter_impl.dart';
import 'package:recook/utils/image_utils.dart';
import 'package:recook/utils/user_level_tool.dart';
import 'package:recook/widgets/bottom_sheet/action_sheet.dart';
import 'package:recook/widgets/custom_app_bar.dart';
import 'package:recook/widgets/custom_cache_image.dart';
import 'package:recook/widgets/image_picker.dart';
import 'package:recook/widgets/sc_tile.dart';
class UserInfoPage extends StatefulWidget {
@override
State<StatefulWidget> createState() {
return _UserInfoPageState();
}
}
class _UserInfoPageState extends BaseStoreState<UserInfoPage> {
UserPresenterImpl _presenter;
@override
Widget buildContext(BuildContext context, {store}) {
DPrint.printf("---------------------------------------- ");
return Scaffold(
appBar: CustomAppBar(
title: "个人信息",
themeData: AppThemes.themeDataGrey.appBarTheme,
),
body: _listView(),
backgroundColor: AppColor.frenchColor,
);
}
@override
void initState() {
super.initState();
_presenter = UserPresenterImpl();
}
_listView() {
String gender;
final String verified =
UserManager.instance.user.info.realInfoStatus ? "已经认证" : "未认证";
if (UserManager.instance.user.info.gender == 0) {
gender = "未填写";
} else {
gender = UserManager.instance.user.info.gender == 1 ? "" : "";
}
return ListView(
children: <Widget>[
SCTile.normalTile("头像",
margin: EdgeInsets.symmetric(vertical: rSize(10)),
trailing: CustomCacheImage(
borderRadius: BorderRadius.all(Radius.circular(80)),
height: rSize(60),
width: rSize(60),
imageUrl:
Api.getImgUrl(UserManager.instance.user.info.headImgUrl),
), listener: () {
_chooseHeader();
}),
SCTile.normalTile("昵称",
value: UserManager.instance.user.info.nickname,
needDivide: true, listener: () {
push(RouteName.MODIFY_DETAIL_PAGE,
arguments: ModifyInfoPage.setArguments(
"修改昵称", UserManager.instance.user.info.nickname,
maxLength: 10))
.then((value) {
if (value != null) {
_updateUserNickname(value);
}
});
}),
SCTile.normalTile(
"用户ID",
value: UserManager.instance.indentifier,
needDivide: true,
listener: null,
needArrow: false,
),
SCTile.normalTile("性别", value: gender, needDivide: true, listener: () {
ActionSheet.show(globalContext, items: ["", ""],
listener: (int index) {
pop();
_updateGender(index + 1);
});
}),
SCTile.normalTile("生日",
value: TextUtils.isEmpty(UserManager.instance.user.info.birthday)
? "未选择"
: UserManager.instance.user.info.birthday.substring(0, 10),
needDivide: true, listener: () {
DateTime currentTime = DateTime.now();
if (!TextUtils.isEmpty(UserManager.instance.user.info.birthday)) {
String birthday = UserManager.instance.user.info.birthday;
currentTime = DateTime(
int.parse(birthday.substring(0, 4)),
int.parse(birthday.substring(5, 7)),
int.parse(birthday.substring(8, 10)));
}
DatePicker.showDatePicker(globalContext,
showTitleActions: true,
theme: DatePickerTheme(
cancelStyle:
AppTextStyle.generate(15 * 2.sp, color: Colors.grey),
doneStyle: AppTextStyle.generate(15 * 2.sp,
color: AppColor.themeColor),
itemStyle: AppTextStyle.generate(15 * 2.sp)),
minTime: DateTime(1970, 01, 01),
maxTime: DateTime.now(),
currentTime: currentTime,
locale: LocaleType.zh, onConfirm: (DateTime date) {
String time = date.toString().split("-").join("");
_updateBirthday(time.substring(0, 8), date.toString());
});
}),
SCTile.normalTile("实名认证", value: verified, needDivide: true,
listener: () {
if (UserManager.instance.user.info.realInfoStatus) {
return;
}
AppRouter.push(
context,
RouteName.USER_VERIFY,
);
}),
// SCTile.normalTile("地址", value: UserManager.instance.user.info.addr, needDivide: true,
// listener: () {
// if (UserLevelTool.currentRoleLevelEnum() == UserRoleLevel.Master) {
// showError('店主无法修改地址!');
// return;
// }
// push(RouteName.USER_INFO_ADDRESS_PAGE,
// arguments:
// UserInfoAddressPage.setArguments("修改地址", UserManager.instance.user.info.addr, maxLength: 300))
// .then((value) {
// if (value != null) {
// _updateAddress(value);
// }
// });
// }),
SCTile.normalTile("手机号",
value: UserManager.instance.user.info.phone,
needDivide: true, listener: () {
push(RouteName.MODIFY_DETAIL_PAGE,
arguments: ModifyInfoPage.setArguments(
"修改手机号", UserManager.instance.user.info.phone,
maxLength: 11))
.then((value) {
if (value != null) {
_updatePhone(value);
}
});
}),
SCTile.normalTile("微信号",
value: UserManager.instance.user.info.wechatNo,
needDivide: true, listener: () {
push(RouteName.MODIFY_DETAIL_PAGE,
arguments: ModifyInfoPage.setArguments(
"修改微信号", UserManager.instance.user.info.wechatNo,
maxLength: 100))
.then((value) {
if (value != null) {
_updateWechatNo(value);
}
});
}),
(UserLevelTool.currentRoleLevelEnum() == UserRoleLevel.Diamond_1 ||
UserLevelTool.currentRoleLevelEnum() == UserRoleLevel.Vip ||
(Platform.isIOS)) &&
!AppConfig.showExtraCommission
? SizedBox()
: SCTile.normalTile("我的注册码", needDivide: true, listener: () {
push(RouteName.USER_INFO_QRCODE_PAGE);
}),
UserManager?.instance?.user?.info?.teacherWechatNo?.isEmpty ?? true
? SizedBox()
: SCTile.normalTile(
"我的服务商",
value: '',
needDivide: true,
needArrow: false,
trailing: Row(
children: [
(UserManager.instance.user.info.teacherWechatNo)
.text
.color(Color(0xFF666666))
.size(14.rsp)
.make(),
2.wb,
Icon(
Icons.copy,
size: 18.rsp,
color: Color(0xFF999999),
),
],
),
listener: () async {
await Clipboard.setData(
ClipboardData(
text: UserManager.instance.user.info.teacherWechatNo),
);
showToast('已经复制到粘贴板');
},
),
],
);
}
_chooseHeader() {
ActionSheet.show(context, items: ['拍照', '从手机相册选择'], listener: (index) {
ActionSheet.dismiss(context);
if (index == 0) {
ImagePicker.builder()
.pickImage(
source: flutterImagePicker.ImageSource.camera,
)
.then((MediaModel media) {
if (media == null) {
return;
}
_upload(media.file);
});
}
if (index == 1) {
ImagePicker.builder(maxSelected: 1, pickType: PickType.onlyImage)
.pickAsset(globalContext)
.then((List<MediaModel> medias) {
if (medias.length > 0) {
_upload(medias[0].file);
}
});
}
});
// ImagePicker.builder(maxSelected: 1).pickAsset(globalContext).then((List<MediaModel> medias) {
// if (medias.length > 0) {
// _upload(medias[0].file);
// }
// });
}
_upload(File file) async {
showLoading("");
File cropFile = await ImageUtils.cropImage(file);
if (cropFile == null) {
showError("已取消...");
return;
}
UploadResult result = await HttpManager.uploadFile(
url: CommonApi.upload, file: cropFile, key: "photo");
if (!result.result) {
showError(result.msg);
return;
}
HttpResultModel resultModel = await _presenter.updateHeaderPic(
UserManager.instance.user.info.id, result.url);
if (!resultModel.result) {
showError(resultModel.msg);
return;
}
dismissLoading();
setState(() {
UserManager.instance.user.info.headImgUrl = result.url;
});
UserManager.updateUserInfo(getStore());
}
_updateUserNickname(String nickname) async {
HttpResultModel resultModel = await _presenter.updateUserNickname(
UserManager.instance.user.info.id, nickname);
if (!resultModel.result) {
showError(resultModel.msg);
return;
}
setState(() {
UserManager.instance.user.info.nickname = nickname;
});
UserManager.updateUserInfo(getStore());
}
_updateBirthday(String birthday, String originBirth) async {
HttpResultModel resultModel = await _presenter.updateBirthday(
UserManager.instance.user.info.id, birthday);
if (!resultModel.result) {
showError(resultModel.msg);
return;
}
setState(() {
UserManager.instance.user.info.birthday = originBirth.substring(0, 10);
});
UserManager.updateUserInfo(getStore());
}
_updateGender(int gender) async {
HttpResultModel resultModel = await _presenter.updateGender(
UserManager.instance.user.info.id, gender);
if (!resultModel.result) {
showError(resultModel.msg);
return;
}
setState(() {
UserManager.instance.user.info.gender = gender;
});
UserManager.updateUserInfo(getStore());
}
_updateAddress(String address) async {
HttpResultModel resultModel = await _presenter.updateAddress(
UserManager.instance.user.info.id, address);
if (!resultModel.result) {
showError(resultModel.msg);
return;
}
setState(() {
UserManager.instance.user.info.addr = address;
});
UserManager.updateUserInfo(getStore());
}
_updateWechatNo(String wechatNo) async {
HttpResultModel resultModel = await _presenter.updateWechatNo(
UserManager.instance.user.info.id, wechatNo);
if (!resultModel.result) {
showError(resultModel.msg);
return;
}
setState(() {
UserManager.instance.user.info.wechatNo = wechatNo;
});
UserManager.updateUserInfo(getStore());
}
_updatePhone(String phone) async {
HttpResultModel resultModel =
await _presenter.updatePhone(UserManager.instance.user.info.id, phone);
if (!resultModel.result) {
showError(resultModel.msg);
return;
}
setState(() {
UserManager.instance.user.info.phone = phone;
});
UserManager.updateUserInfo(getStore());
}
}