now method
Returns a reliable DateTime. Priority:
- NTP server (most accurate)
- Firebase Cloud (if NTP fails)
- Device local time (last fallback)
Implementation
Future<TrueTimeResult> now({
Duration? ntpFetchDuration,
String? ntoLookUpAddress,
int? ntpLookupPort,
}) async {
// --- 1. Try NTP server ---
debugPrint(
"NTP Request at - ${"${DateTime.now().minute} : ${DateTime.now().second}"}",
);
var ntpTime = await NtpServerProvider.now(
timeout: ntpFetchDuration ?? Duration(seconds: 5),
lookUpAddress: ntoLookUpAddress,
port: ntpLookupPort,
);
debugPrint(
"NTP Request end at - ${"${DateTime.now().minute} : ${DateTime.now().second}"}",
);
if (ntpTime != null) {
return TrueTimeResult(dateTime: ntpTime, source: DateSource.ntpServer);
}
// --- 2. Try Firebase ---
if (firebaseOptions == null) {
return TrueTimeResult(
dateTime: DateTime.now(),
source: DateSource.localDevice,
);
}
if (!_firebaseCloudProvider.initialized) {
_firebaseCloudProvider.init(options: firebaseOptions!);
}
var fireSTime = await FirebaseCloudProvider.instance.now();
// --- 3. Last fallback: device time ---
return TrueTimeResult(
dateTime: fireSTime ?? DateTime.now(),
source: fireSTime != null
? DateSource.firebaseCloud
: DateSource.localDevice,
);
}