admin
2022-05-12 fa705507ba574c857b1667553737d23b1b7ff495
src/main/resources/code/flutter_module/lib/ui/mine/person_info.dart
@@ -1,19 +1,24 @@
import 'dart:ui';
import 'dart:io';
import 'dart:ui';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_module/utils/wx_util.dart';
import 'package:image_picker/image_picker.dart';
import 'package:package_info/package_info.dart';
import '../../api/http.dart';
import '../../api/user_api.dart';
import '../../model/user/user_info.dart';
import '../../ui/widget/button.dart';
import '../../ui/widget/video_item.dart';
import '../../utils/image_util.dart';
import '../../api/http.dart';
import '../../ui/common/browser.dart';
import '../../ui/widget/button.dart';
import '../../ui/widget/dialog.dart';
import '../../ui/widget/nav.dart';
import '../../ui/widget/video_item.dart';
import '../../utils/cache_util.dart';
import '../../utils/config_util.dart';
import '../../utils/event_bus_util.dart';
import '../../utils/image_util.dart';
import '../../utils/pageutils.dart';
import '../../utils/push_util.dart';
import '../../utils/setting_util.dart';
@@ -21,8 +26,7 @@
import '../../utils/ui_constant.dart';
import '../../utils/ui_utils.dart';
import '../../utils/user_util.dart';
import 'package:package_info/package_info.dart';
import 'package:image_picker/image_picker.dart';
import 'login.dart';
void main() {
  runApp(MyApp());
@@ -64,17 +68,18 @@
  String? editPortrait;
  String? editNickName;
  int? editSex;
  DateTime? editBirthday;
  String? editSign;
  @override
  void initState() {
    super.initState();
    UserUtil.getUserInfo().then((value) {
      setState(() {
        _user = value;
      });
    getUserInfo();
  }
  void getUserInfo() async {
    await UserUtil.updateUserInfo(context);
    UserInfo? temp = await UserUtil.getUserInfo();
    setState(() {
      _user = temp;
    });
  }
@@ -92,124 +97,138 @@
  @override
  Widget build(BuildContext context) {
    return Scaffold(
        backgroundColor: const Color(0xFFDADADA),
        backgroundColor: const Color(0xFFF3F3F3),
        body: _user == null
            ? Container()
            : Column(
                children: [
                  TopNavBar(
                    title: "个人信息",
                    rightText: canSave() ? "保存" : null,
                    rightClick: canSave()
                        ? () {
                            //保存
                            UserApiUtil.updateUserInfo(context,
                                    nickName: editNickName,
                                    sex: editSex,
                                    birthDay: editBirthday == null
                                        ? null
                                        : "${editBirthday!.year}/${editBirthday!.month}/${editBirthday!.day}",
                                    sign: editSign,
                                    portraitPath: editPortrait)
                                .then((value) {
                              if (value == null) {
                                return;
                              }
          children: [
            TopNavBar(
              title: "个人信息",
              rightText: canSave() ? "保存" : null,
              rightClick: canSave()
                  ? () {
                //保存
                UserApiUtil.updateUserInfo(context,
                    nickName: editNickName,
                    portraitPath: editPortrait)
                    .then((value) {
                  if (value == null) {
                    return;
                  }
                              if (value["IsPost"] == "true") {
                                ToastUtil.toast("修改成功", context);
                                popPage(context);
                              } else {
                                ToastUtil.toast(value["Error"], context);
                              }
                            });
                          }
                        : null,
                  ),
                  Expanded(
                      child: SingleChildScrollView(
                          child: Column(children: [
                    Container(
                      height: 10,
                      color: const Color(0xFFDADADA),
                    ),
                    getPortraitItemView(onClick: () {
                      //选择头像
                      selectImg();
                    }),
                    getCommonItemView(
                        title: "昵称",
                        content: editNickName ?? _user!.nickname!,
                        onClick: () {
                          showEditNickName(editNickName ?? _user!.nickname!);
                        }),
                    getCommonItemView(
                        title: "性别",
                        content:
                            _getSexDesc((editSex ?? int.parse(_user!.sex!))),
                        onClick: () {
                          showEditSex(editSex ?? int.parse(_user!.sex!));
                        }),
                    getCommonItemView(
                        title: "生日",
                        content: _getBirthDay(),
                        onClick: () {
                          showEditBirthDay((editBirthday ??
                              ((_user!.birthday == null ||
                                      _user!.birthday!.isEmpty)
                                  ? null
                                  : parseDate(_user!.birthday!))));
                        }),
                    getCommonItemView(
                        title: "邮箱",
                        content: _user!.email!,
                        onClick: () {},
                        canIn: false),
                    getCommonItemView(
                        title: "ID",
                        content: _user!.id!,
                        onClick: () {},
                        canIn: false),
                    Container(
                      height: 10,
                      color: const Color(0xFFDADADA),
                    ),
                    getSignItemView(onClick: () {
                      showEditSign(editSign ?? _user!.sign);
                    }),
                  ]))),
                ],
              ));
                  if (value["code"] == 0) {
                    ToastUtil.toast("修改成功", context);
                    popPage(context);
                  } else {
                    ToastUtil.toast(value["msg"], context);
                  }
                });
              }
                  : null,
            ),
            Expanded(
                child: SingleChildScrollView(
                    child: Column(children: [
                      Container(
                        height: 10,
                      ),
                      Row(
                          mainAxisSize: MainAxisSize.min,
                          crossAxisAlignment: CrossAxisAlignment.center,
                          children: [
                            Container(
                              width: 15,
                              height: 50 * 4 +
                                  (DimenUtil.getOnePixel(context)) * 3 * 2,
                              alignment: Alignment.center,
                              color: Colors.white,
                            ),
                            Expanded(
                                child: Column(
                                    mainAxisSize: MainAxisSize.min,
                                    children: [
                                      getPortraitItemView(onClick: () {
                                        //选择头像
                                        selectImg();
                                      }),
                                      getCommonItemView(
                                          title: "昵称",
                                          content: editNickName ?? _user!.nickname!,
                                          onClick: () {
                                            showEditNickName(
                                                editNickName ?? _user!.nickname!);
                                          }),
                                      getCommonItemView(
                                          title: "ID",
                                          content: _user!.id!,
                                          onClick: () {},
                                          canIn: false)
                                    ]))
                          ]),
                      Container(
                        height: 14,
                      ),
                      Row(
                          mainAxisSize: MainAxisSize.min,
                          crossAxisAlignment: CrossAxisAlignment.center,
                          children: [
                            Container(
                              width: 15,
                              height: 50 * 2 +
                                  (DimenUtil.getOnePixel(context)) * 1 * 2,
                              alignment: Alignment.center,
                              color: Colors.white,
                            ),
                            Expanded(
                                child: Column(
                                    mainAxisSize: MainAxisSize.min,
                                    children: [
                                      getCommonItemView(
                                          title: "手机号",
                                          content:
                                          StringUtil.isNullOrEmpty(_user!.phone)
                                              ? "未添加"
                                              : _user!.phone!,
                                          onClick: () {
                                            if (StringUtil.isNullOrEmpty(
                                                _user!.phone)) {
                                              //手机号绑定
                                              NavigatorUtil.navigateToNextPage(
                                                  context,
                                                  LoginPage(
                                                    title: "",
                                                    bindPhone: true,
                                                  ), (data) {
                                                getUserInfo();
                                              });
                                            }
                                          },
                                          canIn:
                                          StringUtil.isNullOrEmpty(_user!.phone)),
                                      getCommonItemView(
                                          title: "微信授权",
                                          content: StringUtil.isNullOrEmpty(
                                              _user!.wxNickName)
                                              ? "去授权"
                                              : _user!.wxNickName!,
                                          onClick: () {
                                            if (!StringUtil.isNullOrEmpty(
                                                _user!.wxNickName)) {
                                              return;
                                            }
                                            WXAuthUtil.startAuth(context);
                                          },
                                          canIn: StringUtil.isNullOrEmpty(
                                              _user!.wxNickName))
                                    ]))
                          ]),
                    ]))),
          ],
        ));
  }
  bool canSave() {
    return editNickName != null ||
        editSex != null ||
        editBirthday != null ||
        editSign != null ||
        editPortrait != null;
  }
  String _getSexDesc(int? sex) {
    switch (sex) {
      case 1:
        return "男";
      case 2:
        return "女";
    }
    return "未知";
  }
  String _getBirthDay() {
    DateTime? date = (editBirthday ??
        ((_user!.birthday == null || _user!.birthday!.isEmpty)
            ? null
            : parseDate(_user!.birthday!)));
    if (date == null) {
      return "请选择出生日期";
    }
    return "${date.year}/${date.month}/${date.day}";
    return editNickName != null || editPortrait != null;
  }
  DateTime parseDate(String date) {
@@ -220,19 +239,22 @@
  Widget getCommonItemView(
      {required String title,
      String content = "",
      required GestureTapCallback onClick,
      bool canIn = true}) {
        String content = "",
        required GestureTapCallback onClick,
        bool canIn = true}) {
    return Container(
      height: 53,
      margin: const EdgeInsets.fromLTRB(0, 0, 0, 1),
      height: 50,
      margin: EdgeInsets.fromLTRB(0, 0, 0, DimenUtil.getOnePixel(context) * 2),
      color: Colors.white,
      child: InkWell(
        onTap: () {
          if (!canIn) {
            return;
          }
          onClick();
        },
        child: Container(
            padding: const EdgeInsets.fromLTRB(20, 0, 20, 0),
            padding: const EdgeInsets.fromLTRB(0, 0, 20, 0),
            child: Flex(
              crossAxisAlignment: CrossAxisAlignment.center,
              direction: Axis.horizontal,
@@ -240,27 +262,36 @@
                Text(
                  title,
                  style:
                      const TextStyle(fontSize: 16, color: Color(0xFF333333)),
                  const TextStyle(fontSize: 16, color: Color(0xFF333333)),
                ),
                Expanded(
                    child: Flex(
                  direction: Axis.horizontal,
                  mainAxisAlignment: MainAxisAlignment.end,
                  children: [
                    Container(
                      child: Text(content,
                          style: const TextStyle(
                              fontSize: 14, color: Color(0xFF959595))),
                      margin: const EdgeInsets.fromLTRB(0, 0, 13.5, 0),
                    ),
                    canIn
                        ? Image.asset(
                            "assets/imgs/icon_person_info_input.png",
                            height: 13.5,
                          )
                        : Container()
                  ],
                ))
                    child: Wrap(
                      alignment: WrapAlignment.end,
                      crossAxisAlignment: WrapCrossAlignment.center,
                      children: [
                        Container(
                          child: Text(content,
                              style: const TextStyle(
                                  fontSize: 14, color: Color(0xFF888888))),
                          margin: const EdgeInsets.fromLTRB(0, 0, 0, 0),
                        ),
                        canIn
                            ? const SizedBox(
                          width: 10.5,
                        )
                            : const SizedBox(
                          width: 0,
                        ),
                        canIn
                            ? Image.asset(
                          "assets/imgs/icon_person_info_input.png",
                          height: 13.5,
                        )
                            : Container(
                          width: 0,
                        )
                      ],
                    ))
              ],
            )),
      ),
@@ -269,15 +300,15 @@
  Widget getPortraitItemView({required GestureTapCallback onClick}) {
    return Container(
      height: 75,
      margin: const EdgeInsets.fromLTRB(0, 0, 0, 1),
      height: 50,
      margin: EdgeInsets.fromLTRB(0, 0, 0, DimenUtil.getOnePixel(context) * 2),
      color: Colors.white,
      child: InkWell(
        onTap: () {
          onClick();
        },
        child: Container(
            padding: const EdgeInsets.fromLTRB(20, 0, 20, 0),
            padding: const EdgeInsets.fromLTRB(0, 0, 20, 0),
            child: Flex(
              crossAxisAlignment: CrossAxisAlignment.center,
              direction: Axis.horizontal,
@@ -288,93 +319,38 @@
                ),
                Expanded(
                    child: Flex(
                  direction: Axis.horizontal,
                  mainAxisAlignment: MainAxisAlignment.end,
                  children: [
                    Container(
                      child: ClipRRect(
                          borderRadius: BorderRadius.circular(60),
                          child: editPortrait == null
                              ? CommonImage(
                                  _user!.portrait!,
                                  height: 57,
                                  width: 57,
                                )
                              : Image.file(
                                  File(editPortrait!),
                                  fit: BoxFit.cover,
                                  height: 57,
                                  width: 57,
                                )),
                      margin: const EdgeInsets.fromLTRB(0, 0, 13.5, 0),
                    ),
                    Image.asset(
                      "assets/imgs/icon_person_info_input.png",
                      height: 13.5,
                    )
                  ],
                ))
                      direction: Axis.horizontal,
                      mainAxisAlignment: MainAxisAlignment.end,
                      children: [
                        Container(
                          child: ClipRRect(
                              borderRadius: BorderRadius.circular(60),
                              child: editPortrait == null
                                  ? CommonImage(
                                _user!.portrait == null
                                    ? 'assets/imgs/ic_portrait_default.png'
                                    : _user!.portrait!,
                                height: 33,
                                width: 33,
                              )
                                  : Image.file(
                                File(editPortrait!),
                                fit: BoxFit.cover,
                                height: 33,
                                width: 33,
                              )),
                          margin: const EdgeInsets.fromLTRB(0, 0, 10.5, 0),
                        ),
                        Image.asset(
                          "assets/imgs/icon_person_info_input.png",
                          height: 13.5,
                        )
                      ],
                    ))
              ],
            )),
      ),
    );
  }
  Widget getSignItemView({required GestureTapCallback onClick}) {
    return Container(
        height: 200,
        margin: const EdgeInsets.fromLTRB(0, 0, 0, 1),
        color: Colors.white,
        child: InkWell(
          onTap: () {
            onClick();
          },
          child: Container(
            padding: const EdgeInsets.fromLTRB(20, 0, 20, 0),
            child:
                Column(crossAxisAlignment: CrossAxisAlignment.start, children: [
              Container(
                height: 18,
              ),
              Flex(
                crossAxisAlignment: CrossAxisAlignment.center,
                direction: Axis.horizontal,
                children: [
                  const Text(
                    "个性签名",
                    style: TextStyle(fontSize: 16, color: Color(0xFF333333)),
                  ),
                  Expanded(
                      child: Flex(
                    direction: Axis.horizontal,
                    mainAxisAlignment: MainAxisAlignment.end,
                    children: [
                      Image.asset(
                        "assets/imgs/icon_person_info_input.png",
                        height: 13.5,
                      )
                    ],
                  ))
                ],
              ),
              Container(
                height: 21,
              ),
              Text(
                _getSign(),
                textAlign: TextAlign.start,
                style: const TextStyle(color: Color(0xFFBEBEBE), fontSize: 15),
              )
            ]),
          ),
        ));
  }
  _getSign() {
    return editSign ??
        ((_user!.sign == null || _user!.sign!.isEmpty)
            ? "这个人很懒,什么也没有留下"
            : _user!.sign!);
  }
  showAlertDilaog(String title, Widget content, VoidCallback sure,
@@ -389,7 +365,7 @@
              TextButton(
                child: Text('取消'),
                onPressed: () {
                  Navigator.of(context).pop();
                  popPage(context);
                },
              ),
              TextButton(
@@ -414,123 +390,10 @@
      if (controller.text.isEmpty) {
        return;
      }
      Navigator.of(context).pop();
      popPage(context);
      setState(() {
        editNickName = controller.text;
      });
    });
  }
  void showEditSex(int sex) {
    int? tempSex;
    setState(() {
      tempSex = sex;
    });
    DialogUtil.showDialogBottom(
        context,
        Container(
            margin: const EdgeInsets.all(10),
            alignment: Alignment.bottomCenter,
            child: Stack(alignment: Alignment.bottomCenter, children: [
              Container(
                  margin: const EdgeInsets.only(bottom: 50),
                  decoration: BoxDecoration(
                      color: Colors.white,
                      borderRadius: BorderRadius.circular(10)),
                  child: Container(
                      height: 100,
                      alignment: Alignment.center,
                      child: Column(
                        children: [
                          InkWell(
                              onTap: () {
                                setState(() {
                                  editSex = 1;
                                });
                                Navigator.of(context).pop();
                              },
                              child: Container(
                                  height: 50,
                                  alignment: Alignment.center,
                                  child: const Text(
                                    "男",
                                    style: TextStyle(
                                        fontSize: 18,
                                        color: ColorConstant.theme),
                                  ))),
                          InkWell(
                              onTap: () {
                                setState(() {
                                  editSex = 2;
                                });
                                Navigator.of(context).pop();
                              },
                              child: Container(
                                  height: 50,
                                  alignment: Alignment.center,
                                  child: const Text(
                                    "女",
                                    style: TextStyle(
                                        fontSize: 18,
                                        color: ColorConstant.theme),
                                  ))),
                        ],
                      ))),
              MyFillButton(
                "取消",
                20,
                height: 40,
                color: Colors.grey,
                fontSize: 14,
                onClick: () {
                  popPage(context);
                },
              )
            ])));
  }
  //编辑生日
  void showEditBirthDay(DateTime? dateTime) async {
    dateTime ??= DateTime.now();
    Locale myLocale = Localizations.localeOf(context);
    DateTime? date = await showDatePicker(
        context: context,
        initialDate: dateTime,
        firstDate: DateTime(1900),
        lastDate: DateTime(DateTime.now().year + 1),
        locale: myLocale);
    if (date != null) {
      setState(() {
        editBirthday = date;
      });
    }
  }
  void showEditSign(String? sign) {
    sign ??= "";
    TextEditingController controller = TextEditingController();
    controller.text = sign;
    showAlertDilaog(
        "编辑签名",
        TextField(
          controller: controller,
          maxLines: 5,
          maxLength: 200,
          decoration: const InputDecoration(
              focusedBorder: InputBorder.none,
              border: InputBorder.none,
              counterStyle: TextStyle(color: Color(0xFF666666)),
              hintText: "请输入签名内容",
              hintStyle: TextStyle(fontSize: 15, color: Color(0xFF999999))),
        ), () {
      if (controller.text.isEmpty) {
        return;
      }
      Navigator.of(context).pop();
      setState(() {
        editSign = controller.text;
      });
    });
  }
}
}