import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:flutter/foundation.dart' show kIsWeb; import 'dart:io' show Platform; import '../enumerations.dart'; /// Returns [true] if app is running on Mobile (Android or iOS), else [false]. bool get isMobile { if (kIsWeb) { return false; } else { return Platform.isIOS || Platform.isAndroid; } } /// Creates a composite ID from the passed [ids]. /// In the format id(1)_id(n) String getCompoundId(List ids) { ids.sort(); // sort to ensure the result is the same for any order of ids return ids.join('_'); } /// Returns a date format of '$weekday, $day. $month $year $hours:$minutes'. /// For example: [Sat. 3 Jun. 2024 15:03]. /// If any errors occur, an empty string will be returned. String formatTimestamp(Timestamp timestamp) { try { const List weekdays = [ 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun' ]; const List months = [ 'Jan.', 'Feb.', 'Mar.', 'Apr.', 'May', 'Jun.', 'Jul.', 'Aug.', 'Sep.', 'Oct.', 'Nov.', 'Dec.' ]; DateTime dateTime = timestamp.toDate(); String weekday = weekdays[dateTime.weekday - 1]; int day = dateTime.day; String month = months[dateTime.month - 1]; int year = dateTime.year; int hour = dateTime.hour; int minute = dateTime.minute; return '$weekday, $day. $month $year ${hour.toString().padLeft(2, '0')}:${minute.toString().padLeft(2, '0')}'; } catch (e) { return ''; } } /// Get pronoun for given [userGender]. /// Returns [He] if male, [She] if female, else [He/She]. String getPronoun(Gender? userGender) { switch (userGender) { case Gender.male: return 'He'; case Gender.female: return 'She'; default: return 'He/She'; } } /// Get possessive adjective for given [userGender]. /// Returns [His] if male, [Her] if female, else [His/Her]. String getPossessiveAdjective(Gender? userGender) { switch (userGender) { case Gender.male: return 'His'; case Gender.female: return 'Her'; default: return 'His/Her'; } } /// Get the [displayName] of our own Enumerations. String getDisplayText(dynamic option) { // Check if the option is an enum and has a displayName property if (option is Enum) { final dynamicEnum = option as dynamic; if (dynamicEnum.displayName != null) { return dynamicEnum.displayName; } } // Fallback to default toString if not an enum return option.toString().split('.').last; }