diff --git a/lib/pages/user/bloc/user_bloc.dart b/lib/pages/user/bloc/user_bloc.dart index 4eec9f5..d83e3b5 100644 --- a/lib/pages/user/bloc/user_bloc.dart +++ b/lib/pages/user/bloc/user_bloc.dart @@ -37,6 +37,15 @@ class UserBloc extends Bloc { UserEntity user = UserUtil.getUser()!; switch (event.type) { case ModifyUserInformationType.avatar: + String avatarUrl = event.content; + try { + await UserDao.updateUserInfoField(avatarUrl: avatarUrl); + // 修改成功,更新本地缓存及UI + user.avatarUrl = avatarUrl; + emitter(UserInfoUpdated()); + } catch (e) { + Log.e('_updateUser avatarUrl, e: $e'); + } break; case ModifyUserInformationType.name: String name = event.content; diff --git a/lib/pages/user/information/user_information_page.dart b/lib/pages/user/information/user_information_page.dart index 3f2b2fd..cbce0c7 100644 --- a/lib/pages/user/information/user_information_page.dart +++ b/lib/pages/user/information/user_information_page.dart @@ -54,7 +54,7 @@ class _UserInformationContentView extends StatelessWidget { backgroundImage: ImageUtil.getImageProviderOnDefault(user.avatarUrl), ), ), - onTap: () => pushNamed(AppRouteName.userAvatar) + onTap: () => pushNamed(AppRouteName.userAvatar,arguments: {'pageType':'1'}) ), 11.verticalSpace, _buildContentRow( diff --git a/lib/pages/user/modify/modify_user_avatar_page.dart b/lib/pages/user/modify/modify_user_avatar_page.dart index 350db78..3c405ed 100644 --- a/lib/pages/user/modify/modify_user_avatar_page.dart +++ b/lib/pages/user/modify/modify_user_avatar_page.dart @@ -8,8 +8,11 @@ import 'package:wow_english/common/widgets/ow_image_widget.dart'; import 'package:wow_english/common/widgets/we_app_bar.dart'; import 'package:wow_english/pages/user/bloc/user_bloc.dart'; import 'package:wow_english/pages/user/modify/user_avatar_bloc/user_avatar_bloc.dart'; +import 'package:wow_english/route/route.dart'; import 'package:wow_english/utils/toast_util.dart'; +import 'modify_user_information_page.dart'; + class ModifyUserAvatarPage extends StatelessWidget { const ModifyUserAvatarPage({super.key, required this.pageType}); @@ -36,13 +39,18 @@ class _ModifyUserAvatarPage extends StatelessWidget { BlocListener( listener: (context, state){ if (state is UserInfoUpdated) { - showToast('修改成功'); + if (pageType == 1) { + showToast('修改成功'); + popPage(); + } else { + context.read().add(ChangeUserEnterAppStateEvent()); + } } }), BlocListener( listener: (context,state){ if (state is ChangeImageState) { - showToast('上传图片'); + context.read().add(UserUpdate(ModifyUserInformationType.avatar,state.imageUrl)); } },) ], diff --git a/lib/pages/user/modify/user_avatar_bloc/user_avatar_bloc.dart b/lib/pages/user/modify/user_avatar_bloc/user_avatar_bloc.dart index 213d466..9347a7e 100644 --- a/lib/pages/user/modify/user_avatar_bloc/user_avatar_bloc.dart +++ b/lib/pages/user/modify/user_avatar_bloc/user_avatar_bloc.dart @@ -1,5 +1,6 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:image_picker/image_picker.dart'; import 'package:permission_handler/permission_handler.dart'; import 'package:wow_english/common/core/assets_const.dart'; @@ -12,7 +13,7 @@ part 'user_avatar_event.dart'; part 'user_avatar_state.dart'; class UserAvatarBloc extends Bloc { - String _imageUrl = UserUtil.getUser()!.avatarUrl ?? AssetsConst.wowLogo; + final String _imageUrl = UserUtil.getUser()!.avatarUrl ?? AssetsConst.wowLogo; String get imageUrl => _imageUrl; @@ -27,27 +28,18 @@ class UserAvatarBloc extends Bloc { final ImagePicker picker = ImagePicker(); UserAvatarBloc() : super(UserAvatarInitial()) { - on(_changeImage); on(_getImageFromPhoto); on(_getImageFromCamera); + on(_changeUserEnterAppState); } - Future _uploadAvatar(String imagePath) async { + Future _uploadAvatar(String imagePath) async { // todo 加个loading UI String avatarUrl = await AliyunOssUtil.uploadFile(imagePath); + debugPrint('>>>>>>>>>>阿里云图片地址$avatarUrl'); // 上传服务器 - await UserDao.updateUserInfoField(avatarUrl: avatarUrl); - _imageUrl = avatarUrl; - } - - void _changeImage(ChangeImageEvent event, Emitter emitter) async { - //_imageUrl = event.imagePath; - try { - await _uploadAvatar(event.imagePath); - emitter(ChangeImageState()); - } catch (e) { - Log.e('上传头像失败:$e'); - } + // await UserDao.updateUserInfoField(avatarUrl: avatarUrl); + return avatarUrl; } void _getImageFromPhoto(GetImageFromPhotoEvent event, Emitter emitter) async { @@ -58,12 +50,11 @@ class UserAvatarBloc extends Bloc { } _file = await picker.pickImage(source: ImageSource.gallery); try { - await _uploadAvatar(_file!.path); - emitter(ChangeImageState()); + final urlStr = await _uploadAvatar(_file!.path); + emitter(ChangeImageState(urlStr)); } catch (e) { Log.e('上传头像失败:$e'); } - //emitter(ChangeImageState()); }); } @@ -75,8 +66,8 @@ class UserAvatarBloc extends Bloc { } _file = await picker.pickImage(source: ImageSource.camera); try { - await _uploadAvatar(_file!.path); - emitter(ChangeImageState()); + final urlStr = await _uploadAvatar(_file!.path); + emitter(ChangeImageState(urlStr)); } catch (e) { Log.e('上传头像失败:$e'); } @@ -84,6 +75,11 @@ class UserAvatarBloc extends Bloc { }); } + void _changeUserEnterAppState(ChangeUserEnterAppStateEvent event,Emitter emitter) async { + _canInsertApp = true; + emitter(ChangeUserEnterAppState()); + } + ///获取相机权限 Future getCameraPermissionStatus() async { Permission permission = Permission.camera; diff --git a/lib/pages/user/modify/user_avatar_bloc/user_avatar_event.dart b/lib/pages/user/modify/user_avatar_bloc/user_avatar_event.dart index 1a7c299..e844700 100644 --- a/lib/pages/user/modify/user_avatar_bloc/user_avatar_event.dart +++ b/lib/pages/user/modify/user_avatar_bloc/user_avatar_event.dart @@ -7,7 +7,5 @@ class GetImageFromPhotoEvent extends UserAvatarEvent {} class GetImageFromCameraEvent extends UserAvatarEvent {} -class ChangeImageEvent extends UserAvatarEvent { - final String imagePath; - ChangeImageEvent(this.imagePath); -} +class ChangeUserEnterAppStateEvent extends UserAvatarEvent {} + diff --git a/lib/pages/user/modify/user_avatar_bloc/user_avatar_state.dart b/lib/pages/user/modify/user_avatar_bloc/user_avatar_state.dart index 16bf433..43eee19 100644 --- a/lib/pages/user/modify/user_avatar_bloc/user_avatar_state.dart +++ b/lib/pages/user/modify/user_avatar_bloc/user_avatar_state.dart @@ -5,4 +5,9 @@ abstract class UserAvatarState {} class UserAvatarInitial extends UserAvatarState {} -class ChangeImageState extends UserAvatarState {} +class ChangeImageState extends UserAvatarState { + final String imageUrl; + ChangeImageState(this.imageUrl); +} + +class ChangeUserEnterAppState extends UserAvatarState{} \ No newline at end of file diff --git a/lib/utils/aliyun_oss_util.dart b/lib/utils/aliyun_oss_util.dart index c590789..9ba3a70 100644 --- a/lib/utils/aliyun_oss_util.dart +++ b/lib/utils/aliyun_oss_util.dart @@ -1,4 +1,5 @@ import 'package:dio/dio.dart'; +import 'package:flutter/cupertino.dart'; import 'package:flutter_oss_aliyun/flutter_oss_aliyun.dart'; import 'package:wow_english/common/request/request_client.dart'; import 'package:wow_english/models/aliyun_oss_upload_sts_entity.dart'; @@ -12,7 +13,12 @@ class AliyunOssUtil { String fileName = filePath.substring(filePath.lastIndexOf("/") + 1, filePath.length); Log.d("待上传文件fileName: $fileName"); // 获取鉴权信息 - AliyunOssUploadStsEntity stsEntity = await _getSts(fileName); + AliyunOssUploadStsEntity? stsEntity = await _getSts(fileName); + if(stsEntity == null) { + // todo 为空的情况抛出错误 + return ''; + } + debugPrint('鉴权信息$stsEntity'); // 鉴权 Client.init( ossEndpoint: stsEntity.endpoint, @@ -43,8 +49,9 @@ class AliyunOssUtil { } /// 获取鉴权信息 - static Future _getSts(String fileName) async { - var result = await requestClient.get(Apis.aliyunOssSts, queryParameters: {'fileName': fileName}); + static Future _getSts(String fileName) async { + var result = await requestClient.get(Apis.aliyunOssSts, queryParameters: {'fileName': fileName}); + debugPrint('鉴权结果$result'); return result; } }