Asynchronous 如何在Flatter应用程序中显示5分钟不可停止计时器?

Asynchronous 如何在Flatter应用程序中显示5分钟不可停止计时器?,asynchronous,timer,dart,flutter,Asynchronous,Timer,Dart,Flutter,我想在我的应用程序中显示一个5分钟计时器,即使应用程序关闭也不会停止,并以mm:ss格式显示剩余时间。如何显示时间?下面是一个非常基本的示例,说明了这种计时器是如何工作的,它可以持久地存储目标时间: class TimerApp extends StatefulWidget { @override _TimerAppState createState() => _TimerAppState(); } class _TimerAppState extends State<Ti

我想在我的应用程序中显示一个5分钟计时器,即使应用程序关闭也不会停止,并以mm:ss格式显示剩余时间。如何显示时间?

下面是一个非常基本的示例,说明了这种计时器是如何工作的,它可以持久地存储目标时间:

class TimerApp extends StatefulWidget {
  @override
  _TimerAppState createState() => _TimerAppState();
}

class _TimerAppState extends State<TimerApp> {
  SharedPreferences prefs;
  DateTime target;
  String timeLeft = "";
  bool running = true;

  @override
  void initState() async {
    super.initState();

    prefs = await SharedPreferences.getInstance();
    target = DateTime.fromMillisecondsSinceEpoch(prefs.getInt('target'));

    if (target == null || target < DateTime.now()) {
      target = DateTime.now().add(Duration(minutes: 5));
    }
    executeTimer();
  }

  @override
  void dispose() {
    prefs.setInt('target', target.millisecondsSinceEpoch);
    running = false;
    super.dispose();
  }

  void executeTimer() async {
    while (running) {
      setState(() {
        timeLeft = DateTime.now().isAfter(target)
          ? '5 min expired. Restart app to reset.'
          : target.difference(DateTime.now()).toString();
      });
      await Future.delayed(Duration(seconds: 1), () {});
    }
  }

  @override
  Widget build(BuildContext context) {
    return Align(
      alignment: Alignment.center,
      child: Text(timeLeft),
    );
  }
}
class TimerApp扩展StatefulWidget{
@凌驾
_TimerAppState createState();
}
类_TimerAppState扩展状态{
共享引用优先权;
日期时间目标;
字符串timeLeft=“”;
bool running=true;
@凌驾
void initState()异步{
super.initState();
prefs=等待SharedReferences.getInstance();
target=DateTime.froms毫秒新纪元(prefs.getInt('target');
if(target==null | | target
注意,这个例子不是很充实;缺少一些功能,在(运行)时使用
循环可能不是最优雅的解决方案

以下是您可以查看的更多资源:

  • 持续保存状态的方法
  • 它使用一种更复杂的状态管理形式

然后,您需要一个持久性存储,例如,看看这个插件:并存储初始时间和计时器的值。持久性不是我的问题,我如何显示剩余时间?这肯定会有帮助!非常感谢:)我会试试这个。