import 'dart:async'; import 'package:flutter/foundation.dart'; import 'package:flutter/scheduler.dart'; import 'package:get/get.dart'; import 'package:grpc/grpc.dart'; import 'package:trackoffical_app/logger.dart'; import 'package:trackoffical_app/service/api.dart'; import 'package:trackoffical_app/pb.dart' as pb; import 'package:trackoffical_app/service/game/game.dart'; import 'package:trackoffical_app/service/game/game_manager_service.dart'; import 'package:trackoffical_app/view/ingame/game_std/game_std_view.dart'; import '../../route.dart'; import '../../utils.dart'; class LoginController extends GetxController { final phone = "".obs; final password = "".obs; final codeRetryLeft = 0.seconds.obs; Timer? ticker; var isSignInEnable = true; final isAgreeContract = false.obs; @override void onInit() { super.onInit(); ticker = Timer.periodic(1.seconds, (timer) { codeRetryLeft.value -= 1.seconds; }); } void onGetCode() async { info("获取验证码"); await tryCatchApi( () async { codeRetryLeft.value = await ApiService.to.getSmsSendLeftTime(phone.value); if (codeRetryLeft.value.inSeconds > 0) { return; } await ApiService.to .authSendCodeToPhone(phone.value, pb.SmsType.Login); codeRetryLeft.value = await ApiService.to.getSmsSendLeftTime(phone.value); info("获取验证码结束"); }, errTitle: '获取验证码失败', onError: (e) { if (e.code == StatusCode.notFound) { Get.snackbar('用户未注册', "请先注册", isDismissible: true, duration: 3.seconds); return true; } return false; }); } Future onSignIn() async { if (!isAgreeContract.value) { Get.snackbar('请先', '阅读并同意协议'); return; } if (!isSignInEnable) { return; } try { isSignInEnable = false; if (phone.value.isEmpty) { Get.snackbar('手机号错误', "请重新输入", isDismissible: true, duration: 3.seconds); return; } if (password.value.isEmpty) { Get.snackbar('验证码错误', "请重新输入", isDismissible: true, duration: 3.seconds); return; } final args = Get.arguments; await tryCatchApi( () async { info("登录 ${phone.value} ${password.value}"); await ApiService.to.signIn(phone.value, password.value); if (Get.previousRoute == RouteName.signIn) { Get.offAllNamed(RouteName.home); } else { Get.back(result: true, closeOverlays: true); } info("登录成功"); }, errTitle: '登录失败', onError: (e) { switch (e.code) { case StatusCode.unauthenticated: Get.snackbar('登录失败', "验证码错误"); return true; case StatusCode.notFound: Get.snackbar('用户未注册', "请先注册"); return true; default: return false; } }); } finally { isSignInEnable = true; } } @override void onClose() { ticker?.cancel(); } } class LoginControllerMock extends LoginController {}