initial commit
This commit is contained in:
@@ -0,0 +1,12 @@
|
||||
/// Formats a past [DateTime] as a short relative string ("2h ago",
|
||||
/// "5d ago") for activity feeds and stat-tile captions — full timestamps
|
||||
/// belong in tables (as [MonoText]), not here.
|
||||
String formatRelative(DateTime dateTime) {
|
||||
final diff = DateTime.now().difference(dateTime);
|
||||
if (diff.inSeconds < 45) return 'just now';
|
||||
if (diff.inMinutes < 60) return '${diff.inMinutes}m ago';
|
||||
if (diff.inHours < 24) return '${diff.inHours}h ago';
|
||||
if (diff.inDays < 7) return '${diff.inDays}d ago';
|
||||
if (diff.inDays < 30) return '${(diff.inDays / 7).floor()}w ago';
|
||||
return '${(diff.inDays / 30).floor()}mo ago';
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
|
||||
/// Overridden in `main()` with an instance obtained via
|
||||
/// `SharedPreferences.getInstance()` before `runApp`. Left unimplemented by
|
||||
/// default so a missing override fails loudly instead of silently using a
|
||||
/// throwaway in-memory instance.
|
||||
final sharedPreferencesProvider = Provider<SharedPreferences>((ref) {
|
||||
throw UnimplementedError(
|
||||
'sharedPreferencesProvider must be overridden in main() with a loaded SharedPreferences instance.',
|
||||
);
|
||||
});
|
||||
Reference in New Issue
Block a user