From e6a4e63c7db07007e3b57e9ac3bf524b83200861 Mon Sep 17 00:00:00 2001 From: Key Date: Sun, 2 Jul 2023 21:53:06 +0800 Subject: [PATCH] fixed: 修改个人信息性别 --- lib/common/core/app_consts.dart | 6 ++---- lib/common/core/assets_const.dart | 1 + lib/common/request/dao/user_dao.dart | 19 +++++++++++++++++++ lib/common/widgets/textfield_customer_widget.dart | 6 +++--- lib/pages/login/loginpage/login_page.dart | 3 +-- lib/pages/user/bloc/user_bloc.dart | 24 ++++++++++++++++++++---- lib/pages/user/modify/modify_user_information_page.dart | 58 +++++++++++++++++++++++++++++++++++++++++++++++++++------- 7 files changed, 97 insertions(+), 20 deletions(-) diff --git a/lib/common/core/app_consts.dart b/lib/common/core/app_consts.dart index 52b5cd3..3eacfa7 100644 --- a/lib/common/core/app_consts.dart +++ b/lib/common/core/app_consts.dart @@ -1,11 +1,9 @@ class AppConsts { /// 隐私协议 - static const String userPrivacyPolicyUrl = - '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'; + static const String userPrivacyPolicyUrl = 'http://page.kouyuxingqiu.com/wowenglishuserregister.html'; /// 儿童隐私协议 - static const String childrenPrivacyPolicyUrl = - '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'; + static const String childrenPrivacyPolicyUrl = 'http://page.kouyuxingqiu.com/wowenglishchildprotect.html'; /// 与第三方共享协议 static const String userTermSdkUrl = 'http://page.kouyuxingqiu.com/term_sdk.html'; diff --git a/lib/common/core/assets_const.dart b/lib/common/core/assets_const.dart index e078cda..8b41c30 100644 --- a/lib/common/core/assets_const.dart +++ b/lib/common/core/assets_const.dart @@ -5,6 +5,7 @@ class AssetsConst { static const String icNext = '${_assetImagePrefix}ic_next.png'; static const String bgUserInformationText = '${_assetImagePrefix}bg_user_information_text.png'; static const String bgEditUserInformation = '${_assetImagePrefix}bg_edit_information.png'; + static const String bgIcSteveWrite = '${_assetImagePrefix}bg_steve_write.png'; static const String bgButtonBlue = '${_assetImagePrefix}bg_button_blue.png'; static const String bgButtonBlueAccent = '${_assetImagePrefix}bg_button_blue_accent.png'; //static String get icVip2 =>'ic_vip.png'.assetImg; diff --git a/lib/common/request/dao/user_dao.dart b/lib/common/request/dao/user_dao.dart index 3e4c77a..6cdaa70 100644 --- a/lib/common/request/dao/user_dao.dart +++ b/lib/common/request/dao/user_dao.dart @@ -1,5 +1,6 @@ import 'package:wow_english/common/core/user_util.dart'; import 'package:wow_english/models/user_entity.dart'; +import 'package:wow_english/utils/log_util.dart'; import '../request_client.dart'; @@ -73,6 +74,24 @@ class UserDao { /// 更新用户信息,返回即成功,无body static Future updateUserInfo(UserEntity userEntity) async { + Log.d('updateUserInfo, userEntity: $userEntity'); return await requestClient.put(Apis.setUserInfo, data: userEntity.toUpdateJson()); } + + static Future updateUserInfoField({name, age, gender, avatarUrl}) async { + final Map data = {}; + if (name != null) { + data['name'] = name; + } + if (age != null) { + data['age'] = age; + } + if (gender != null) { + data['gender'] = gender; + } + if (avatarUrl != null) { + data['avatarUrl'] = avatarUrl; + } + return await requestClient.put(Apis.setUserInfo, data: data); + } } diff --git a/lib/common/widgets/textfield_customer_widget.dart b/lib/common/widgets/textfield_customer_widget.dart index 6a78c02..a435971 100644 --- a/lib/common/widgets/textfield_customer_widget.dart +++ b/lib/common/widgets/textfield_customer_widget.dart @@ -48,9 +48,9 @@ class _TextFieldCustomerWidgetState extends State { alignment: Alignment.center, decoration: BoxDecoration( image: DecorationImage( - image: AssetImage('${widget.bgImageName}'.assetPng), - fit: BoxFit.fill, - )), + image: AssetImage('${widget.bgImageName}'.assetPng), + fit: BoxFit.fill, + )), child: TextField( inputFormatters: widget.inputFormatters, controller: widget.controller, diff --git a/lib/pages/login/loginpage/login_page.dart b/lib/pages/login/loginpage/login_page.dart index e7eecaa..fa29f95 100644 --- a/lib/pages/login/loginpage/login_page.dart +++ b/lib/pages/login/loginpage/login_page.dart @@ -116,8 +116,7 @@ class _LoginPageView extends StatelessWidget { recognizer: TapGestureRecognizer() ..onTap = () { Navigator.of(context).pushNamed(AppRouteName.webView, arguments: { - 'urlStr': - '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', + 'urlStr': AppConsts.childrenPrivacyPolicyUrl, 'webViewTitle': '儿童隐私协议' }); }) diff --git a/lib/pages/user/bloc/user_bloc.dart b/lib/pages/user/bloc/user_bloc.dart index fcfe8af..d869498 100644 --- a/lib/pages/user/bloc/user_bloc.dart +++ b/lib/pages/user/bloc/user_bloc.dart @@ -29,18 +29,34 @@ class UserBloc extends Bloc { break; case ModifyUserInformationType.name: String name = modifyTextController.text; - user.name = name; try { - await UserDao.updateUserInfo(user); + await UserDao.updateUserInfoField(name: name); + // 修改成功,更新本地缓存及UI + user.name = name; emitter(UserInfoUpdated()); } catch (e) { - print(e); + Log.e('_updateUser name, e: $e'); } break; case ModifyUserInformationType.age: - String age = modifyTextController.text; + // todo 校验格式 + int age = modifyTextController.text as int; + try { + await UserDao.updateUserInfoField(age: age); + // 修改成功,更新本地缓存及UI + user.age = age; + emitter(UserInfoUpdated()); + } catch (e) { + Log.e('_updateUser age, e: $e'); + } break; case ModifyUserInformationType.gender: + try { + await UserDao.updateUserInfoField(gender: user.gender); + emitter(UserInfoUpdated()); + } catch (e) { + Log.e('_updateUser age, e: $e'); + } break; } } diff --git a/lib/pages/user/modify/modify_user_information_page.dart b/lib/pages/user/modify/modify_user_information_page.dart index 84ad26a..8b1f734 100644 --- a/lib/pages/user/modify/modify_user_information_page.dart +++ b/lib/pages/user/modify/modify_user_information_page.dart @@ -4,6 +4,7 @@ import 'package:flutter/services.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:wow_english/common/core/assets_const.dart'; +import 'package:wow_english/common/core/user_util.dart'; import 'package:wow_english/common/widgets/textfield_customer_widget.dart'; import 'package:wow_english/common/widgets/we_app_bar.dart'; import 'package:wow_english/pages/user/bloc/user_bloc.dart'; @@ -89,6 +90,20 @@ class ModifyUserInformationPage extends StatelessWidget { ) ], )), + Stack( + alignment: Alignment.topRight, + children: [ + Image.asset( + AssetsConst.bgEditUserInformation, + width: double.infinity, + ), + Positioned( + right: 125.w, + top: 10.h, + child: Image.asset(AssetsConst.bgIcSteveWrite, width: 161.w, height: 249.w), + ), + ], + ), ], )); }), @@ -98,28 +113,51 @@ class ModifyUserInformationPage extends StatelessWidget { } Widget _buildTextFieldWidget(BuildContext context) { + var userBloc = context.read(); + var user = UserUtil.getUser()!; + Log.d('user = $user'); if (type == ModifyUserInformationType.gender) { return Row( children: [ SizedBox( - width: 150, + width: 100.w, child: RadioListTile( - title: const Text('男'), + title: Text( + '男', + style: TextStyle( + fontWeight: FontWeight.w700, + color: const Color(0xFF333333), + fontSize: 21.sp, + ), + ), + activeColor: const Color(0xFF0E89BA), value: 0, - groupValue: type, + //selected: user.gender == 0, + groupValue: user.gender, onChanged: (value) { Log.d('男value = $value'); + user.gender = value as int; }, ), ), SizedBox( - width: 150, + width: 100.w, child: RadioListTile( - title: const Text('女'), + //selected: user.gender == 1, + title: Text( + '女', + style: TextStyle( + fontWeight: FontWeight.w700, + color: const Color(0xFF333333), + fontSize: 21.sp, + ), + ), + activeColor: const Color(0xFF0E89BA), value: 1, - groupValue: type, + groupValue: user.gender, onChanged: (value) { Log.d('女value = $value'); + user.gender = value as int; }, ), ), @@ -140,13 +178,19 @@ class ModifyUserInformationPage extends StatelessWidget { ]; inputType = TextInputType.number; } + return TextFieldCustomerWidget( height: 65.h, width: 222.w, + textStyle: TextStyle( + fontWeight: FontWeight.w700, + color: const Color(0xFF333333), + fontSize: 21.sp, + ), bgImageName: 'Input_layer_up', textInputType: inputType, inputFormatters: formatters, - controller: context.read().modifyTextController, + controller: userBloc.modifyTextController, /*onChangeValue: (String value) { bloc.add(CodeNumberChangeEvent()); },*/ -- libgit2 0.22.2