Flutter Comment obtenir le réseau DateTime.Now ()?

Sep 23 2020

En fait, le flutter DateTime.now()renvoie la date et l'heure de l'appareil. Les utilisateurs modifient parfois leur horloge interne et leur utilisation DateTime.now()peut donner un résultat erroné.

  1. Comment puis-je obtenir la date / heure actuelle du réseau / serveur en flutter?
  2. Est-il possible d'obtenir la date / heure actuelle du réseau / serveur sans utiliser de packages?

Merci d'avance!

Réponses

5 AmonChowdhury Sep 23 2020 at 18:26

Ce n'est pas possible sans aucun appel d'API.

Il existe un plugin qui vous permet d'obtenir l'heure précise du Network Time Protocol (NTP). Il implémente tout le protocole NTP dans Dart.

Ceci est utile pour les événements basés sur l'heure car DateTime.now () renvoie l'heure de l'appareil. Les utilisateurs modifient parfois leur horloge interne et l'utilisation de DateTime.now () peut donner un résultat erroné. Vous pouvez simplement obtenir le décalage d'horloge [NTP.getNtpTime] et l'appliquer manuellement à l'objet DateTime.now () si nécessaire (ajoutez simplement un décalage en millisecondes), ou vous pouvez obtenir un objet [DateTime] déjà formaté à partir de [NTP.now].

Ajoutez ceci au fichier pubspec.yaml de votre package:

dependencies:
  ntp: ^1.0.7

Ensuite, ajoutez le code comme ceci:

import 'package:ntp/ntp.dart';

Future<void> main() async {
  DateTime _myTime;
  DateTime _ntpTime;

  /// Or you could get NTP current (It will call DateTime.now() and add NTP offset to it)
  _myTime = await NTP.now();

  /// Or get NTP offset (in milliseconds) and add it yourself
  final int offset = await NTP.getNtpOffset(localTime: DateTime.now());
  _ntpTime = _myTime.add(Duration(milliseconds: offset));

  print('My time: $_myTime'); print('NTP time: $_ntpTime');
  print('Difference: ${_myTime.difference(_ntpTime).inMilliseconds}ms');
}