| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- import 'dart:async';
- import 'dart:ui';
- import 'package:flutter/material.dart';
- import 'package:get/get.dart';
- import 'package:grpc/grpc.dart';
- import 'package:track_common/track_common.dart';
- import '../../utils.dart';
- abstract class LoginController extends GetxController {
- final phone = "".obs;
- final password = "".obs;
- final codeRetryLeft = 0.seconds.obs;
- Timer? ticker;
- var isSignInEnable = true;
- final isAgreeContract = false.obs;
- Future<Duration> getCodeLifeTime(String phone);
- Future<void> authSendCodeToPhone(String phone);
- Future<void> signIn(String phone, String code);
- @override
- void onInit() {
- super.onInit();
- ticker = Timer.periodic(1.seconds, (timer) {
- codeRetryLeft.value -= 1.seconds;
- });
- }
- void onGetCode() async {
- info("获取验证码");
- await tryApi(
- () async {
- codeRetryLeft.value = await getCodeLifeTime(phone.value);
- if (codeRetryLeft.value.inSeconds > 0) {
- return;
- }
- await authSendCodeToPhone(phone.value);
- codeRetryLeft.value = await getCodeLifeTime(phone.value);
- info("获取验证码结束");
- },
- errTitle: '获取验证码失败',
- onError: (e) async {
- if (e.code == StatusCode.notFound) {
- Get.snackbar('用户未注册', "请先注册",
- isDismissible: true, duration: 3.seconds);
- return true;
- }
- return false;
- });
- }
- Future<void> onSignIn() async {
- // if (!isAgreeContract.value) {
- // Get.snackbar('请先', '阅读并同意协议');
- // return;
- // }
- if (!isSignInEnable) {
- return;
- }
- try {
- isSignInEnable = false;
- if (phone.value.isEmpty) {
- Get.snackbar('手机号错误', "请重新输入");
- return;
- }
- if (password.value.isEmpty) {
- Get.snackbar('验证码错误', "请重新输入");
- return;
- }
- await tryApi(
- () async {
- info("登录 ${phone.value} ${password.value}");
- await signIn(phone.value, password.value);
- final call = Get.arguments;
- info("登录成功");
- if (call is VoidCallback) {
- call();
- } else {
- Get.back(result: true, closeOverlays: true);
- }
- },
- errTitle: '登录失败',
- onError: (e) async {
- 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 {
- @override
- Future<void> authSendCodeToPhone(String phone) {
- // TODO: implement authSendCodeToPhone
- throw UnimplementedError();
- }
- @override
- Future<Duration> getCodeLifeTime(String phone) {
- // TODO: implement getCodeLifeTime
- throw UnimplementedError();
- }
- @override
- Future<void> signIn(String phone, String code) {
- // TODO: implement signIn
- throw UnimplementedError();
- }
- }
|