|
- import 'dart:async';
-
- import 'package:flutter/cupertino.dart';
- import 'package:flutter/material.dart';
-
- class CountDownButton extends StatefulWidget{
-
- final String text;
- final Function countDownCallBack;
- final Function onPress;
- final int countDownTime;
- final AlignmentGeometry align;
- CountDownButton(this.text,this.countDownCallBack,{this.countDownTime=5*60,this.align=Alignment.center,this.onPress});
-
- @override
- State<StatefulWidget> createState() {
- // TODO: implement createState
- return CountDownButtonState();
- }
-
- }
- class CountDownButtonState extends State<CountDownButton> {
-
- int secondsPassed ;
- Timer timer;
- void handleTick() {
- // if (isActive) {
-
- if(secondsPassed==1){
- widget.countDownCallBack();
- timer?.cancel();
- return;
- }
-
- setState(() {
- secondsPassed = secondsPassed - 1; //需要更新UI
- });
- // }
- }
-
-
- getFull(int sec){
- return sec<10?'0$sec':'$sec';
- }
- @override
- void initState() {
- // TODO: implement initState
- super.initState();
- secondsPassed = widget.countDownTime;
- timer = Timer.periodic(Duration(seconds: 1), (Timer t){
- handleTick();
- });
- }
-
- @override
- void dispose() {
- // TODO: implement dispose
- super.dispose();
- timer?.cancel();
- }
-
- @override
- Widget build(BuildContext context) {
- // TODO: implement build
- // ~/ 取整操作
- int seconds = secondsPassed % 60;
- int minutes = secondsPassed ~/ 60;
- return Container(
- alignment: widget.align,
- // margin: EdgeInsets.only(left: 30, right: 30, top: 20,bottom: 20),
- height: 48,
- child: RaisedButton(
-
- color: Color(0xff3875E9),
- shape: RoundedRectangleBorder(
- borderRadius: BorderRadius.all(Radius.circular(10))),
- child: RichText(
- maxLines: 1,
- textAlign: TextAlign.center,
- text: TextSpan(children: [
- TextSpan(
- text: widget.text,
- style: TextStyle(
- color: Colors.white,
- fontSize: 16)),
- TextSpan(
- text:' ('+ getFull(minutes)+' : '+getFull(seconds)+')',
- style: TextStyle(
- color: Colors.white, fontSize: 13)),
- ])) ,
- onPressed: widget.onPress),
- );
- }
-
- }
-
-
|