user_page.dart 6.99 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/blocs/cachebloc/cache_bloc.dart';
import 'package:wow_english/common/core/assets_const.dart';
import 'package:wow_english/common/widgets/ow_image_widget.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';

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});

  @override
  Widget build(BuildContext context) {
    final cacheBloc = BlocProvider.of<CacheBloc>(context);
    final userBloc = BlocProvider.of<UserBloc>(context);
    UserEntity user = cacheBloc.userEntity!;

    // 常规按钮的字体样式
    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)),
      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.symmetric(horizontal: 17.w),
          padding: EdgeInsets.only(left: 17.w, right: 17.w, top: 10.h, bottom: 22.h),
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              Container(child: Image.asset(AssetsConst.wowLogo), constraints: BoxConstraints(maxHeight: 196.h)),
              30.verticalSpace,
              Row(
                mainAxisAlignment: MainAxisAlignment.spaceBetween,
                children: [
                  CircleAvatar(
                      radius: 40.r,
                      backgroundColor: Color(0xFF140C10),
                      /*child: CircleAvatar(
            radius: 38.5.r,
            backgroundImage: ImageUtil.getImageProviderOnDefault(user.avatarUrl),
          ),*/
                      child: ClipOval(
                        child: OwImageWidget(name: user.avatarUrl ?? AssetsConst.wowLogo),
                      )),
                  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: () {},
                  )
                ],
              ),
              30.verticalSpace,
              OutlinedButton(
                onPressed: () => {},
                style: normalButtonStyle,
                child: Text(
                  "修改密码",
                  style: textStyle21sp,
                ),
              ),
              12.verticalSpace,
              OutlinedButton(
                  onPressed: () => {},
                  style: normalButtonStyle,
                  child: Text(
                    "兑换课程",
                    style: textStyle21sp,
                  )),
              12.verticalSpace,
              OutlinedButton(
                  onPressed: () => {
                  Navigator.of(context).pushNamed(AppRouteName.webView, arguments: {
                  'urlStr': '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',
                  '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,
                    ),
                  )),
            ],
          ),
        ));
  }
}