user_page.dart 12.8 KB
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:url_launcher/url_launcher.dart';
import 'package:wow_english/common/core/app_config_helper.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 = '';

  /// 方法
  final MethodChannel methodChannel =
      const MethodChannel('wow_english/game_method_channel');

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

  Widget _pageWidget() => BlocBuilder<UserBloc, UserState>(
        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: WEAppBar(
                onBack: () {
                  popPage(data: {'exchange': userBloc.exchangeResult});
                },
              ),
              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 ||
                                      AppConfigHelper.shouldHidePay(),
                                  child: Image.asset(
                                    AssetsConst.icVip,
                                    height: 18.h,
                                  ),
                                )
                              ],
                            ),
                            Offstage(
                              offstage: user.effectiveDate == null ||
                                  AppConfigHelper.shouldHidePay(),
                              child: Row(
                                children: [
                                  Text(
                                    "${user.getEffectiveDate()} 到期",
                                    style: TextStyle(
                                      color: const Color(0xFFE11212),
                                      fontSize: 17.sp,
                                    ),
                                  )
                                ],
                              ),
                            )
                          ],
                        )),
                        TextButton(
                          child: Text(
                            "修改个人信息>",
                            style: textStyle21sp,
                          ),
                          onPressed: () {
                            pushNamed(AppRouteName.userInformation);
                          },
                        )
                      ],
                    ),
                    30.verticalSpace,
                    // 打开游戏界面 供审核用
                    ((UserUtil.getUser()?.phoneNum == '17730280759' ||
                            UserUtil.getUser()?.phoneNum == '17718485544')
                        ? OutlinedButton(
                            onPressed: () {
                              methodChannel
                                  .invokeMethod('openGamePage', {"gameId": 1});
                            },
                            style: normalButtonStyle,
                            child: Text(
                              "进入游戏",
                              style: textStyle21sp,
                            ),
                          )
                        : 1.verticalSpace),
                    ((UserUtil.getUser()?.phoneNum == '17730280759' ||
                            UserUtil.getUser()?.phoneNum == '17718485544')
                        ? 12.verticalSpace
                        : 1.verticalSpace),

                    Offstage(
                      offstage: AppConfigHelper.shouldHidePay(),
                      child: OutlinedButton(
                          onPressed: () =>
                              pushNamed(AppRouteName.exLesson).then((value) => {
                                    if (value != null)
                                      {
                                        userBloc.exchangeResult =
                                            value['exchange']
                                      }
                                  }),
                          style: normalButtonStyle,
                          child: Text(
                            "兑换课程",
                            style: textStyle21sp,
                          )),
                    ),
                    12.verticalSpace,
                    OutlinedButton(
                      onPressed: () => pushNamed(AppRouteName.fogPwd),
                      style: normalButtonStyle,
                      child: Text(
                        "修改密码",
                        style: textStyle21sp,
                      ),
                    ),
                    Offstage(
                      offstage: AppConfigHelper.shouldHidePay(),
                      child: 12.verticalSpace,
                    ),
                    OutlinedButton(
                        onPressed: () {
                          pushNamed(AppRouteName.webView, arguments: {
                            'urlStr': AppConsts.userPrivacyPolicyUrl,
                            'webViewTitle': '隐私协议'
                          });
                        },
                        style: normalButtonStyle,
                        child: Text(
                          "隐私协议",
                          style: textStyle21sp,
                        )),
                    12.verticalSpace,
                    OutlinedButton(
                        onPressed: () {
                          String phone = 'tel:+8618827093087';
                          _launchPhone(phone);
                        },
                        style: normalButtonStyle,
                        child: Text(
                          "联系客服",
                          style: textStyle21sp,
                        )),
                    12.verticalSpace,
                    OutlinedButton(
                        onPressed: () {
                          pushNamed(AppRouteName.setting);
                        },
                        style: normalButtonStyle,
                        child: Text(
                          "设置",
                          style: textStyle21sp,
                        )),
                    30.verticalSpace,
                    OutlinedButton(
                        onPressed: () {
                          showTwoActionDialog(
                              barrierDismissible: false,
                              '提示',
                              '取消',
                              '确认',
                              '您确认要退出Wow English吗?', leftTap: () {
                            popPage();
                          }, rightTap: () {
                            popPage();
                            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(
                              const 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,
                    //       ),
                    //     )),
                  ],
                ),
              ));
        },
      );

  void _launchPhone(String phone) async {
    if (await canLaunchUrl(Uri.parse(phone))) {
      await launchUrl(Uri.parse(phone));
    } else {
      throw 'Could not phone $phone';
    }
  }
}