Commit b0ebbacd by tanghuan

账号与安全中提示绑定孩子信息

1 parent 6cfc527e
......@@ -12,9 +12,13 @@ class AccountState extends Equatable {
final String nickname;
final String imgIcon;
// 孩子信息
final String className;
final String stuName;
// 是否绑定孩子
final bool bindStu;
const AccountState({
this.loaded = false,
this.name = '',
......@@ -23,7 +27,7 @@ class AccountState extends Equatable {
this.imgIcon = '',
this.className = '',
this.stuName = '',
this.bindStu = true,
});
AccountState copyWith({
......@@ -34,6 +38,7 @@ class AccountState extends Equatable {
String? imgIcon,
String? className,
String? stuName,
bool? bindStu,
}) {
return AccountState(
loaded: loaded ?? this.loaded,
......@@ -43,6 +48,7 @@ class AccountState extends Equatable {
imgIcon: imgIcon ?? this.imgIcon,
className: className ?? this.className,
stuName: stuName ?? this.stuName,
bindStu: bindStu ?? this.bindStu,
);
}
......@@ -55,6 +61,7 @@ class AccountState extends Equatable {
imgIcon,
className,
stuName,
bindStu,
];
}
......@@ -76,6 +83,7 @@ class AccountCubit extends Cubit<AccountState> {
var code = result['code'];
var data = result['data'];
if (code != 0) {
emit(state.copyWith(loaded: true, bindStu: false));
return;
}
......
......@@ -57,158 +57,170 @@ class AccountPage extends StatelessWidget {
),
),
body: state.loaded
? Column(
children: [
// 用户头像和昵称部分
Container(
padding: EdgeInsets.all(16.0),
child: Column(
children: [
CircleAvatar(
radius: 26.0,
backgroundImage: NetworkImage(state.imgIcon),
),
SizedBox(height: 16.0),
Text(
state.name,
style: TextStyle(
fontSize: 18.0,
fontWeight: FontWeight.bold,
),
),
Text(
state.nickname,
style: TextStyle(fontSize: 12.0),
),
...childInfoTable,
],
),
),
// 设置项列表
Expanded(
child: Padding(
padding: EdgeInsets.all(20),
child: ListView(
children: [
Card(
color: Color(0xFFF7F9FF),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(6),
? (state.bindStu
? Column(
children: [
// 用户头像和昵称部分
Container(
padding: EdgeInsets.all(16.0),
child: Column(
children: [
CircleAvatar(
radius: 26.0,
backgroundImage: NetworkImage(state.imgIcon),
),
child: ListTile(
leading: Icon(Icons.person),
title: Text('用户信息设置'),
subtitle: Text(
'点击设置用户信息',
style: TextStyle(
fontSize: 14.0,
color: Colors.grey,
),
SizedBox(height: 16.0),
Text(
state.name,
style: TextStyle(
fontSize: 18.0,
fontWeight: FontWeight.bold,
),
trailing: Icon(Icons.arrow_forward_ios, size: 14),
onTap: () {
context.read<AccountCubit>().goSetUserInfo();
},
),
),
Card(
color: Color(0xFFF7F9FF),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(6),
Text(
state.nickname,
style: TextStyle(fontSize: 12.0),
),
child: ListTile(
leading: Icon(Icons.mobile_friendly),
title: Text('手机号绑定'),
subtitle: Text(
state.phone != ''
? '${state.phone.substring(0, 3)}****${state.phone.substring(7, 11)}'
: '未绑定',
style: TextStyle(
fontSize: 14.0,
color: Colors.grey,
...childInfoTable,
],
),
),
// 设置项列表
Expanded(
child: Padding(
padding: EdgeInsets.all(20),
child: ListView(
children: [
Card(
color: Color(0xFFF7F9FF),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(6),
),
child: ListTile(
leading: Icon(Icons.person),
title: Text('用户信息设置'),
subtitle: Text(
'点击设置用户信息',
style: TextStyle(
fontSize: 14.0,
color: Colors.grey,
),
),
trailing: Icon(Icons.arrow_forward_ios, size: 14),
onTap: () {
context.read<AccountCubit>().goSetUserInfo();
},
),
),
trailing: Icon(Icons.arrow_forward_ios, size: 14),
onTap: () {
context.read<AccountCubit>().goBind();
},
),
),
SizedBox(height: 16),
Padding(
padding: EdgeInsets.all(80),
child: SizedBox(
width: double.infinity,
height: 47,
child: ElevatedButton(
onPressed: () async {
// 判断是否有绑定手机号
if (state.phone != '') {
context.read<AccountCubit>().goLogoff();
return;
}
Card(
color: Color(0xFFF7F9FF),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(6),
),
child: ListTile(
leading: Icon(Icons.mobile_friendly),
title: Text('手机号绑定'),
subtitle: Text(
state.phone != ''
? '${state.phone.substring(0, 3)}****${state.phone.substring(7, 11)}'
: '未绑定',
style: TextStyle(
fontSize: 14.0,
color: Colors.grey,
),
),
trailing: Icon(Icons.arrow_forward_ios, size: 14),
onTap: () {
context.read<AccountCubit>().goBind();
},
),
),
SizedBox(height: 16),
Padding(
padding: EdgeInsets.all(80),
child: SizedBox(
width: double.infinity,
height: 47,
child: ElevatedButton(
onPressed: () async {
// 判断是否有绑定手机号
if (state.phone != '') {
context.read<AccountCubit>().goLogoff();
return;
}
final accountCubit = context.read<AccountCubit>();
bool? confirm = await showDialog<bool>(
context: context,
builder: (BuildContext ctx) {
return AlertDialog(
title: Text('确认注销'),
content: Text('您确定要注销当前用户吗?'),
actions: [
TextButton(
onPressed: () {
Navigator.of(ctx).pop(false);
},
child: Text('取消'),
),
TextButton(
onPressed: () {
Navigator.of(ctx).pop(true);
},
child: Text('确认'),
),
],
final accountCubit = context.read<AccountCubit>();
bool? confirm = await showDialog<bool>(
context: context,
builder: (BuildContext ctx) {
return AlertDialog(
title: Text('确认注销'),
content: Text('您确定要注销当前用户吗?'),
actions: [
TextButton(
onPressed: () {
Navigator.of(ctx).pop(false);
},
child: Text('取消'),
),
TextButton(
onPressed: () {
Navigator.of(ctx).pop(true);
},
child: Text('确认'),
),
],
);
},
);
},
);
if (confirm == true) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text('已申请注销,等待流程处理'),
backgroundColor: Colors.green,
if (confirm == true) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text('已申请注销,等待流程处理'),
backgroundColor: Colors.green,
),
);
accountCubit.unbind();
}
},
style: ElevatedButton.styleFrom(
backgroundColor: Color(0xFFE74C3C),
foregroundColor: Colors.white,
textStyle: TextStyle(fontSize: 19),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(23.5),
),
);
accountCubit.unbind();
}
},
style: ElevatedButton.styleFrom(
backgroundColor: Color(0xFFE74C3C),
foregroundColor: Colors.white,
textStyle: TextStyle(fontSize: 19),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(23.5),
),
),
child: Text(
'注销用户',
style: TextStyle(
fontSize: 19,
fontWeight: FontWeight.w400,
color: Color(0xFFFFFFFF),
),
child: Text(
'注销用户',
style: TextStyle(
fontSize: 19,
fontWeight: FontWeight.w400,
color: Color(0xFFFFFFFF),
),
strutStyle: StrutStyle(height: 22 / 19),
),
),
strutStyle: StrutStyle(height: 22 / 19),
),
),
),
],
),
],
),
),
],
)
: Container(
alignment: Alignment(0, -0.6),
child: Text(
'暂未关联孩子信息\n\n请在首页操作绑定孩子信息',
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 16.0,
color: Colors.grey,
),
),
),
],
)
))
: const Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!