Commit e6a4e63c7db07007e3b57e9ac3bf524b83200861

Authored by Key
1 parent d4a7dfc4

fixed: 修改个人信息性别

lib/common/core/app_consts.dart
1 class AppConsts { 1 class AppConsts {
2 /// 隐私协议 2 /// 隐私协议
3 - static const String userPrivacyPolicyUrl =  
4 - 'http://page.kouyuxingqiu.com/%E7%94%A8%E6%88%B7%E6%B3%A8%E5%86%8C%E5%8F%8A%E4%BD%BF%E7%94%A8APP%E9%9A%90%E7%A7%81%E5%8D%8F%E8%AE%AE.html'; 3 + static const String userPrivacyPolicyUrl = 'http://page.kouyuxingqiu.com/wowenglishuserregister.html';
5 4
6 /// 儿童隐私协议 5 /// 儿童隐私协议
7 - static const String childrenPrivacyPolicyUrl =  
8 - 'https://ishowedu-public-images.ishowedu.com/%E5%8F%A3%E8%AF%AD%E6%98%9F%E7%90%83%E5%84%BF%E7%AB%A5%E9%9A%90%E7%A7%81%E4%BF%9D%E6%8A%A4%E6%94%BF%E7%AD%96_iShowLD%E4%BF%AE%E8%AE%A2_20210913%281%29.html'; 6 + static const String childrenPrivacyPolicyUrl = 'http://page.kouyuxingqiu.com/wowenglishchildprotect.html';
9 7
10 /// 与第三方共享协议 8 /// 与第三方共享协议
11 static const String userTermSdkUrl = 'http://page.kouyuxingqiu.com/term_sdk.html'; 9 static const String userTermSdkUrl = 'http://page.kouyuxingqiu.com/term_sdk.html';
lib/common/core/assets_const.dart
@@ -5,6 +5,7 @@ class AssetsConst { @@ -5,6 +5,7 @@ class AssetsConst {
5 static const String icNext = '${_assetImagePrefix}ic_next.png'; 5 static const String icNext = '${_assetImagePrefix}ic_next.png';
6 static const String bgUserInformationText = '${_assetImagePrefix}bg_user_information_text.png'; 6 static const String bgUserInformationText = '${_assetImagePrefix}bg_user_information_text.png';
7 static const String bgEditUserInformation = '${_assetImagePrefix}bg_edit_information.png'; 7 static const String bgEditUserInformation = '${_assetImagePrefix}bg_edit_information.png';
  8 + static const String bgIcSteveWrite = '${_assetImagePrefix}bg_steve_write.png';
8 static const String bgButtonBlue = '${_assetImagePrefix}bg_button_blue.png'; 9 static const String bgButtonBlue = '${_assetImagePrefix}bg_button_blue.png';
9 static const String bgButtonBlueAccent = '${_assetImagePrefix}bg_button_blue_accent.png'; 10 static const String bgButtonBlueAccent = '${_assetImagePrefix}bg_button_blue_accent.png';
10 //static String get icVip2 =>'ic_vip.png'.assetImg; 11 //static String get icVip2 =>'ic_vip.png'.assetImg;
lib/common/request/dao/user_dao.dart
1 import 'package:wow_english/common/core/user_util.dart'; 1 import 'package:wow_english/common/core/user_util.dart';
2 import 'package:wow_english/models/user_entity.dart'; 2 import 'package:wow_english/models/user_entity.dart';
  3 +import 'package:wow_english/utils/log_util.dart';
3 4
4 import '../request_client.dart'; 5 import '../request_client.dart';
5 6
@@ -73,6 +74,24 @@ class UserDao { @@ -73,6 +74,24 @@ class UserDao {
73 74
74 /// 更新用户信息,返回即成功,无body 75 /// 更新用户信息,返回即成功,无body
75 static Future updateUserInfo(UserEntity userEntity) async { 76 static Future updateUserInfo(UserEntity userEntity) async {
  77 + Log.d('updateUserInfo, userEntity: $userEntity');
76 return await requestClient.put(Apis.setUserInfo, data: userEntity.toUpdateJson()); 78 return await requestClient.put(Apis.setUserInfo, data: userEntity.toUpdateJson());
77 } 79 }
  80 +
  81 + static Future updateUserInfoField({name, age, gender, avatarUrl}) async {
  82 + final Map<String, dynamic> data = <String, dynamic>{};
  83 + if (name != null) {
  84 + data['name'] = name;
  85 + }
  86 + if (age != null) {
  87 + data['age'] = age;
  88 + }
  89 + if (gender != null) {
  90 + data['gender'] = gender;
  91 + }
  92 + if (avatarUrl != null) {
  93 + data['avatarUrl'] = avatarUrl;
  94 + }
  95 + return await requestClient.put(Apis.setUserInfo, data: data);
  96 + }
78 } 97 }
lib/common/widgets/textfield_customer_widget.dart
@@ -48,9 +48,9 @@ class _TextFieldCustomerWidgetState extends State&lt;TextFieldCustomerWidget&gt; { @@ -48,9 +48,9 @@ class _TextFieldCustomerWidgetState extends State&lt;TextFieldCustomerWidget&gt; {
48 alignment: Alignment.center, 48 alignment: Alignment.center,
49 decoration: BoxDecoration( 49 decoration: BoxDecoration(
50 image: DecorationImage( 50 image: DecorationImage(
51 - image: AssetImage('${widget.bgImageName}'.assetPng),  
52 - fit: BoxFit.fill,  
53 - )), 51 + image: AssetImage('${widget.bgImageName}'.assetPng),
  52 + fit: BoxFit.fill,
  53 + )),
54 child: TextField( 54 child: TextField(
55 inputFormatters: widget.inputFormatters, 55 inputFormatters: widget.inputFormatters,
56 controller: widget.controller, 56 controller: widget.controller,
lib/pages/login/loginpage/login_page.dart
@@ -116,8 +116,7 @@ class _LoginPageView extends StatelessWidget { @@ -116,8 +116,7 @@ class _LoginPageView extends StatelessWidget {
116 recognizer: TapGestureRecognizer() 116 recognizer: TapGestureRecognizer()
117 ..onTap = () { 117 ..onTap = () {
118 Navigator.of(context).pushNamed(AppRouteName.webView, arguments: { 118 Navigator.of(context).pushNamed(AppRouteName.webView, arguments: {
119 - 'urlStr':  
120 - 'https://ishowedu-public-images.ishowedu.com/%E5%8F%A3%E8%AF%AD%E6%98%9F%E7%90%83%E5%84%BF%E7%AB%A5%E9%9A%90%E7%A7%81%E4%BF%9D%E6%8A%A4%E6%94%BF%E7%AD%96_iShowLD%E4%BF%AE%E8%AE%A2_20210913%281%29.html', 119 + 'urlStr': AppConsts.childrenPrivacyPolicyUrl,
121 'webViewTitle': '儿童隐私协议' 120 'webViewTitle': '儿童隐私协议'
122 }); 121 });
123 }) 122 })
lib/pages/user/bloc/user_bloc.dart
@@ -29,18 +29,34 @@ class UserBloc extends Bloc&lt;UserEvent, UserState&gt; { @@ -29,18 +29,34 @@ class UserBloc extends Bloc&lt;UserEvent, UserState&gt; {
29 break; 29 break;
30 case ModifyUserInformationType.name: 30 case ModifyUserInformationType.name:
31 String name = modifyTextController.text; 31 String name = modifyTextController.text;
32 - user.name = name;  
33 try { 32 try {
34 - await UserDao.updateUserInfo(user); 33 + await UserDao.updateUserInfoField(name: name);
  34 + // 修改成功,更新本地缓存及UI
  35 + user.name = name;
35 emitter(UserInfoUpdated()); 36 emitter(UserInfoUpdated());
36 } catch (e) { 37 } catch (e) {
37 - print(e); 38 + Log.e('_updateUser name, e: $e');
38 } 39 }
39 break; 40 break;
40 case ModifyUserInformationType.age: 41 case ModifyUserInformationType.age:
41 - String age = modifyTextController.text; 42 + // todo 校验格式
  43 + int age = modifyTextController.text as int;
  44 + try {
  45 + await UserDao.updateUserInfoField(age: age);
  46 + // 修改成功,更新本地缓存及UI
  47 + user.age = age;
  48 + emitter(UserInfoUpdated());
  49 + } catch (e) {
  50 + Log.e('_updateUser age, e: $e');
  51 + }
42 break; 52 break;
43 case ModifyUserInformationType.gender: 53 case ModifyUserInformationType.gender:
  54 + try {
  55 + await UserDao.updateUserInfoField(gender: user.gender);
  56 + emitter(UserInfoUpdated());
  57 + } catch (e) {
  58 + Log.e('_updateUser age, e: $e');
  59 + }
44 break; 60 break;
45 } 61 }
46 } 62 }
lib/pages/user/modify/modify_user_information_page.dart
@@ -4,6 +4,7 @@ import &#39;package:flutter/services.dart&#39;; @@ -4,6 +4,7 @@ import &#39;package:flutter/services.dart&#39;;
4 import 'package:flutter_bloc/flutter_bloc.dart'; 4 import 'package:flutter_bloc/flutter_bloc.dart';
5 import 'package:flutter_screenutil/flutter_screenutil.dart'; 5 import 'package:flutter_screenutil/flutter_screenutil.dart';
6 import 'package:wow_english/common/core/assets_const.dart'; 6 import 'package:wow_english/common/core/assets_const.dart';
  7 +import 'package:wow_english/common/core/user_util.dart';
7 import 'package:wow_english/common/widgets/textfield_customer_widget.dart'; 8 import 'package:wow_english/common/widgets/textfield_customer_widget.dart';
8 import 'package:wow_english/common/widgets/we_app_bar.dart'; 9 import 'package:wow_english/common/widgets/we_app_bar.dart';
9 import 'package:wow_english/pages/user/bloc/user_bloc.dart'; 10 import 'package:wow_english/pages/user/bloc/user_bloc.dart';
@@ -89,6 +90,20 @@ class ModifyUserInformationPage extends StatelessWidget { @@ -89,6 +90,20 @@ class ModifyUserInformationPage extends StatelessWidget {
89 ) 90 )
90 ], 91 ],
91 )), 92 )),
  93 + Stack(
  94 + alignment: Alignment.topRight,
  95 + children: [
  96 + Image.asset(
  97 + AssetsConst.bgEditUserInformation,
  98 + width: double.infinity,
  99 + ),
  100 + Positioned(
  101 + right: 125.w,
  102 + top: 10.h,
  103 + child: Image.asset(AssetsConst.bgIcSteveWrite, width: 161.w, height: 249.w),
  104 + ),
  105 + ],
  106 + ),
