Commit 6cfc527e by tanghuan

账号与安全中增加学生信息

1 parent c3934af4
......@@ -244,6 +244,9 @@ class LoginMainCubit extends Cubit<LoginMainState> {
var classCode = '';
var userType = 0;
var stuId = '';
var className = '';
var stuName = '';
var relation = '';
var sharedPreferences = getIt.get<SharedPreferences>();
......@@ -252,6 +255,9 @@ class LoginMainCubit extends Cubit<LoginMainState> {
classCode = role['classCode'];
userType = role['userType'];
stuId = role['stuId'];
className = role['className'];
stuName = role['stuName'];
relation = role['relation'] ?? '';
List<String> classIdList = [];
for (var role in roles) {
......@@ -295,6 +301,9 @@ class LoginMainCubit extends Cubit<LoginMainState> {
sharedPreferences.setString('auth_classCode', classCode);
sharedPreferences.setInt('auth_userType', userType);
sharedPreferences.setString('auth_stuId', stuId);
sharedPreferences.setString('auth_className', className);
sharedPreferences.setString('auth_stuName', stuName);
sharedPreferences.setString('auth_relation', relation);
debugPrint('loginType: ${state.loginType} appleUid: ${state.appleUserIdentifier}');
// 针对 Apple 登录
......
......@@ -157,6 +157,9 @@ class LoginPhoneCubit extends Cubit<LoginPhoneState> {
var classCode = '';
var userType = 0;
var stuId = '';
var className = '';
var stuName = '';
var relation = '';
var sharedPreferences = getIt.get<SharedPreferences>();
......@@ -165,6 +168,9 @@ class LoginPhoneCubit extends Cubit<LoginPhoneState> {
classCode = role['classCode'];
userType = role['userType'];
stuId = role['stuId'];
className = role['className'];
stuName = role['stuName'];
relation = role['relation'] ?? '';
// 将角色中的班级数据处理后,进行缓存
List<String> classIdList = [];
......@@ -211,6 +217,9 @@ class LoginPhoneCubit extends Cubit<LoginPhoneState> {
sharedPreferences.setString('auth_classCode', classCode);
sharedPreferences.setInt('auth_userType', userType);
sharedPreferences.setString('auth_stuId', stuId);
sharedPreferences.setString('auth_className', className);
sharedPreferences.setString('auth_stuName', stuName);
sharedPreferences.setString('auth_relation', relation);
router.go(
'/web',
......
......@@ -150,15 +150,26 @@ class LoginQrCubit extends Cubit<LoginQrState> {
}
var data = resultData['data'] as Map<String, dynamic>;
_handleLoginSuccess(data);
}
void _handleLoginSuccess(Map<String, dynamic> data) {
var roles = data['roles'];
// 过滤出家长角色的数据
if (roles?.isNotEmpty ?? false) {
roles.removeWhere((element) => element['userType'] != 2);
} else {
roles = [];
}
var sessionCode = data['sessionCode'];
var userCode = data['userCode'];
var classCode = '';
var userType = 0;
var stuId = '';
var className = '';
var stuName = '';
var relation = '';
var sharedPreferences = getIt.get<SharedPreferences>();
......@@ -167,6 +178,9 @@ class LoginQrCubit extends Cubit<LoginQrState> {
classCode = role['classCode'];
userType = role['userType'];
stuId = role['stuId'];
className = role['className'];
stuName = role['stuName'];
relation = role['relation'];
// 将角色中的班级数据处理后,进行缓存
List<String> classIdList = [];
......@@ -213,6 +227,9 @@ class LoginQrCubit extends Cubit<LoginQrState> {
sharedPreferences.setString('auth_classCode', classCode);
sharedPreferences.setInt('auth_userType', userType);
sharedPreferences.setString('auth_stuId', stuId);
sharedPreferences.setString('auth_className', className);
sharedPreferences.setString('auth_stuName', stuName);
sharedPreferences.setString('auth_relation', relation);
router.go(
'/web',
......
......@@ -12,12 +12,18 @@ class AccountState extends Equatable {
final String nickname;
final String imgIcon;
final String className;
final String stuName;
const AccountState({
this.loaded = false,
this.name = '',
this.phone = '',
this.nickname = '',
this.imgIcon = '',
this.className = '',
this.stuName = '',
});
AccountState copyWith({
......@@ -26,6 +32,8 @@ class AccountState extends Equatable {
String? phone,
String? nickname,
String? imgIcon,
String? className,
String? stuName,
}) {
return AccountState(
loaded: loaded ?? this.loaded,
......@@ -33,6 +41,8 @@ class AccountState extends Equatable {
phone: phone ?? this.phone,
nickname: nickname ?? this.nickname,
imgIcon: imgIcon ?? this.imgIcon,
className: className ?? this.className,
stuName: stuName ?? this.stuName,
);
}
......@@ -43,6 +53,8 @@ class AccountState extends Equatable {
phone,
nickname,
imgIcon,
className,
stuName,
];
}
......@@ -57,6 +69,8 @@ class AccountCubit extends Cubit<AccountState> {
Future<void> init() async {
var sharedPreferences = getIt.get<SharedPreferences>();
var userCode = sharedPreferences.getString('auth_userCode') ?? '';
var className = sharedPreferences.getString('auth_className') ?? '';
var stuName = sharedPreferences.getString('auth_stuName') ?? '';
try {
var result = await _phoneAuthRepository.bindCheck(userCode);
var code = result['code'];
......@@ -72,6 +86,8 @@ class AccountCubit extends Cubit<AccountState> {
phone: data['phone'],
nickname: data['nickname'],
imgIcon: data['imgIcon'],
className: className,
stuName: stuName,
),
);
} catch (e) {
......
......@@ -13,12 +13,18 @@ class RoleInfoHandler extends MessageHandler {
final String classCode = params['classCode'] as String;
final int userType = params['userType'] as int;
final String stuId = params['stuId'] as String ?? '';
final String className = params['className'] as String ?? '';
final String stuName = params['stuName'] as String ?? '';
final String relation = params['relation'] as String ?? '';
var sharedPreferences = getIt.get<SharedPreferences>();
sharedPreferences.setString('auth_userCode', userId);
sharedPreferences.setString('auth_classCode', classCode);
sharedPreferences.setInt('auth_userType', userType);
sharedPreferences.setString('auth_stuId', stuId);
sharedPreferences.setString('auth_className', className);
sharedPreferences.setString('auth_stuName', stuName);
sharedPreferences.setString('auth_relation', relation);
sharedPreferences.setString('pre_userCode', userId);
sharedPreferences.setString('pre_classCode', classCode);
......
......@@ -11,6 +11,41 @@ class AccountPage extends StatelessWidget {
create: (context) => AccountCubit(AccountState()),
child: BlocConsumer<AccountCubit, AccountState>(
builder: (context, state) {
var childInfoTable = (state.className.isNotEmpty && state.stuName.isNotEmpty)
? [
SizedBox(height: 24.0),
Align(
alignment: Alignment.centerLeft,
child: Padding(
padding: EdgeInsets.symmetric(horizontal: 4.0),
child: Text(
'孩子信息',
style: TextStyle(
fontSize: 12.0,
color: Colors.black87,
),
),
),
),
SizedBox(height: 8.0),
Container(
margin: EdgeInsets.symmetric(horizontal: 4.0),
decoration: BoxDecoration(
color: Color(0xFFF7F9FF),
borderRadius: BorderRadius.circular(8.0),
border: Border.all(color: Color(0xFFE0E6F7), width: 1),
),
child: Column(
children: [
_buildInfoRow('班级', state.className, Icons.school),
Divider(height: 1, color: Color(0xFFE0E6F7)),
_buildInfoRow('学生', state.stuName, Icons.person),
],
),
),
]
: [];
return Scaffold(
backgroundColor: Colors.white,
appBar: AppBar(
......@@ -45,6 +80,7 @@ class AccountPage extends StatelessWidget {
state.nickname,
style: TextStyle(fontSize: 12.0),
),
...childInfoTable,
],
),
),
......@@ -189,4 +225,40 @@ class AccountPage extends StatelessWidget {
),
);
}
Widget _buildInfoRow(String label, String value, IconData icon) {
return Padding(
padding: EdgeInsets.symmetric(horizontal: 16.0, vertical: 12.0),
child: Row(
children: [
Icon(
icon,
size: 18.0,
color: Color(0xFF7691FA),
),
SizedBox(width: 8.0),
SizedBox(
width: 60,
child: Text(
label,
style: TextStyle(
fontSize: 14.0,
color: Colors.grey[600],
fontWeight: FontWeight.w500,
),
),
),
Expanded(
child: Text(
value,
style: TextStyle(
fontSize: 14.0,
color: Colors.black87,
),
),
),
],
),
);
}
}
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!