feat(App): update Finlytic Flutter app UI and blocs
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
/// Universal time formatting helper to format relative timestamps cleanly for UI displays.
|
||||
class TimeUtils {
|
||||
/// Converts ISO-8601 or DateTime inputs to localized, readable relative time strings.
|
||||
///
|
||||
/// Examples:
|
||||
/// - Under 60 minutes: "Vor 15 Min.", "Vor 42 Min."
|
||||
/// - 1 hour or more: "Vor 1 Std.", "Vor 1 Std. 15 Min.", "Vor 3 Std. 45 Min."
|
||||
/// - Yesterday: "Gestern"
|
||||
/// - Older: "22.07.2026"
|
||||
static String formatRelativeTime(dynamic rawDate) {
|
||||
if (rawDate == null) return '';
|
||||
final str = rawDate.toString().trim();
|
||||
if (str.isEmpty) return '';
|
||||
|
||||
DateTime dt;
|
||||
try {
|
||||
dt = DateTime.parse(str).toLocal();
|
||||
} catch (_) {
|
||||
// Return raw string if already formatted or non-date string
|
||||
return str;
|
||||
}
|
||||
|
||||
final now = DateTime.now();
|
||||
final rawDiff = now.difference(dt);
|
||||
|
||||
// If the timestamp is in the future (e.g. slight clock skew or scraper timezone issues), cap it to 0
|
||||
final duration = rawDiff.isNegative ? Duration.zero : rawDiff;
|
||||
final totalMinutes = duration.inMinutes;
|
||||
|
||||
if (totalMinutes < 1) {
|
||||
return 'Vor 1 Min.';
|
||||
}
|
||||
|
||||
if (totalMinutes < 60) {
|
||||
return 'Vor $totalMinutes Min.';
|
||||
}
|
||||
|
||||
final hours = duration.inHours;
|
||||
if (hours < 24) {
|
||||
final remainingMinutes = totalMinutes % 60;
|
||||
if (remainingMinutes == 0) {
|
||||
return 'Vor $hours Std.';
|
||||
} else {
|
||||
return 'Vor $hours Std. $remainingMinutes Min.';
|
||||
}
|
||||
}
|
||||
|
||||
final days = duration.inDays;
|
||||
if (days == 1) {
|
||||
return 'Gestern';
|
||||
} else if (days < 7) {
|
||||
return 'Vor $days Tagen';
|
||||
}
|
||||
|
||||
final dayStr = dt.day.toString().padLeft(2, '0');
|
||||
final monthStr = dt.month.toString().padLeft(2, '0');
|
||||
return '$dayStr.$monthStr.${dt.year}';
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user