在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(),

工作演示

enter image description here

完整代码

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_MEexample.dart文件以了解详细信息。谢谢