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.
aku_new_community/lib/pages/personal/user_profile_page.dart

225 lines
7.1 KiB

// Dart imports:
import 'dart:io';
// Flutter imports:
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
// Package imports:
import 'package:bot_toast/bot_toast.dart';
import 'package:common_utils/common_utils.dart';
import 'package:get/get.dart';
import 'package:provider/provider.dart';
import 'package:velocity_x/velocity_x.dart';
// Project imports:
import 'package:akuCommunity/base/base_style.dart';
import 'package:akuCommunity/const/resource.dart';
import 'package:akuCommunity/constants/api.dart';
import 'package:akuCommunity/pages/personal/change_nick_name_page.dart';
import 'package:akuCommunity/pages/personal/update_tel_page.dart';
import 'package:akuCommunity/provider/user_provider.dart';
import 'package:akuCommunity/utils/headers.dart';
import 'package:akuCommunity/utils/network/base_file_model.dart';
import 'package:akuCommunity/utils/network/net_util.dart';
import 'package:akuCommunity/widget/bee_scaffold.dart';
import 'package:akuCommunity/widget/picker/bee_image_picker.dart';
class UserProfilePage extends StatefulWidget {
UserProfilePage({Key key}) : super(key: key);
@override
_UserProfilePageState createState() => _UserProfilePageState();
}
class _UserProfilePageState extends State<UserProfilePage> {
int _sex = 1;
DateTime _birthday = DateTime.now();
Widget _buildTile(String title, Widget suffix, {VoidCallback onPressed}) {
return MaterialButton(
color: Colors.white,
elevation: 0,
onPressed: onPressed,
height: 96.w,
materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
child: DefaultTextStyle(
style: TextStyle(
fontSize: 34.sp,
color: ktextPrimary,
),
child: Row(
children: [
32.wb,
title.text.make(),
Spacer(),
suffix ?? SizedBox(),
24.wb,
Icon(
CupertinoIcons.chevron_forward,
color: Color(0xFFDCDCDC),
size: 32.w,
),
16.wb,
],
),
),
);
}
_pickAvatar() async {
final userProvider = Provider.of<UserProvider>(context, listen: false);
File file = await BeeImagePicker.pick(title: '选择头像');
if (file == null)
return;
else {
//Upload Avatar
Function cancel = BotToast.showLoading();
BaseFileModel model =
await NetUtil().upload(API.upload.uploadAvatar, file);
if (model.status)
userProvider.updateAvatar(model.url);
else
BotToast.showText(text: model.message);
cancel();
}
}
@override
Widget build(BuildContext context) {
final userProvider = Provider.of<UserProvider>(context);
return BeeScaffold(
title: '个人资料',
body: ListView(
children: [
_buildTile(
'头像',
Hero(
tag: 'AVATAR',
child: ClipOval(
child: FadeInImage.assetNetwork(
placeholder: R.ASSETS_IMAGES_PLACEHOLDER_WEBP,
image: API.image(userProvider.userInfoModel.imgUrl),
height: 56.w,
width: 56.w,
),
),
),
onPressed: _pickAvatar,
),
_buildTile(
'姓名',
userProvider.userInfoModel.name.text.make(),
onPressed: () {},
),
_buildTile(
'昵称',
userProvider.userInfoModel.nickName.text.make(),
onPressed: () {
ChangeNickName().to();
},
),
_buildTile(
'手机号',
TextUtil.hideNumber(userProvider.userInfoModel.tel).text.make(),
onPressed: () {
UpdateTelPage().to();
},
),
_buildTile(
'性别',
userProvider.userInfoModel.sexValue.text.make(),
onPressed: () {
showCupertinoDialog(
context: context,
builder: (context) {
return CupertinoAlertDialog(
title: '请选择'.text.isIntrinsic.make(),
content: SizedBox(
child: CupertinoPicker(
itemExtent: 50,
onSelectedItemChanged: (index) {
_sex = index + 1;
},
children: [
''.text.isIntrinsic.make().centered(),
''.text.isIntrinsic.make().centered(),
],
useMagnifier: true,
),
height: 300.w,
),
actions: [
CupertinoDialogAction(
child: '取消'.text.isIntrinsic.make(),
onPressed: Get.back,
),
CupertinoDialogAction(
child: '确定'.text.isIntrinsic.make(),
onPressed: () {
userProvider.setSex(_sex);
Get.back();
},
),
],
);
},
);
},
),
_buildTile(
'出生日期',
userProvider.userInfoModel.birthdayValue.text.make(),
onPressed: () {
Get.dialog(
CupertinoAlertDialog(
title: '请选择'.text.isIntrinsic.make(),
content: SizedBox(
height: 340.w,
child: CupertinoTheme(
data: CupertinoThemeData(
textTheme: CupertinoTextThemeData(
dateTimePickerTextStyle: TextStyle(
fontSize: 30.sp,
color: Colors.black87,
),
),
),
child: CupertinoDatePicker(
maximumYear: DateTime.now().year,
minimumYear: 1900,
mode: CupertinoDatePickerMode.date,
onDateTimeChanged: (date) {
_birthday = date;
},
),
),
),
actions: [
CupertinoDialogAction(
child: '取消'.text.isIntrinsic.make(),
onPressed: Get.back,
),
CupertinoDialogAction(
child: '确定'.text.isIntrinsic.make(),
onPressed: () {
userProvider.setBirthday(_birthday);
Get.back();
},
),
],
),
);
},
),
].sepWidget(
separate: Divider(
indent: 104.w,
height: 1.w,
thickness: 1.w,
color: Color(0xFFEEEEEE),
)),
),
);
}
}