now method

Future<TrueTimeResult> now({
  1. Duration? ntpFetchDuration,
  2. String? ntoLookUpAddress,
  3. int? ntpLookupPort,
})

Returns a reliable DateTime. Priority:

  1. NTP server (most accurate)
  2. Firebase Cloud (if NTP fails)
  3. 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,
  );
}