flutter如何设置和使用duration

在Flutter中,Duration具体有哪些使用场景?比如动画、延迟执行等场景下该如何正确设置参数?官方文档提到的毫秒、秒等单位转换是否有更简便的写法?处理倒计时或间隔任务时,DurationTimer结合使用时需要注意什么?能否举例说明常见坑点?

2 回复

在Flutter中,使用Duration类设置时间间隔。例如:

Duration duration = Duration(seconds: 5);

常用属性:millisecondssecondsminutes等。可用于Future.delayed、动画控制器等场景。

更多关于flutter如何设置和使用duration的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中,Duration 类用于表示时间间隔,可以精确到微秒。以下是设置和使用方法:

1. 创建 Duration 对象

// 常用构造方法
Duration days = Duration(days: 1);        // 1天
Duration hours = Duration(hours: 2);      // 2小时
Duration minutes = Duration(minutes: 30); // 30分钟
Duration seconds = Duration(seconds: 45); // 45秒
Duration milliseconds = Duration(milliseconds: 500); // 500毫秒

// 组合使用
Duration complex = Duration(
  days: 1,
  hours: 2,
  minutes: 30,
  seconds: 15,
  milliseconds: 500,
  microseconds: 200
);

2. 常用属性和方法

Duration duration = Duration(minutes: 2, seconds: 30);

// 获取时间组成部分
print(duration.inDays);        // 总天数
print(duration.inHours);       // 总小时数
print(duration.inMinutes);     // 总分钟数
print(duration.inSeconds);     // 总秒数
print(duration.inMilliseconds);// 总毫秒数

// 字符串表示
print(duration.toString());    // 输出: 0:02:30.000000

3. 实际应用场景

// 1. 延迟执行
Future.delayed(Duration(seconds: 2), () {
  print('2秒后执行');
});

// 2. 动画时长
AnimationController(
  duration: Duration(milliseconds: 300),
  vsync: this,
);

// 3. 定时器
Timer.periodic(Duration(seconds: 1), (timer) {
  print('每秒执行一次');
});

// 4. 时间计算
DateTime now = DateTime.now();
DateTime future = now.add(Duration(hours: 1)); // 1小时后

4. 时间格式化(需要 intl 包)

import 'package:intl/intl.dart';

String formatDuration(Duration duration) {
  final hours = duration.inHours;
  final minutes = duration.inMinutes.remainder(60);
  final seconds = duration.inSeconds.remainder(60);
  
  return '${hours.toString().padLeft(2, '0')}:'
         '${minutes.toString().padLeft(2, '0')}:'
         '${seconds.toString().padLeft(2, '0')}';
}

注意事项:

  • 最小时间单位是微秒(1秒 = 1,000,000微秒)
  • 负值 Duration 表示过去的时间间隔
  • 在比较时间间隔时,可以直接使用比较运算符(>, <, ==)

这样可以方便地在各种需要时间控制的场景中使用 Duration。

回到顶部