user_page.dart 8.89 KB
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/dialogs/show_dialog.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 _UserView();
  }
}

class _UserView extends StatelessWidget {
  final String bannerUrl = '';

  @override
  Widget build(BuildContext context) {
    return _pageWidget();
  }

  Widget _pageWidget() => BlocBuilder<UserBloc, UserState>(
    /*buildWhen: (previous, current) {
          return current != previous;
        },*/
    builder: (context, state) {
      UserEntity user = UserUtil.getUser()!;
      final userBloc = BlocProvider.of<UserBloc>(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(
          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: <Widget>[
                // todo banner,暂时没有接口获取banner URL
                /*Offstage(
                      child: Column(
                        children: [
                          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,
                                    ),
                                  )
                                ],
                              ),
                            )
                          ],
                        )),
                    Offstage(
                      offstage: UserUtil.getUser()?.phoneNum == '17730280759',
                      child:  TextButton(
                        child: Text(
                          "修改个人信息>",
                          style: textStyle21sp,
                        ),
                        onPressed: () {
                          pushNamed(AppRouteName.userInformation);
                        },
                      ),
                    )
                  ],
                ),
                30.verticalSpace,
                OutlinedButton(
                  onPressed: () => pushNamed(AppRouteName.fogPwd),
                  style: normalButtonStyle,
                  child: Text(
                    "修改密码",
                    style: textStyle21sp,
                  ),
                ),
                12.verticalSpace,
                // todo 为了过审,把测试账号兑换功能下掉
                Offstage(
                  offstage: UserUtil.getUser()?.phoneNum == '17730280759',
                  child: OutlinedButton(
                      onPressed: () => pushNamed(AppRouteName.exLesson),
                      style: normalButtonStyle,
                      child: Text(
                        "兑换课程",
                        style: textStyle21sp,
                      )),
                ),
                Offstage(
                  offstage: UserUtil.getUser()?.phoneNum == '17730280759',
                  child: 12.verticalSpace,
                ),
                OutlinedButton(
                    onPressed: () {
                      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(const BorderSide(color: 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,
                      ),
                    )),
                30.verticalSpace,
                TextButton(
                    onPressed: () {
                      //userBloc.add(UserDelete())
                      showTwoActionDialog('注销账号', '取消', '注销', '请谨慎操作!\n注销后不可恢复哦!', () {
                        popPage();
                      }, () {
                        userBloc.add(UserDelete());
                        popPage();
                      });
                    },
                    child: Text(
                      "注销账号",
                      style: TextStyle(
                        //fontWeight: FontWeight.w600,
                        color: Colors.red,
                        fontSize: 15.sp,
                      ),
                    )),
              ],
            ),
          ));
    },
  );
}