Flutter时间格式化插件timeago_flutter的使用
Flutter时间格式化插件timeago_flutter的使用
timeago
是一个Dart库,它能够将日期转换为人类可读的文本。例如,它可以将 2020-12-12 18:30
这样的日期显示为 "now"
, "an hour ago"
或 "~1y"
等等。
timeago | 核心库 | |
---|---|---|
timeago_flutter | Flutter组件 |
使用方法
最简单的方式是通过顶级函数 format(date)
来使用这个库:
import 'package:timeago/timeago.dart' as timeago;
main() {
final fifteenAgo = DateTime.now().subtract(Duration(minutes: 15));
print(timeago.format(fifteenAgo)); // 15 minutes ago
print(timeago.format(fifteenAgo, locale: 'en_short')); // 15m
print(timeago.format(fifteenAgo, locale: 'es')); // hace 15 minutos
}
注意事项
timeago
库默认只包含 en
和 es
两种语言的消息。要添加更多支持的语言,请使用 timeago.setLocaleMessages(..)
。参见locale messages。
本库使用ISO 639-1语言代码来标识语言。更多信息请参阅ISO 639-1。
添加本地化
timeago.setLocaleMessages('fr', timeago.FrMessages()); // 添加法语消息
print(timeago.format(fifteenAgo, locale: 'es')); // environ 15 minutes
覆盖本地化或添加自定义消息
// 覆盖 "en" 本地化消息为更精确和简短的自定义消息
timeago.setLocaleMessages('en', MyCustomMessages());
// my_custom_messages.dart
class MyCustomMessages implements LookupMessages {
@override String prefixAgo() => '';
@override String prefixFromNow() => '';
@override String suffixAgo() => '';
@override String suffixFromNow() => '';
@override String lessThanOneMinute(int seconds) => 'now';
@override String aboutAMinute(int minutes) => '${minutes}m';
@override String minutes(int minutes) => '${minutes}m';
@override String aboutAnHour(int minutes) => '${minutes}m';
@override String hours(int hours) => '${hours}h';
@override String aDay(int hours) => '${hours}h';
@override String days(int days) => '${days}d';
@override String aboutAMonth(int days) => '${days}d';
@override String months(int months) => '${months}mo';
@override String aboutAYear(int year) => '${year}y';
@override String years(int years) => '${years}y';
@override String wordSeparator() => ' ';
}
Scope
为了保持库的简洁并尽量减少维护工作,我们希望:
- 提供一个单一的
format
函数,将日期转换为人类可读的值。 - 提供抽象接口,允许用户添加自己的语言或根据需要覆盖它们。
- 提供由社区贡献的语言,用户可以根据需要添加这些语言,而不是默认添加所有语言。
- 库不应该依赖任何其他依赖项。
timeago_flutter 组件
timeago_flutter 提供了以下Flutter组件:
- Timeago
- TimerRefresh
- TimerRefreshWidget
实例演示
import 'package:flutter/material.dart';
import 'package:timeago/timeago.dart' as timeago;
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Timeago Demo'),
),
body: Center(
child: Timeago(
builder: (context, date) {
return Text(
timeago.format(date),
style: TextStyle(fontSize: 20),
);
},
date: DateTime.now().subtract(Duration(days: 2)),
),
),
),
);
}
}
本地开发
-
安装Melos(链接):
dart pub global activate melos
-
启动依赖:
melos bootstrap
-
在VSCode或Webstorm中打开所需的包
实时演示
你可以在这里查看实时演示:Live Demo
更多关于Flutter时间格式化插件timeago_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter时间格式化插件timeago_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中使用timeago_flutter
插件来格式化时间显示的代码案例。timeago_flutter
是一个强大的插件,它可以将时间戳或DateTime
对象格式化为相对时间字符串(例如,“3分钟前”,“2小时前”等)。
1. 添加依赖
首先,你需要在pubspec.yaml
文件中添加timeago_flutter
的依赖:
dependencies:
flutter:
sdk: flutter
timeago_flutter: ^4.0.0 # 请确保使用最新版本,版本号可能会有所不同
然后运行flutter pub get
来获取依赖。
2. 导入插件
在你的Dart文件中导入timeago_flutter
插件:
import 'package:timeago_flutter/timeago_flutter.dart' as timeago;
3. 使用插件
以下是一个完整的示例,展示了如何使用timeago_flutter
来格式化时间:
import 'package:flutter/material.dart';
import 'package:timeago_flutter/timeago_flutter.dart' as timeago;
import 'dart:async';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter TimeAgo Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: TimeAgoDemo(),
);
}
}
class TimeAgoDemo extends StatefulWidget {
@override
_TimeAgoDemoState createState() => _TimeAgoDemoState();
}
class _TimeAgoDemoState extends State<TimeAgoDemo> {
DateTime currentTime = DateTime.now();
Timer? timer;
@override
void initState() {
super.initState();
// 每秒更新一次时间,以展示timeago的实时更新效果
timer = Timer.periodic(Duration(seconds: 1), (Timer _) {
setState(() {
currentTime = DateTime.now();
});
});
}
@override
void dispose() {
timer?.cancel();
timer = null;
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('TimeAgo Flutter Demo'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'Current Time: ${currentTime.toLocal()}',
style: TextStyle(fontSize: 20),
),
SizedBox(height: 20),
Text(
'Formatted Time: ${timeago.format(currentTime)}',
style: TextStyle(fontSize: 24, color: Colors.blue),
),
],
),
),
);
}
}
解释
- 添加依赖:在
pubspec.yaml
中添加timeago_flutter
。 - 导入插件:在Dart文件中使用
import 'package:timeago_flutter/timeago_flutter.dart' as timeago;
导入插件。 - 使用插件:
- 使用
DateTime.now()
获取当前时间。 - 使用
timeago.format(currentTime)
将当前时间格式化为相对时间字符串。 - 通过
setState
每秒更新一次时间,以展示timeago
的实时更新效果。
- 使用
这个示例展示了如何在Flutter应用中使用timeago_flutter
插件来格式化并显示相对时间。你可以根据需求对代码进行修改和扩展。