92 ], 107 ],
93 )); 108 ));
94 }), 109 }),
@@ -98,28 +113,51 @@ class ModifyUserInformationPage extends StatelessWidget { @@ -98,28 +113,51 @@ class ModifyUserInformationPage extends StatelessWidget {
98 } 113 }
99 114
100 Widget _buildTextFieldWidget(BuildContext context) { 115 Widget _buildTextFieldWidget(BuildContext context) {
  116 + var userBloc = context.read<UserBloc>();
  117 + var user = UserUtil.getUser()!;
  118 + Log.d('user = $user');
101 if (type == ModifyUserInformationType.gender) { 119 if (type == ModifyUserInformationType.gender) {
102 return Row( 120 return Row(
103 children: <Widget>[ 121 children: <Widget>[
104 SizedBox( 122 SizedBox(
105 - width: 150, 123 + width: 100.w,
106 child: RadioListTile( 124 child: RadioListTile(
107 - title: const Text('男'), 125 + title: Text(
  126 + '男',
  127 + style: TextStyle(
  128 + fontWeight: FontWeight.w700,
  129 + color: const Color(0xFF333333),
  130 + fontSize: 21.sp,
  131 + ),
  132 + ),
  133 + activeColor: const Color(0xFF0E89BA),
108 value: 0, 134 value: 0,
109 - groupValue: type, 135 + //selected: user.gender == 0,
  136 + groupValue: user.gender,
110 onChanged: (value) { 137 onChanged: (value) {
111 Log.d('男value = $value'); 138 Log.d('男value = $value');
  139 + user.gender = value as int;
112 }, 140 },
113 ), 141 ),
114 ), 142 ),
115 SizedBox( 143 SizedBox(
116 - width: 150, 144 + width: 100.w,
117 child: RadioListTile( 145 child: RadioListTile(
118 - title: const Text('女'), 146 + //selected: user.gender == 1,
  147 + title: Text(
  148 + '女',
  149 + style: TextStyle(
  150 + fontWeight: FontWeight.w700,
  151 + color: const Color(0xFF333333),
  152 + fontSize: 21.sp,
  153 + ),
  154 + ),
  155 + activeColor: const Color(0xFF0E89BA),
119 value: 1, 156 value: 1,
120 - groupValue: type, 157 + groupValue: user.gender,
121 onChanged: (value) { 158 onChanged: (value) {
122 Log.d('女value = $value'); 159 Log.d('女value = $value');
  160 + user.gender = value as int;
123 }, 161 },
124 ), 162 ),
125 ), 163 ),
@@ -140,13 +178,19 @@ class ModifyUserInformationPage extends StatelessWidget { @@ -140,13 +178,19 @@ class ModifyUserInformationPage extends StatelessWidget {
140 ]; 178 ];
141 inputType = TextInputType.number; 179 inputType = TextInputType.number;
142 } 180 }
  181 +
143 return TextFieldCustomerWidget( 182 return TextFieldCustomerWidget(
144 height: 65.h, 183 height: 65.h,
145 width: 222.w, 184 width: 222.w,
  185 + textStyle: TextStyle(
  186 + fontWeight: FontWeight.w700,
  187 + color: const Color(0xFF333333),
  188 + fontSize: 21.sp,
  189 + ),
146 bgImageName: 'Input_layer_up', 190 bgImageName: 'Input_layer_up',
147 textInputType: inputType, 191 textInputType: inputType,
148 inputFormatters: formatters, 192 inputFormatters: formatters,
149 - controller: context.read<UserBloc>().modifyTextController, 193 + controller: userBloc.modifyTextController,
150 /*onChangeValue: (String value) { 194 /*onChangeValue: (String value) {
151 bloc.add(CodeNumberChangeEvent()); 195 bloc.add(CodeNumberChangeEvent());
152 },*/ 196 },*/