|
|
|
@ -1,12 +1,13 @@ |
|
|
|
import 'dart:async'; |
|
|
|
import 'package:dating_touchme_app/controller/global.dart'; |
|
|
|
import 'package:flutter/material.dart'; |
|
|
|
import 'package:get/get.dart'; |
|
|
|
import 'package:get_storage/get_storage.dart'; |
|
|
|
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; |
|
|
|
import '../../network/user_api.dart'; |
|
|
|
import 'user_controller.dart'; |
|
|
|
|
|
|
|
class LoginController extends GetxController { |
|
|
|
class LoginController extends GetxController with WidgetsBindingObserver { |
|
|
|
// 手机号输入 |
|
|
|
final phoneNumber = ''.obs; |
|
|
|
// 验证码输入 |
|
|
|
@ -18,6 +19,10 @@ class LoginController extends GetxController { |
|
|
|
// 是否正在登录中 |
|
|
|
final isLoggingIn = false.obs; |
|
|
|
|
|
|
|
DateTime? startTime; |
|
|
|
|
|
|
|
Timer? codeTimer; |
|
|
|
|
|
|
|
// 从GetX依赖注入中获取UserApi实例 |
|
|
|
late UserApi _userApi; |
|
|
|
// GetStorage实例,用于存储token等信息 |
|
|
|
@ -28,6 +33,22 @@ class LoginController extends GetxController { |
|
|
|
super.onInit(); |
|
|
|
// 从全局依赖中获取UserApi |
|
|
|
_userApi = Get.find<UserApi>(); |
|
|
|
|
|
|
|
WidgetsBinding.instance.addObserver(this); |
|
|
|
} |
|
|
|
|
|
|
|
@override |
|
|
|
void onClose() { |
|
|
|
super.onClose(); |
|
|
|
WidgetsBinding.instance.removeObserver(this); |
|
|
|
codeTimer?.cancel(); |
|
|
|
} |
|
|
|
|
|
|
|
@override |
|
|
|
void didChangeAppLifecycleState(AppLifecycleState state) { |
|
|
|
if (state == AppLifecycleState.resumed) { |
|
|
|
_recalcLeftSeconds(); // 回到前台时根据真实时间重新算一遍 |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// 获取验证码 |
|
|
|
@ -69,8 +90,9 @@ class LoginController extends GetxController { |
|
|
|
|
|
|
|
// 开始倒计时 |
|
|
|
void startCountdown() { |
|
|
|
startTime = DateTime.now(); |
|
|
|
countdownSeconds.value = 60; |
|
|
|
Timer.periodic(const Duration(seconds: 1), (timer) { |
|
|
|
codeTimer = Timer.periodic(const Duration(seconds: 1), (timer) { |
|
|
|
countdownSeconds.value--; |
|
|
|
if (countdownSeconds.value <= 0) { |
|
|
|
timer.cancel(); |
|
|
|
@ -78,6 +100,24 @@ class LoginController extends GetxController { |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void _recalcLeftSeconds() { |
|
|
|
|
|
|
|
if (startTime == null) return; |
|
|
|
|
|
|
|
final now = DateTime.now(); |
|
|
|
final diff = now.difference(startTime!).inSeconds; |
|
|
|
final left = 60 - diff; |
|
|
|
|
|
|
|
if (left <= 0) { |
|
|
|
countdownSeconds.value = 0; |
|
|
|
codeTimer?.cancel(); |
|
|
|
} else { |
|
|
|
countdownSeconds.value = left; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// 清除错误信息 - 由于使用SmartDialog,此方法不再需要 |
|
|
|
// void clearErrorMessage() {} |
|
|
|
|
|
|
|
|