mirror of
https://github.com/qinglong-app/qinglong_app.git
synced 2025-10-09 16:48:19 +08:00
213 lines
6.2 KiB
Dart
213 lines
6.2 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
|
import 'package:qinglong_app/base/http/api.dart';
|
|
import 'package:qinglong_app/base/http/http.dart';
|
|
import 'package:qinglong_app/base/ql_app_bar.dart';
|
|
import 'package:qinglong_app/base/routes.dart';
|
|
import 'package:qinglong_app/base/userinfo_viewmodel.dart';
|
|
import 'package:qinglong_app/module/task/task_bean.dart';
|
|
import 'package:qinglong_app/module/task/task_viewmodel.dart';
|
|
import 'package:qinglong_app/utils/extension.dart';
|
|
|
|
import '../../main.dart';
|
|
|
|
class UpdatePasswordPage extends ConsumerStatefulWidget {
|
|
const UpdatePasswordPage({
|
|
Key? key,
|
|
}) : super(key: key);
|
|
|
|
@override
|
|
ConsumerState<UpdatePasswordPage> createState() => _UpdatePasswordPageState();
|
|
}
|
|
|
|
class _UpdatePasswordPageState extends ConsumerState<UpdatePasswordPage> {
|
|
final TextEditingController _nameController = TextEditingController();
|
|
final TextEditingController _passwordController = TextEditingController();
|
|
final TextEditingController _passwordAgainController =
|
|
TextEditingController();
|
|
|
|
FocusNode focusNode = FocusNode();
|
|
|
|
@override
|
|
void initState() {
|
|
super.initState();
|
|
WidgetsBinding.instance.addPostFrameCallback(
|
|
(timeStamp) {
|
|
focusNode.requestFocus();
|
|
},
|
|
);
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return Scaffold(
|
|
appBar: QlAppBar(
|
|
canBack: true,
|
|
backCall: () {
|
|
Navigator.of(context).pop();
|
|
},
|
|
title: "修改用户名密码",
|
|
actions: [
|
|
InkWell(
|
|
onTap: () {
|
|
submit();
|
|
},
|
|
child: const Padding(
|
|
padding: EdgeInsets.symmetric(
|
|
horizontal: 15,
|
|
),
|
|
child: Center(
|
|
child: Text(
|
|
"提交",
|
|
style: TextStyle(
|
|
color: Colors.white,
|
|
fontSize: 16,
|
|
),
|
|
),
|
|
),
|
|
),
|
|
)
|
|
],
|
|
),
|
|
body: Column(
|
|
mainAxisSize: MainAxisSize.min,
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
mainAxisAlignment: MainAxisAlignment.start,
|
|
children: [
|
|
Padding(
|
|
padding: const EdgeInsets.symmetric(
|
|
horizontal: 15,
|
|
),
|
|
child: Column(
|
|
mainAxisSize: MainAxisSize.min,
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
children: [
|
|
const SizedBox(
|
|
height: 15,
|
|
),
|
|
const Text(
|
|
"用户名:",
|
|
style: TextStyle(
|
|
fontSize: 16,
|
|
fontWeight: FontWeight.w600,
|
|
),
|
|
),
|
|
TextField(
|
|
focusNode: focusNode,
|
|
controller: _nameController,
|
|
decoration: const InputDecoration(
|
|
contentPadding: EdgeInsets.fromLTRB(0, 5, 0, 5),
|
|
hintText: "请输入用户名",
|
|
),
|
|
autofocus: false,
|
|
),
|
|
],
|
|
),
|
|
),
|
|
Padding(
|
|
padding: const EdgeInsets.symmetric(
|
|
horizontal: 15,
|
|
),
|
|
child: Column(
|
|
mainAxisSize: MainAxisSize.min,
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
children: [
|
|
const SizedBox(
|
|
height: 15,
|
|
),
|
|
const Text(
|
|
"新密码:",
|
|
style: TextStyle(
|
|
fontSize: 16,
|
|
fontWeight: FontWeight.w600,
|
|
),
|
|
),
|
|
TextField(
|
|
obscureText: true,
|
|
controller: _passwordController,
|
|
maxLines: 1,
|
|
decoration: const InputDecoration(
|
|
contentPadding: EdgeInsets.fromLTRB(0, 5, 0, 5),
|
|
hintText: "请输入新密码",
|
|
),
|
|
autofocus: false,
|
|
),
|
|
],
|
|
),
|
|
),
|
|
Padding(
|
|
padding: const EdgeInsets.symmetric(
|
|
horizontal: 15,
|
|
),
|
|
child: Column(
|
|
mainAxisSize: MainAxisSize.min,
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
children: [
|
|
const SizedBox(
|
|
height: 15,
|
|
),
|
|
const Text(
|
|
"再次输入新密码:",
|
|
style: TextStyle(
|
|
fontSize: 16,
|
|
fontWeight: FontWeight.w600,
|
|
),
|
|
),
|
|
TextField(
|
|
obscureText: true,
|
|
maxLines: 1,
|
|
controller: _passwordAgainController,
|
|
decoration: const InputDecoration(
|
|
contentPadding: EdgeInsets.fromLTRB(0, 5, 0, 5),
|
|
hintText: "再次输入新密码",
|
|
),
|
|
autofocus: false,
|
|
),
|
|
],
|
|
),
|
|
),
|
|
],
|
|
),
|
|
);
|
|
}
|
|
|
|
void submit() async {
|
|
if (_nameController.text.isEmpty) {
|
|
"用户名不能为空".toast();
|
|
return;
|
|
}
|
|
if (_passwordController.text.isEmpty ||
|
|
_passwordAgainController.text.isEmpty) {
|
|
"密码不能为空".toast();
|
|
return;
|
|
}
|
|
|
|
if (_passwordAgainController.text != _passwordController.text) {
|
|
"两次输入的密码不一致".toast();
|
|
return;
|
|
}
|
|
|
|
commitReal();
|
|
}
|
|
|
|
void commitReal() async {
|
|
String name = _nameController.text;
|
|
String password = _passwordController.text;
|
|
HttpResponse<NullResponse> response =
|
|
await Api.updatePassword(name, password);
|
|
|
|
if (response.success) {
|
|
"更新成功".toast();
|
|
|
|
if (!getIt<UserInfoViewModel>().useSecretLogined) {
|
|
getIt<UserInfoViewModel>().updateUserName(
|
|
getIt<UserInfoViewModel>().host ?? "", name, password, false);
|
|
}
|
|
Navigator.of(context)
|
|
.pushNamedAndRemoveUntil(Routes.routeLogin, (route) => false);
|
|
} else {
|
|
response.message.toast();
|
|
}
|
|
}
|
|
}
|