有一个地方需要注意,button的禁用状态,没有对应的属性,只能是在onPress
的时候返回null
,但是如果多个button这么办呢?谷歌能想出这么奇葩的东西应该也是不容易
import 'dart:async';
import 'package:beautyapp/util/app_color.dart';
import 'package:flutter/material.dart';
class CounterButton extends StatefulWidget {
int totalCount;
VoidCallback getCodePress;
CounterButton({Key key, this.totalCount = 60, @required this.getCodePress})
: super(key: key);
@override
CounterButtonState createState() => CounterButtonState();
}
class CounterButtonState extends State<CounterButton> {
Timer _timer;
var _buttonTitle = '获取验证码';
var _buttonDisable = false;
int _count;
startTimer() {
_timer = Timer.periodic(Duration(milliseconds: 1000), (timer) {
_count--;
_buttonTitle = '${_count}秒';
_buttonDisable = true;
if (_count <= 0) {
_buttonDisable = false;
_buttonTitle = "再次获取";
_count = widget.totalCount;
timer.cancel();
}
setState(() {});
});
}
cancelTimer() {
_buttonDisable = false;
if (_timer != null) {
_timer.cancel();
}
}
tapSmsCode() {
//回调这里可以不要,直接在这里开始网络请求
widget.getCodePress();
}
@override
void dispose() {
super.dispose();
if (_timer != null) {
_timer.cancel();
}
}
@override
void initState() {
super.initState();
_count = widget.totalCount;
}
@override
Widget build(BuildContext context) {
print("_buttonTitle:${_buttonTitle}");
return Container(
child: FlatButton(
onPressed: _buttonDisable == true ? null : tapSmsCode,
child: Text(_buttonTitle),
textColor: AppCustomColor.themeGreenColor,
disabledTextColor: AppCustomColor.themeGreenColor,
),
);
}
}