user_page.dart 10.9 KB
import 'dart:io';
import 'dart:async';
import 'package:flutter/services.dart';
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_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';
import 'package:url_launcher/url_launcher.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: 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 || 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),
                OutlinedButton(
                  onPressed: () => pushNamed(AppRouteName.fogPwd),
                  style: normalButtonStyle,
                  child: Text(
                    "修改密码",
                    style: textStyle21sp,
                  ),
                ),
                12.verticalSpace,
                Offstage(
                  offstage: AppConfigHelper.shouldHidePay(),
                  child: OutlinedButton(
                      onPressed: () => pushNamed(AppRouteName.exLesson),
                      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:+8618856084180';
                      _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';
    }
  }
}