
import 'dart:async';

import 'package:zhiying_comm/zhiying_comm.dart';
import 'package:flutter/material.dart';


class VcodeWidget extends StatefulWidget {
  // 按钮文字
  final String btnText;
  // 按钮等待文字
  final String btnAwaitText;
  // 按钮文字的颜色
  final String btnTextColor;
  // 按钮的背景颜色
  final String color;
  // 禁用文字的颜色
  final String disabledTextColor;
  // 禁用按钮的背景颜色
  final String disabledColor;
  // 等待时长
  final int awaitTime;
  // 高
  final double height;
  final double width;
  final double border;
  final OnClickListener onCallBack;


  const VcodeWidget({
    this.btnText,
    this.btnAwaitText,
    this.btnTextColor,
    this.color,
    this.disabledTextColor,
    this.disabledColor,
    this.awaitTime,
    this.onCallBack,
    this.border = 8,
    this.height = 30,
    this.width = 82});

  @override
  _VcodeWidgetState createState() => _VcodeWidgetState();
}

class _VcodeWidgetState extends State<VcodeWidget> {

  /// 是否可以获取验证码
  bool _canGetVcode = true;
  /// 倒计时
  Timer _timer;
  int _countdownTime = 0;

  /// 获取验证码
  void _getVcodeOnClick() {
    // print('获取验证码');
    if(widget.onCallBack.onVcodeClick()) {
      int count = widget?.awaitTime ?? 60;
      startCountdownTimer(count);
    }
  }

  /// 开始倒计时
  void startCountdownTimer(int countTime) {
    const oneSec = const Duration(seconds: 1);
    setState(() {
      _canGetVcode = false;
      _countdownTime = countTime;
    });

    var callback = (timer) => {
      setState(() {
        if (_countdownTime < 1) {
          _canGetVcode = true;
          _timer.cancel();
          _countdownTime = countTime; // 重置倒计时
        } else {
          _countdownTime = _countdownTime - 1;
          _canGetVcode = false;
        }
      })
    };

    _timer = Timer.periodic(oneSec, callback);
  }

  @override
  void dispose() {
    _timer?.cancel();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Material(
      child: Container(
        alignment: Alignment.center,
        height: widget?.height ?? 30,
        width: widget?.width ?? 82,
        margin: const EdgeInsets.only(right: 6),
        child: RaisedButton(
          onPressed: _canGetVcode ? ()=> _getVcodeOnClick() : null,
          padding: EdgeInsets.zero,
          child: Text(_canGetVcode ? ( widget?.btnText ?? '获取验证码') : '${_countdownTime}${widget?.btnAwaitText ?? '秒'}',
              style: TextStyle(color: HexColor.fromHex( widget?.btnTextColor ?? '#FFFFFF'), fontSize: 11)),
          disabledTextColor: HexColor.fromHex( widget?.disabledTextColor ?? '#FFFFFF'),
          disabledColor: HexColor.fromHex( widget?.disabledColor ?? '#DDDDDD'),
          color: HexColor.fromHex( widget?.color ?? '#FF4343'),
          textColor: HexColor.fromHex( widget?.btnTextColor ?? '#FFFFFF'),
          elevation: 4,
          shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(widget?.border ?? 8)),
        ),
      ),
    );
  }
}

abstract class OnClickListener{
  bool onVcodeClick();
}
