import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:wow_english/common/core/app_consts.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/we_app_bar.dart'; import 'package:wow_english/models/user_entity.dart'; import 'package:wow_english/pages/user/bloc/user_bloc.dart'; import 'package:wow_english/route/route.dart'; import 'package:wow_english/utils/image_util.dart'; class UserPage extends StatelessWidget { const UserPage({super.key}); @override Widget build(BuildContext context) { return BlocProvider( create: (context) => UserBloc(), child: const _UserView(), ); } } class _UserView extends StatelessWidget { const _UserView({super.key}); final String bannerUrl = ''; @override Widget build(BuildContext context) { return _pageWidget(); } Widget _pageWidget() => BlocBuilder( /*buildWhen: (previous, current) { return current != previous; },*/ builder: (context, state) { UserEntity user = UserUtil.getUser()!; final userBloc = BlocProvider.of(context); // 常规按钮的字体样式 final textStyle21sp = TextStyle( //fontWeight: FontWeight.w600, color: const Color(0xFF333333), fontSize: 21.sp, ); // 常规按钮的样式 var normalButtonStyle = ButtonStyle( side: MaterialStateProperty.all(BorderSide(color: const Color(0xFF140C10), width: 1.5.w)), shape: MaterialStateProperty.all(RoundedRectangleBorder(borderRadius: BorderRadius.circular(15.r))), minimumSize: MaterialStateProperty.all(Size(double.infinity, 58.h)), backgroundColor: MaterialStateProperty.all(Colors.white), ); return Scaffold( //backgroundColor: Colors.white, appBar: const WEAppBar(), body: SingleChildScrollView( padding: EdgeInsets.only(left: 17.w, right: 17.w, top: 10.h, bottom: 22.h), child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ // banner Offstage( child: Container( child: Image.asset(bannerUrl), constraints: BoxConstraints(maxHeight: 196.h)), ), 30.verticalSpace, Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ CircleAvatar( radius: 40.r, backgroundColor: const Color(0xFF140C10), child: CircleAvatar( radius: 38.5.r, backgroundImage: ImageUtil.getImageProviderOnDefault(user.avatarUrl), ), /*child: ClipOval( child: OwImageWidget(name: user.avatarUrl ?? AssetsConst.wowLogo, fit: BoxFit.contain,), )*/ ), 32.horizontalSpace, Expanded( child: Column( children: [ Row( children: [ LimitedBox( maxWidth: 220.w, child: Text( user.name, //'1231231231312312312312312312312312312312312312312', style: textStyle21sp, overflow: TextOverflow.ellipsis, ), ), 14.horizontalSpace, Text( user.getGenderString(), style: textStyle21sp, ), 14.horizontalSpace, Offstage( offstage: user.effectiveDate == null, child: Image.asset( AssetsConst.icVip, height: 18.h, ), ) ], ), Offstage( offstage: user.effectiveDate == null, child: Row( children: [ Text( "${user.effectiveDate} 到期", style: TextStyle( color: const Color(0xFFE11212), fontSize: 17.sp, ), ) ], ), ) ], )), TextButton( child: Text( "修改个人信息>", style: textStyle21sp, ), onPressed: () { Navigator.of(AppRouter.context).pushNamed(AppRouteName.userInformation); }, ) ], ), 30.verticalSpace, OutlinedButton( onPressed: () => Navigator.of(context).pushNamed(AppRouteName.fogPwd), style: normalButtonStyle, child: Text( "修改密码", style: textStyle21sp, ), ), 12.verticalSpace, OutlinedButton( onPressed: () => Navigator.of(context).pushNamed(AppRouteName.exLesson), style: normalButtonStyle, child: Text( "兑换课程", style: textStyle21sp, )), 12.verticalSpace, OutlinedButton( onPressed: () => { Navigator.of(context).pushNamed(AppRouteName.webView, arguments: {'urlStr': AppConsts.userPrivacyPolicyUrl, 'webViewTitle': '隐私协议'}) }, style: normalButtonStyle, child: Text( "隐私协议", style: textStyle21sp, )), 30.verticalSpace, OutlinedButton( onPressed: () => {userBloc.add(UserLogout())}, style: ButtonStyle( side: MaterialStateProperty.all(BorderSide(color: const Color(0xFF140C10), width: 1.5)), shape: MaterialStateProperty.all( RoundedRectangleBorder(borderRadius: BorderRadius.circular(15.r))), minimumSize: MaterialStateProperty.all(Size(295.w, 40.h)), backgroundColor: MaterialStateProperty.all(Color(0xFFFBB621)), ), child: Text( "退出登陆", style: TextStyle( //fontWeight: FontWeight.w600, color: Colors.white, fontSize: 17.sp, ), )), ], ), )); }, ); }