mirror of
https://github.com/qinglong-app/qinglong_app.git
synced 2025-10-09 16:48:19 +08:00
增加两步验证提醒
This commit is contained in:
@@ -2,6 +2,7 @@ import 'package:qinglong_app/base/http/http.dart';
|
|||||||
import 'package:qinglong_app/module/config/config_bean.dart';
|
import 'package:qinglong_app/module/config/config_bean.dart';
|
||||||
import 'package:qinglong_app/module/env/env_bean.dart';
|
import 'package:qinglong_app/module/env/env_bean.dart';
|
||||||
import 'package:qinglong_app/module/login/login_bean.dart';
|
import 'package:qinglong_app/module/login/login_bean.dart';
|
||||||
|
import 'package:qinglong_app/module/login/user_bean.dart';
|
||||||
import 'package:qinglong_app/module/others/dependencies/dependency_bean.dart';
|
import 'package:qinglong_app/module/others/dependencies/dependency_bean.dart';
|
||||||
import 'package:qinglong_app/module/others/login_log/login_log_bean.dart';
|
import 'package:qinglong_app/module/others/login_log/login_log_bean.dart';
|
||||||
import 'package:qinglong_app/module/others/scripts/script_bean.dart';
|
import 'package:qinglong_app/module/others/scripts/script_bean.dart';
|
||||||
@@ -12,8 +13,7 @@ import 'package:qinglong_app/module/task/task_detail/task_detail_bean.dart';
|
|||||||
import 'url.dart';
|
import 'url.dart';
|
||||||
|
|
||||||
class Api {
|
class Api {
|
||||||
static Future<HttpResponse<LoginBean>> login(
|
static Future<HttpResponse<LoginBean>> login(String userName, String passWord) async {
|
||||||
String userName, String passWord) async {
|
|
||||||
return await Http.post<LoginBean>(
|
return await Http.post<LoginBean>(
|
||||||
Url.login,
|
Url.login,
|
||||||
{
|
{
|
||||||
@@ -23,6 +23,13 @@ class Api {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static Future<HttpResponse<UserBean>> user() async {
|
||||||
|
return await Http.get<UserBean>(
|
||||||
|
Url.user,
|
||||||
|
null,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
static Future<HttpResponse<List<TaskBean>>> crons() async {
|
static Future<HttpResponse<List<TaskBean>>> crons() async {
|
||||||
return await Http.get<List<TaskBean>>(
|
return await Http.get<List<TaskBean>>(
|
||||||
Url.tasks,
|
Url.tasks,
|
||||||
@@ -30,16 +37,14 @@ class Api {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
static Future<HttpResponse<NullResponse>> startTasks(
|
static Future<HttpResponse<NullResponse>> startTasks(List<String> crons) async {
|
||||||
List<String> crons) async {
|
|
||||||
return await Http.put<NullResponse>(
|
return await Http.put<NullResponse>(
|
||||||
Url.runTasks,
|
Url.runTasks,
|
||||||
crons,
|
crons,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
static Future<HttpResponse<NullResponse>> stopTasks(
|
static Future<HttpResponse<NullResponse>> stopTasks(List<String> crons) async {
|
||||||
List<String> crons) async {
|
|
||||||
return await Http.put<NullResponse>(
|
return await Http.put<NullResponse>(
|
||||||
Url.runTasks,
|
Url.runTasks,
|
||||||
crons,
|
crons,
|
||||||
@@ -60,9 +65,7 @@ class Api {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
static Future<HttpResponse<TaskDetailBean>> addTask(
|
static Future<HttpResponse<TaskDetailBean>> addTask(String name, String command, String cron, {String? id}) async {
|
||||||
String name, String command, String cron,
|
|
||||||
{String? id}) async {
|
|
||||||
var data = {"name": name, "command": command, "schedule": cron};
|
var data = {"name": name, "command": command, "schedule": cron};
|
||||||
|
|
||||||
if (id != null) {
|
if (id != null) {
|
||||||
@@ -127,8 +130,7 @@ class Api {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
static Future<HttpResponse<NullResponse>> saveFile(
|
static Future<HttpResponse<NullResponse>> saveFile(String name, String content) async {
|
||||||
String name, String content) async {
|
|
||||||
return await Http.post<NullResponse>(
|
return await Http.post<NullResponse>(
|
||||||
Url.saveFile,
|
Url.saveFile,
|
||||||
{"content": content, "name": name},
|
{"content": content, "name": name},
|
||||||
@@ -163,9 +165,7 @@ class Api {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
static Future<HttpResponse<NullResponse>> addEnv(
|
static Future<HttpResponse<NullResponse>> addEnv(String name, String value, String remarks, {String? id}) async {
|
||||||
String name, String value, String remarks,
|
|
||||||
{String? id}) async {
|
|
||||||
var data = {
|
var data = {
|
||||||
"value": value,
|
"value": value,
|
||||||
"remarks": remarks,
|
"remarks": remarks,
|
||||||
@@ -185,8 +185,7 @@ class Api {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
static Future<HttpResponse<NullResponse>> moveEnv(
|
static Future<HttpResponse<NullResponse>> moveEnv(String id, int fromIndex, int toIndex) async {
|
||||||
String id, int fromIndex, int toIndex) async {
|
|
||||||
return await Http.put<NullResponse>(
|
return await Http.put<NullResponse>(
|
||||||
Url.envMove(id),
|
Url.envMove(id),
|
||||||
{"fromIndex": fromIndex, "toIndex": toIndex},
|
{"fromIndex": fromIndex, "toIndex": toIndex},
|
||||||
@@ -201,8 +200,7 @@ class Api {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static Future<HttpResponse<List<TaskLogBean>>> taskLog() async {
|
static Future<HttpResponse<List<TaskLogBean>>> taskLog() async {
|
||||||
return await Http.get<List<TaskLogBean>>(Url.taskLog, null,
|
return await Http.get<List<TaskLogBean>>(Url.taskLog, null, serializationName: "dirs");
|
||||||
serializationName: "dirs");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static Future<HttpResponse<String>> taskLogDetail(String name) async {
|
static Future<HttpResponse<String>> taskLogDetail(String name) async {
|
||||||
@@ -219,8 +217,7 @@ class Api {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
static Future<HttpResponse<String>> scriptDetail(
|
static Future<HttpResponse<String>> scriptDetail(String name, String? path) async {
|
||||||
String name, String? path) async {
|
|
||||||
return await Http.get<String>(
|
return await Http.get<String>(
|
||||||
Url.scriptDetail + name,
|
Url.scriptDetail + name,
|
||||||
{
|
{
|
||||||
@@ -229,8 +226,7 @@ class Api {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
static Future<HttpResponse<List<DependencyBean>>> dependencies(
|
static Future<HttpResponse<List<DependencyBean>>> dependencies(String type) async {
|
||||||
String type) async {
|
|
||||||
return await Http.get<List<DependencyBean>>(
|
return await Http.get<List<DependencyBean>>(
|
||||||
Url.dependencies,
|
Url.dependencies,
|
||||||
{
|
{
|
||||||
@@ -239,8 +235,7 @@ class Api {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
static Future<HttpResponse<NullResponse>> dependencyReinstall(
|
static Future<HttpResponse<NullResponse>> dependencyReinstall(String id) async {
|
||||||
String id) async {
|
|
||||||
return await Http.put<NullResponse>(
|
return await Http.put<NullResponse>(
|
||||||
Url.dependencies,
|
Url.dependencies,
|
||||||
[id],
|
[id],
|
||||||
@@ -254,8 +249,7 @@ class Api {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
static Future<HttpResponse<NullResponse>> addDependency(
|
static Future<HttpResponse<NullResponse>> addDependency(String name, int type) async {
|
||||||
String name, int type) async {
|
|
||||||
return await Http.post<NullResponse>(
|
return await Http.post<NullResponse>(
|
||||||
Url.dependencies,
|
Url.dependencies,
|
||||||
[
|
[
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
class Url {
|
class Url {
|
||||||
static const login = "/api/user/login";
|
static const login = "/api/user/login";
|
||||||
|
static const user = "/api/user";
|
||||||
static const tasks = "/api/crons";
|
static const tasks = "/api/crons";
|
||||||
static const runTasks = "/api/crons/run";
|
static const runTasks = "/api/crons/run";
|
||||||
static const stopTasks = "/api/crons/stop";
|
static const stopTasks = "/api/crons/stop";
|
||||||
|
|||||||
132
lib/json.jc.dart
132
lib/json.jc.dart
@@ -3,6 +3,7 @@
|
|||||||
import 'package:qinglong_app/module/config/config_bean.dart';
|
import 'package:qinglong_app/module/config/config_bean.dart';
|
||||||
import 'package:qinglong_app/module/env/env_bean.dart';
|
import 'package:qinglong_app/module/env/env_bean.dart';
|
||||||
import 'package:qinglong_app/module/login/login_bean.dart';
|
import 'package:qinglong_app/module/login/login_bean.dart';
|
||||||
|
import 'package:qinglong_app/module/login/user_bean.dart';
|
||||||
import 'package:qinglong_app/module/others/dependencies/dependency_bean.dart';
|
import 'package:qinglong_app/module/others/dependencies/dependency_bean.dart';
|
||||||
import 'package:qinglong_app/module/others/login_log/login_log_bean.dart';
|
import 'package:qinglong_app/module/others/login_log/login_log_bean.dart';
|
||||||
import 'package:qinglong_app/module/others/scripts/script_bean.dart';
|
import 'package:qinglong_app/module/others/scripts/script_bean.dart';
|
||||||
@@ -10,8 +11,10 @@ import 'package:qinglong_app/module/others/task_log/task_log_bean.dart';
|
|||||||
import 'package:qinglong_app/module/task/task_bean.dart';
|
import 'package:qinglong_app/module/task/task_bean.dart';
|
||||||
import 'package:qinglong_app/module/task/task_detail/task_detail_bean.dart';
|
import 'package:qinglong_app/module/task/task_detail/task_detail_bean.dart';
|
||||||
|
|
||||||
|
|
||||||
class JsonConversion$Json {
|
class JsonConversion$Json {
|
||||||
static M fromJson<M>(dynamic json) {
|
|
||||||
|
static M fromJson<M>(dynamic json) {
|
||||||
if (json is List) {
|
if (json is List) {
|
||||||
return _getListChildType<M>(json);
|
return _getListChildType<M>(json);
|
||||||
} else {
|
} else {
|
||||||
@@ -20,96 +23,93 @@ class JsonConversion$Json {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static M _fromJsonSingle<M>(dynamic json) {
|
static M _fromJsonSingle<M>(dynamic json) {
|
||||||
|
|
||||||
String type = M.toString();
|
String type = M.toString();
|
||||||
|
|
||||||
if (type == (ConfigBean).toString()) {
|
if(type == (ConfigBean).toString()){
|
||||||
return ConfigBean.jsonConversion(json) as M;
|
return ConfigBean.jsonConversion(json) as M;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (type == (EnvBean).toString()) {
|
if(type == (EnvBean).toString()){
|
||||||
return EnvBean.jsonConversion(json) as M;
|
return EnvBean.jsonConversion(json) as M;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (type == (LoginBean).toString()) {
|
if(type == (LoginBean).toString()){
|
||||||
return LoginBean.jsonConversion(json) as M;
|
return LoginBean.jsonConversion(json) as M;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (type == (DependencyBean).toString()) {
|
if(type == (UserBean).toString()){
|
||||||
return DependencyBean.jsonConversion(json) as M;
|
return UserBean.jsonConversion(json) as M;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (type == (LoginLogBean).toString()) {
|
if(type == (DependencyBean).toString()){
|
||||||
return LoginLogBean.jsonConversion(json) as M;
|
return DependencyBean.jsonConversion(json) as M;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (type == (ScriptBean).toString()) {
|
if(type == (LoginLogBean).toString()){
|
||||||
return ScriptBean.jsonConversion(json) as M;
|
return LoginLogBean.jsonConversion(json) as M;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (type == (TaskLogBean).toString()) {
|
if(type == (ScriptBean).toString()){
|
||||||
return TaskLogBean.jsonConversion(json) as M;
|
return ScriptBean.jsonConversion(json) as M;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (type == (TaskBean).toString()) {
|
if(type == (TaskLogBean).toString()){
|
||||||
return TaskBean.jsonConversion(json) as M;
|
return TaskLogBean.jsonConversion(json) as M;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (type == (TaskDetailBean).toString()) {
|
if(type == (TaskBean).toString()){
|
||||||
return TaskDetailBean.jsonConversion(json) as M;
|
return TaskBean.jsonConversion(json) as M;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(type == (TaskDetailBean).toString()){
|
||||||
|
return TaskDetailBean.jsonConversion(json) as M;
|
||||||
|
}
|
||||||
|
|
||||||
throw Exception("not found");
|
throw Exception("not found");
|
||||||
}
|
}
|
||||||
|
|
||||||
static M _getListChildType<M>(List<dynamic> data) {
|
static M _getListChildType<M>(List<dynamic> data) {
|
||||||
if (<ConfigBean>[] is M) {
|
if(<ConfigBean>[] is M){
|
||||||
return data.map<ConfigBean>((e) => ConfigBean.jsonConversion(e)).toList()
|
return data.map<ConfigBean>((e) => ConfigBean.jsonConversion(e)).toList() as M;
|
||||||
as M;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (<EnvBean>[] is M) {
|
if(<EnvBean>[] is M){
|
||||||
return data.map<EnvBean>((e) => EnvBean.jsonConversion(e)).toList() as M;
|
return data.map<EnvBean>((e) => EnvBean.jsonConversion(e)).toList() as M;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (<LoginBean>[] is M) {
|
if(<LoginBean>[] is M){
|
||||||
return data.map<LoginBean>((e) => LoginBean.jsonConversion(e)).toList()
|
return data.map<LoginBean>((e) => LoginBean.jsonConversion(e)).toList() as M;
|
||||||
as M;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (<DependencyBean>[] is M) {
|
if(<UserBean>[] is M){
|
||||||
return data
|
return data.map<UserBean>((e) => UserBean.jsonConversion(e)).toList() as M;
|
||||||
.map<DependencyBean>((e) => DependencyBean.jsonConversion(e))
|
|
||||||
.toList() as M;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (<LoginLogBean>[] is M) {
|
if(<DependencyBean>[] is M){
|
||||||
return data
|
return data.map<DependencyBean>((e) => DependencyBean.jsonConversion(e)).toList() as M;
|
||||||
.map<LoginLogBean>((e) => LoginLogBean.jsonConversion(e))
|
|
||||||
.toList() as M;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (<ScriptBean>[] is M) {
|
if(<LoginLogBean>[] is M){
|
||||||
return data.map<ScriptBean>((e) => ScriptBean.jsonConversion(e)).toList()
|
return data.map<LoginLogBean>((e) => LoginLogBean.jsonConversion(e)).toList() as M;
|
||||||
as M;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (<TaskLogBean>[] is M) {
|
if(<ScriptBean>[] is M){
|
||||||
return data
|
return data.map<ScriptBean>((e) => ScriptBean.jsonConversion(e)).toList() as M;
|
||||||
.map<TaskLogBean>((e) => TaskLogBean.jsonConversion(e))
|
|
||||||
.toList() as M;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (<TaskBean>[] is M) {
|
if(<TaskLogBean>[] is M){
|
||||||
return data.map<TaskBean>((e) => TaskBean.jsonConversion(e)).toList()
|
return data.map<TaskLogBean>((e) => TaskLogBean.jsonConversion(e)).toList() as M;
|
||||||
as M;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (<TaskDetailBean>[] is M) {
|
if(<TaskBean>[] is M){
|
||||||
return data
|
return data.map<TaskBean>((e) => TaskBean.jsonConversion(e)).toList() as M;
|
||||||
.map<TaskDetailBean>((e) => TaskDetailBean.jsonConversion(e))
|
|
||||||
.toList() as M;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(<TaskDetailBean>[] is M){
|
||||||
|
return data.map<TaskDetailBean>((e) => TaskDetailBean.jsonConversion(e)).toList() as M;
|
||||||
|
}
|
||||||
|
|
||||||
throw Exception("not found");
|
throw Exception("not found");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import 'package:qinglong_app/base/routes.dart';
|
|||||||
import 'package:qinglong_app/base/theme.dart';
|
import 'package:qinglong_app/base/theme.dart';
|
||||||
import 'package:qinglong_app/base/userinfo_viewmodel.dart';
|
import 'package:qinglong_app/base/userinfo_viewmodel.dart';
|
||||||
import 'package:qinglong_app/main.dart';
|
import 'package:qinglong_app/main.dart';
|
||||||
|
import 'package:qinglong_app/module/login/user_bean.dart';
|
||||||
import 'package:qinglong_app/utils/extension.dart';
|
import 'package:qinglong_app/utils/extension.dart';
|
||||||
import 'package:qinglong_app/utils/utils.dart';
|
import 'package:qinglong_app/utils/utils.dart';
|
||||||
|
|
||||||
@@ -20,8 +21,7 @@ class LoginPage extends ConsumerStatefulWidget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class _LoginPageState extends ConsumerState<LoginPage> {
|
class _LoginPageState extends ConsumerState<LoginPage> {
|
||||||
final TextEditingController _hostController =
|
final TextEditingController _hostController = TextEditingController(text: getIt<UserInfoViewModel>().host);
|
||||||
TextEditingController(text: getIt<UserInfoViewModel>().host);
|
|
||||||
final TextEditingController _userNameController = TextEditingController();
|
final TextEditingController _userNameController = TextEditingController();
|
||||||
final TextEditingController _passwordController = TextEditingController();
|
final TextEditingController _passwordController = TextEditingController();
|
||||||
|
|
||||||
@@ -31,15 +31,13 @@ class _LoginPageState extends ConsumerState<LoginPage> {
|
|||||||
void initState() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
|
|
||||||
if (getIt<UserInfoViewModel>().userName != null &&
|
if (getIt<UserInfoViewModel>().userName != null && getIt<UserInfoViewModel>().userName!.isNotEmpty) {
|
||||||
getIt<UserInfoViewModel>().userName!.isNotEmpty) {
|
|
||||||
_userNameController.text = getIt<UserInfoViewModel>().userName!;
|
_userNameController.text = getIt<UserInfoViewModel>().userName!;
|
||||||
rememberPassword = true;
|
rememberPassword = true;
|
||||||
} else {
|
} else {
|
||||||
rememberPassword = false;
|
rememberPassword = false;
|
||||||
}
|
}
|
||||||
if (getIt<UserInfoViewModel>().passWord != null &&
|
if (getIt<UserInfoViewModel>().passWord != null && getIt<UserInfoViewModel>().passWord!.isNotEmpty) {
|
||||||
getIt<UserInfoViewModel>().passWord!.isNotEmpty) {
|
|
||||||
_passwordController.text = getIt<UserInfoViewModel>().passWord!;
|
_passwordController.text = getIt<UserInfoViewModel>().passWord!;
|
||||||
}
|
}
|
||||||
getIt<UserInfoViewModel>().updateToken("");
|
getIt<UserInfoViewModel>().updateToken("");
|
||||||
@@ -199,25 +197,15 @@ class _LoginPageState extends ConsumerState<LoginPage> {
|
|||||||
SizedBox(
|
SizedBox(
|
||||||
width: MediaQuery.of(context).size.width - 80,
|
width: MediaQuery.of(context).size.width - 80,
|
||||||
child: IgnorePointer(
|
child: IgnorePointer(
|
||||||
ignoring: _hostController.text.isEmpty ||
|
ignoring: _hostController.text.isEmpty || _userNameController.text.isEmpty || _passwordController.text.isEmpty || isLoading,
|
||||||
_userNameController.text.isEmpty ||
|
|
||||||
_passwordController.text.isEmpty ||
|
|
||||||
isLoading,
|
|
||||||
child: CupertinoButton(
|
child: CupertinoButton(
|
||||||
padding: const EdgeInsets.symmetric(
|
padding: const EdgeInsets.symmetric(
|
||||||
vertical: 5,
|
vertical: 5,
|
||||||
),
|
),
|
||||||
color: (_hostController.text.isNotEmpty &&
|
color:
|
||||||
_userNameController.text.isNotEmpty &&
|
(_hostController.text.isNotEmpty && _userNameController.text.isNotEmpty && _passwordController.text.isNotEmpty && !isLoading)
|
||||||
_passwordController.text.isNotEmpty &&
|
? ref.watch(themeProvider).themeColor.buttonBgColor()
|
||||||
!isLoading)
|
: Theme.of(context).primaryColor.withOpacity(0.4),
|
||||||
? ref
|
|
||||||
.watch(themeProvider)
|
|
||||||
.themeColor
|
|
||||||
.buttonBgColor()
|
|
||||||
: Theme.of(context)
|
|
||||||
.primaryColor
|
|
||||||
.withOpacity(0.4),
|
|
||||||
child: isLoading
|
child: isLoading
|
||||||
? const CupertinoActivityIndicator()
|
? const CupertinoActivityIndicator()
|
||||||
: const Text(
|
: const Text(
|
||||||
@@ -228,17 +216,13 @@ class _LoginPageState extends ConsumerState<LoginPage> {
|
|||||||
),
|
),
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
if (rememberPassword) {
|
if (rememberPassword) {
|
||||||
getIt<UserInfoViewModel>().updateUserName(
|
getIt<UserInfoViewModel>().updateUserName(_userNameController.text, _passwordController.text);
|
||||||
_userNameController.text,
|
|
||||||
_passwordController.text);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Http.pushedLoginPage = false;
|
Http.pushedLoginPage = false;
|
||||||
Utils.hideKeyBoard(context);
|
Utils.hideKeyBoard(context);
|
||||||
getIt<UserInfoViewModel>()
|
getIt<UserInfoViewModel>().updateHost(_hostController.text);
|
||||||
.updateHost(_hostController.text);
|
login(_userNameController.text, _passwordController.text);
|
||||||
login(_userNameController.text,
|
|
||||||
_passwordController.text);
|
|
||||||
}),
|
}),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
@@ -260,8 +244,21 @@ class _LoginPageState extends ConsumerState<LoginPage> {
|
|||||||
setState(() {});
|
setState(() {});
|
||||||
HttpResponse<LoginBean> response = await Api.login(userName, password);
|
HttpResponse<LoginBean> response = await Api.login(userName, password);
|
||||||
if (response.success) {
|
if (response.success) {
|
||||||
getIt<UserInfoViewModel>().updateToken(response.bean?.token ?? "");
|
HttpResponse<UserBean> userResponse = await Api.user();
|
||||||
Navigator.of(context).pushReplacementNamed(Routes.routeHomePage);
|
if (userResponse.success) {
|
||||||
|
if (userResponse.bean != null && userResponse.bean!.twoFactorActivated != null && userResponse.bean!.twoFactorActivated!) {
|
||||||
|
("你已开启两步验证,App暂不支持").toast();
|
||||||
|
isLoading = false;
|
||||||
|
setState(() {});
|
||||||
|
} else {
|
||||||
|
getIt<UserInfoViewModel>().updateToken(response.bean?.token ?? "");
|
||||||
|
Navigator.of(context).pushReplacementNamed(Routes.routeHomePage);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
(response.message ?? "请检查网络情况").toast();
|
||||||
|
isLoading = false;
|
||||||
|
setState(() {});
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
(response.message ?? "请检查网络情况").toast();
|
(response.message ?? "请检查网络情况").toast();
|
||||||
isLoading = false;
|
isLoading = false;
|
||||||
|
|||||||
25
lib/module/login/user_bean.dart
Normal file
25
lib/module/login/user_bean.dart
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
import 'package:json_conversion_annotation/json_conversion_annotation.dart';
|
||||||
|
|
||||||
|
/// @author NewTab
|
||||||
|
@JsonConversion()
|
||||||
|
class UserBean {
|
||||||
|
String? username;
|
||||||
|
bool? twoFactorActivated;
|
||||||
|
|
||||||
|
UserBean({this.username, this.twoFactorActivated});
|
||||||
|
|
||||||
|
UserBean.fromJson(Map<String, dynamic> json) {
|
||||||
|
username = json['username'];
|
||||||
|
twoFactorActivated = json['twoFactorActivated'];
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||||
|
data['username'] = this.username;
|
||||||
|
data['twoFactorActivated'] = this.twoFactorActivated;
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
static UserBean jsonConversion(Map<String, dynamic> json) {
|
||||||
|
return UserBean.fromJson(json);
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user