如何解决在Complete
嘿,我试图在每次计数到60时重新启动CircularCountDownTimer,
我希望它与onComplete()有关,但我不知道如何重新启动它。
任何帮助表示感谢,谢谢。
这是CircularTimer小部件:
CircularCountDownTimer(
duration: 60,width: MediaQuery.of(context).size.width,height: MediaQuery.of(context).size.height,color: Colors.grey[300],fillColor: Colors.yellow[800],strokeWidth: 4.0,textStyle: TextStyle(
fontSize: 0.0,color: Colors.black87,fontWeight: FontWeight.bold),isReverse: false,onComplete: () {
setState(() {
min --;
});
},)
解决方法
您可以在下面复制粘贴运行完整代码
您可以在Key
中添加CircularCountDownTimer
,当在setState
中调用onComplete
时,CircularCountDownTimer
将重新启动,请参见工作演示
出于演示目的,我用10秒
第1步:修改circular_countdown_timer.dart
的源代码,在Key key
中添加super(key: key)
和constructor
CircularCountDownTimer(
{ Key key,//add here
@required this.width,@required this.height,@required this.duration,@required this.fillColor,@required this.color,this.isReverse,this.onComplete,this.strokeWidth,this.textStyle}) :
assert(width != null),assert(height != null),assert(duration != null),assert(fillColor != null),assert(color != null),super(key: key); //add here
第2步:在您的代码中,向UniqueKey()
提供CircularCountDownTimer
child: CircularCountDownTimer(
key: UniqueKey(),
工作演示
完整代码
import 'package:flutter/material.dart';
import 'package:circular_countdown_timer/circular_countdown_timer.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,title: 'Circular Countdown Timer Demo',theme: ThemeData(
primarySwatch: Colors.blue,),home: MyHomePage(title: 'Circular Countdown Timer'),);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key,this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),body: Center(
child: CircularCountDownTimer(
key: UniqueKey(),duration: 10,width: MediaQuery.of(context).size.width,height: MediaQuery.of(context).size.height,color: Colors.grey[300],fillColor: Colors.yellow[800],strokeWidth: 4.0,textStyle: TextStyle(
fontSize: 0.0,color: Colors.black87,fontWeight: FontWeight.bold),isReverse: false,onComplete: () {
print("complete");
setState(() {
//min--;
});
},)));
}
}
,
您可以使用provider包中的ChangeNotifier来重建小部件。这是一个例子。
import 'package:circular_countdown_timer/circular_countdown_timer.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
void main() {
runApp(
MultiProvider(
providers: [
ChangeNotifierProvider(create: (_) => ChangeWidget()),],child: MyApp(),);
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',visualDensity: VisualDensity.adaptivePlatformDensity,home: MyHomePage(title: 'Flutter Demo Home Page'),this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),body: Center(
child: Consumer<ChangeWidget>(
builder: (context,snapshot,_) {
return snapshot.init;
},floatingActionButton: FloatingActionButton(
onPressed: (){
Provider.of<ChangeWidget>(context,listen: false)
.playPause();
},child: Icon(Icons.close),);
}
}
class ChangeWidget extends ChangeNotifier {
int _i = 0;
bool _run = true;
playPause(){
if(_run){
_run = false;
}else{
_run = true;
restart();
}
}
Widget init = Builder(
key: Key("0"),builder: (context) => CircularCountDownTimer(
duration: 10,textStyle: TextStyle(
fontSize: 0.0,onComplete: () {
Provider.of<ChangeWidget>(context,listen: false)
.restart();
},));
restart() {
_i++;
init = Builder(
key: Key(_i.toString()),builder: (context) => CircularCountDownTimer(
duration: 10,textStyle: TextStyle(
fontSize: 0.0,onComplete: () {
if(_run){
restart();
}
},));
notifyListeners();
}
}
,
我已经更新了软件包circular_countdown_timer,并添加了名为CountDownController
的可选controller
参数,该参数用于控制(即暂停,恢复,重启)倒数计时器。您可以进一步检查软件包的READ_ME
和example.dart
文件以了解详细信息。谢谢
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。