176 lines
5.3 KiB
Dart
176 lines
5.3 KiB
Dart
import 'dart:async';
|
|
|
|
import 'package:flutter/cupertino.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
|
import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart';
|
|
import 'package:get/get.dart';
|
|
import 'package:wallpaperx/common/components/easy_loading.dart';
|
|
import 'package:wallpaperx/common/utils/shared_util.dart';
|
|
import 'package:wallpaperx/entity/userinfo_model.dart';
|
|
import 'package:wallpaperx/generated/assets.dart';
|
|
import 'package:wallpaperx/page/home/home_controller.dart';
|
|
import 'package:wallpaperx/page/settings/settings_controller.dart';
|
|
|
|
class UserEditController extends GetxController {
|
|
final TextEditingController usernameController = TextEditingController();
|
|
final TextEditingController emailController = TextEditingController();
|
|
final TextEditingController passwordController = TextEditingController();
|
|
FocusNode usernameFocusNode = FocusNode();
|
|
FocusNode emailFocusNode = FocusNode();
|
|
FocusNode passwordFocusNode = FocusNode();
|
|
|
|
bool usernameEmpty = false;
|
|
bool passwordEmpty = false;
|
|
bool emailEmpty = false;
|
|
|
|
HomeController homeController = Get.find<HomeController>();
|
|
SettingsController settingsController = Get.find<SettingsController>();
|
|
|
|
late String title;
|
|
Timer? _timer;
|
|
|
|
RxString avatar = Assets.imagesPlaceholder.obs;
|
|
|
|
List<String> avatarList = [
|
|
'assets/avatar/1.png',
|
|
'assets/avatar/2.png',
|
|
'assets/avatar/3.png',
|
|
'assets/avatar/4.png',
|
|
'assets/avatar/5.png',
|
|
];
|
|
|
|
@override
|
|
void onInit() {
|
|
super.onInit();
|
|
title = Get.arguments['title'];
|
|
var loginAccount = UPCache.getInstance().get("loginAccount");
|
|
var map = UPCache.getInstance().getJson(loginAccount ?? "");
|
|
if (map != null) {
|
|
final userinfo = UserinfoModel.fromJson(map);
|
|
avatar.value = userinfo.avatar ?? Assets.imagesPlaceholder;
|
|
usernameController.value =
|
|
TextEditingValue(text: userinfo.username ?? "");
|
|
emailController.value = TextEditingValue(text: userinfo.email ?? "");
|
|
passwordController.value =
|
|
TextEditingValue(text: userinfo.password ?? "");
|
|
}
|
|
}
|
|
|
|
@override
|
|
void onClose() {
|
|
super.onClose();
|
|
usernameController.dispose();
|
|
emailController.dispose();
|
|
passwordController.dispose();
|
|
usernameFocusNode.dispose();
|
|
emailFocusNode.dispose();
|
|
passwordFocusNode.dispose();
|
|
_stopTimer();
|
|
}
|
|
|
|
setUserInfo() {
|
|
String username = usernameController.value.text;
|
|
String password = passwordController.value.text;
|
|
String email = emailController.value.text;
|
|
if (username.isEmpty) {
|
|
toast('Please enter username');
|
|
usernameEmpty = true;
|
|
update(["loginInfo"]);
|
|
return;
|
|
} else {
|
|
update(["loginInfo"]);
|
|
usernameEmpty = false;
|
|
}
|
|
if (email.isEmpty) {
|
|
toast('Please enter email');
|
|
emailEmpty = true;
|
|
update(["loginInfo"]);
|
|
return;
|
|
} else {
|
|
emailEmpty = false;
|
|
update(["loginInfo"]);
|
|
}
|
|
if (password.isEmpty) {
|
|
toast('Please enter password');
|
|
passwordEmpty = true;
|
|
update(["loginInfo"]);
|
|
return;
|
|
} else {
|
|
passwordEmpty = false;
|
|
update(["loginInfo"]);
|
|
}
|
|
|
|
loading(show: true);
|
|
_timer = Timer.periodic(const Duration(seconds: 1), (Timer t) {
|
|
dismiss(dismiss: true);
|
|
var loginAccount = UPCache.getInstance().get("loginAccount");
|
|
var userinfo = {
|
|
"avatar": avatar.value,
|
|
"username": username,
|
|
"password": password,
|
|
"email": email,
|
|
};
|
|
if (loginAccount == null) {
|
|
UPCache.getInstance()
|
|
.setData("loginAccount", username);
|
|
UPCache.getInstance().setJson(username, userinfo);
|
|
homeController.userinfo = UserinfoModel.fromJson(userinfo);
|
|
settingsController.update(["userinfo"]);
|
|
Get.back();
|
|
Get.back();
|
|
} else {
|
|
UPCache.getInstance()
|
|
.setData("loginAccount", username);
|
|
UPCache.getInstance().remove(loginAccount);
|
|
UPCache.getInstance().setJson(username, userinfo);
|
|
homeController.userinfo = UserinfoModel.fromJson(userinfo);
|
|
settingsController.update(["userinfo"]);
|
|
Get.back();
|
|
}
|
|
});
|
|
}
|
|
|
|
editAvatar() {
|
|
Get.bottomSheet(
|
|
Container(
|
|
padding: EdgeInsets.all(10.w),
|
|
width: double.infinity,
|
|
height: 300.w,
|
|
child: MasonryGridView.count(
|
|
itemCount: avatarList.length,
|
|
crossAxisCount: 3,
|
|
mainAxisSpacing: 20.w,
|
|
crossAxisSpacing: 21.w,
|
|
padding: const EdgeInsets.fromLTRB(16, 0, 16, 0).w,
|
|
itemBuilder: (context, index) {
|
|
return GestureDetector(
|
|
onTap: () {
|
|
avatar.value = avatarList[index];
|
|
Get.back();
|
|
},
|
|
child: Container(
|
|
clipBehavior: Clip.hardEdge,
|
|
decoration: BoxDecoration(
|
|
borderRadius: BorderRadius.circular(50).r,
|
|
),
|
|
child: Image.asset(
|
|
avatarList[index],
|
|
width: 100.w,
|
|
),
|
|
),
|
|
);
|
|
},
|
|
),
|
|
),
|
|
backgroundColor: Colors.white.withOpacity(.1),
|
|
);
|
|
}
|
|
|
|
/// 停止定时器
|
|
void _stopTimer() {
|
|
_timer?.cancel();
|
|
_timer = null;
|
|
}
|
|
}
|