modify_user_information_page.dart 6.84 KB
import 'package:flutter/cupertino.dart';
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:wow_english/common/core/assets_const.dart';
import 'package:wow_english/common/core/user_util.dart';
import 'package:wow_english/common/widgets/textfield_customer_widget.dart';
import 'package:wow_english/common/widgets/we_app_bar.dart';
import 'package:wow_english/pages/user/bloc/user_bloc.dart';
import 'package:wow_english/utils/log_util.dart';

enum ModifyUserInformationType {
  avatar('头像'),
  name('名字'),
  age('年龄'),
  gender('性别');

  const ModifyUserInformationType(this.title);

  final String title;
}

class ModifyUserInformationPage extends StatelessWidget {
  final ModifyUserInformationType type;

  const ModifyUserInformationPage({super.key, required this.type});

  static push(BuildContext context, ModifyUserInformationType type) {
    Navigator.of(context).push(CupertinoPageRoute(builder: (context) {
      return ModifyUserInformationPage(type: type);
    }));
  }

  @override
  Widget build(BuildContext context) {
    return BlocProvider(
      create: (context) => UserBloc(),
      child: Scaffold(
        backgroundColor: Colors.white,
        appBar: WEAppBar(
          titleText: '修改${type.title}',
        ),
        body: BlocListener<UserBloc, UserState>(
          listener: (context, state) {},
          child: BlocBuilder<UserBloc, UserState>(builder: (context, state) {
            //final bloc = context.read<UserBloc>();
            // 区别是什么?
            //BlocProvider.of<UserBloc>(context);
            return SingleChildScrollView(
                child: Column(
              children: [
                Padding(
                    padding: EdgeInsets.only(left: 65.w, right: 55.w, top: 38.h),
                    child: Row(
                      children: [
                        Text(
                          type.title,
                          style: TextStyle(
                            fontWeight: FontWeight.w700,
                            color: const Color(0xFF333333),
                            fontSize: 21.sp,
                          ),
                        ),
                        20.horizontalSpace,
                        // 输入框 or 选择框
                        _buildTextFieldWidget(context),
                        // 占位
                        Expanded(
                          child: Container(),
                        ),
                        // 按钮
                        GestureDetector(
                          onTap: () {
                            // 更新type类型的字段
                            context.read<UserBloc>().add(UserUpdate(type));
                          },
                          child: Container(
                            alignment: Alignment.center,
                            width: 90.w,
                            height: 44.h,
                            decoration: BoxDecoration(
                              image: DecorationImage(image: AssetImage(AssetsConst.bgButtonBlue), fit: BoxFit.fill),
                            ),
                            child: Text(
                              '确定',
                              style: TextStyle(fontSize: 17.sp, color: Colors.white),
                            ),
                          ),
                        )
                      ],
                    )),
                Stack(
                  alignment: Alignment.topRight,
                  children: [
                    Image.asset(
                      AssetsConst.bgEditUserInformation,
                      width: double.infinity,
                    ),
                    Positioned(
                      right: 125.w,
                      top: 10.h,
                      child: Image.asset(AssetsConst.bgIcSteveWrite, width: 161.w, height: 249.w),
                    ),
                  ],
                ),
              ],
            ));
          }),
        ),
      ),
    );
  }

  Widget _buildTextFieldWidget(BuildContext context) {
    var userBloc = context.read<UserBloc>();
    var user = UserUtil.getUser()!;
    userBloc.tempGender = user.gender ?? 0;
    Log.d('user = $user');
    if (type == ModifyUserInformationType.gender) {
      return Row(
        children: <Widget>[
          SizedBox(
            width: 100.w,
            child: RadioListTile(
              title: Text(
                '男',
                style: TextStyle(
                  fontWeight: FontWeight.w700,
                  color: const Color(0xFF333333),
                  fontSize: 21.sp,
                ),
              ),
              activeColor: const Color(0xFF0E89BA),
              value: 0,
              //selected: user.gender == 0,
              groupValue: userBloc.tempGender,
              onChanged: (value) {
                Log.d('男value = $value');
                if (value != null) {
                  userBloc.tempGender = value;
                }
                userBloc.add(UserUIUpdate(type));
              },
            ),
          ),
          SizedBox(
            width: 100.w,
            child: RadioListTile<int>(
              //selected: user.gender == 1,
              title: Text(
                '女',
                style: TextStyle(
                  fontWeight: FontWeight.w700,
                  color: const Color(0xFF333333),
                  fontSize: 21.sp,
                ),
              ),
              activeColor: const Color(0xFF0E89BA),
              value: 1,
              groupValue: userBloc.tempGender,
              onChanged: (int? value) {
                Log.d('女value = $value');
                if (value != null) {
                  userBloc.tempGender = value;
                }
                userBloc.add(UserUIUpdate(type));
              },
            ),
          ),
        ],
      );
    }

    var formatters = [
      LengthLimitingTextInputFormatter(12),
      FilteringTextInputFormatter.deny(RegExp('[ ]')),
    ];
    var inputType = TextInputType.name;
    // 当输入年龄时
    if (type == ModifyUserInformationType.age) {
      formatters = [
        LengthLimitingTextInputFormatter(2),
        FilteringTextInputFormatter.deny(RegExp('[ ]')),
      ];
      inputType = TextInputType.number;
    }

    return TextFieldCustomerWidget(
      height: 65.h,
      width: 222.w,
      textStyle: TextStyle(
        fontWeight: FontWeight.w700,
        color: const Color(0xFF333333),
        fontSize: 21.sp,
      ),
      bgImageName: 'Input_layer_up',
      textInputType: inputType,
      inputFormatters: formatters,
      controller: userBloc.modifyTextController,
      /*onChangeValue: (String value) {
                          bloc.add(CodeNumberChangeEvent());
                        },*/
    );
  }
}