Flutter时间格式化插件fztimeago的使用

fztimeago简介

Frazile Time Ago 提供从给定日期和时间开始的持续时间。该插件可以帮助开发者以更简洁的方式显示时间差,例如“几分钟前”、“几小时前”等。

安装

pubspec.yaml 文件的 dependencies: 部分添加以下行:

fztimeago: <latest_version>

然后运行 flutter pub get 来安装依赖。

使用

设置多语言支持

首先,我们需要设置不同的语言消息。例如,我们可以为德语(de)、日语(ja)等语言设置消息。

timeago.setLocaleMessages(
  'de',
  timeago.DeMessages(),
);
timeago.setLocaleMessages(
  'ja',
  timeago.JaMessages(),
);

时间格式化示例

以下是一个完整的示例,展示如何使用 fztimeago 插件来格式化时间。

示例代码

import 'dart:async' show Timer;
import 'package:flutter/material.dart';
import 'package:fztimeago/fztimeago.dart' as timeago;

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: HomePage(),
    );
  }
}

class HomePage extends StatefulWidget {
  [@override](/user/override)
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  String formattedTime = '';
  String locale = 'en'; // 默认语言为英语

  [@override](/user/override)
  void initState() {
    super.initState();
    // 设置多语言支持
    timeago.setLocaleMessages('zh', timeago.ZhMessages());
    timeago.setLocaleMessages('en', timeago.EnMessages());

    // 初始化时间
    final loadedTime = DateTime.now();

    // 更新时间格式化的函数
    void updateFormattedTime() {
      final now = DateTime.now();
      formattedTime = timeago.format(now.subtract(now.difference(loadedTime)), locale: locale);
      setState(() {}); // 更新UI
    }

    // 每秒更新一次时间
    Timer.periodic(Duration(seconds: 1), (_) => updateFormattedTime());

    // 初始调用
    updateFormattedTime();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('fztimeago 示例'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text(
              '当前时间距离加载时间:',
              style: TextStyle(fontSize: 18),
            ),
            SizedBox(height: 10),
            Text(
              formattedTime,
              style: TextStyle(fontSize: 24, fontWeight: FontWeight.bold),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () {
                // 切换语言
                setState(() {
                  locale = locale == 'en' ? 'zh' : 'en';
                });
              },
              child: Text('切换语言'),
            )
          ],
        ),
      ),
    );
  }
}

更多关于Flutter时间格式化插件fztimeago的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter时间格式化插件fztimeago的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


fztimeago 是一个用于 Flutter 的时间格式化插件,它可以将时间戳转换为相对时间(如 “2 分钟前”、“3 天前” 等)。这个插件非常适合用于显示社交网络、聊天应用等场景中的时间信息。

安装 fztimeago

首先,你需要在 pubspec.yaml 文件中添加 fztimeago 依赖:

dependencies:
  flutter:
    sdk: flutter
  fztimeago: ^1.0.0  # 请检查最新版本

然后运行 flutter pub get 来安装依赖。

使用 fztimeago

1. 基本用法

import 'package:fztimeago/fztimeago.dart';

void main() {
  DateTime now = DateTime.now();
  DateTime past = now.subtract(Duration(minutes: 5));

  String timeAgo = FZTimeAgo.getTimeAgo(past);
  print(timeAgo); // 输出: "5 minutes ago"
}

2. 自定义语言

fztimeago 支持多种语言,你可以通过设置语言来改变输出的格式。

import 'package:fztimeago/fztimeago.dart';

void main() {
  FZTimeAgo.setLocale('zh'); // 设置为中文

  DateTime now = DateTime.now();
  DateTime past = now.subtract(Duration(minutes: 5));

  String timeAgo = FZTimeAgo.getTimeAgo(past);
  print(timeAgo); // 输出: "5分钟前"
}

3. 自定义时间间隔

你可以自定义时间间隔的显示方式。

import 'package:fztimeago/fztimeago.dart';

void main() {
  FZTimeAgo.setLocale('en'); // 设置为英文

  DateTime now = DateTime.now();
  DateTime past = now.subtract(Duration(days: 10));

  String timeAgo = FZTimeAgo.getTimeAgo(past);
  print(timeAgo); // 输出: "10 days ago"
}

4. 自定义时间格式

你还可以自定义时间格式,例如显示更详细的时间信息。

import 'package:fztimeago/fztimeago.dart';

void main() {
  FZTimeAgo.setLocale('en'); // 设置为英文

  DateTime now = DateTime.now();
  DateTime past = now.subtract(Duration(hours: 3, minutes: 30));

  String timeAgo = FZTimeAgo.getTimeAgo(past, allowFromNow: true);
  print(timeAgo); // 输出: "3 hours 30 minutes ago"
}
回到顶部