Flutter Come ottenere la rete DateTime.Now ()?

Sep 23 2020

Attualmente in flutter DateTime.now()viene restituita la data e l'ora del dispositivo. Gli utenti a volte cambiano il loro orologio interno e l'utilizzo DateTime.now()può dare risultati errati.

  1. Come posso ottenere la data / ora corrente di rete / server in flutter?
  2. È possibile ottenere data e ora corrente di rete / server senza utilizzare alcun pacchetto?

Grazie in anticipo!

Risposte

5 AmonChowdhury Sep 23 2020 at 18:26

Non è possibile senza alcuna chiamata API.

C'è un plugin che ti permette di ottenere l'ora precisa dal Network Time Protocol (NTP). Implementa l'intero protocollo NTP in dart.

Ciò è utile per gli eventi basati sul tempo poiché DateTime.now () restituisce l'ora del dispositivo. Gli utenti a volte cambiano il loro orologio interno e l'uso di DateTime.now () può dare il risultato sbagliato. Puoi semplicemente ottenere l'offset dell'orologio [NTP.getNtpTime] e applicarlo manualmente all'oggetto DateTime.now () quando necessario (aggiungi semplicemente l'offset come durata in millisecondi), oppure puoi ottenere l'oggetto [DateTime] già formattato da [NTP.now].

Aggiungilo al file pubspec.yaml del tuo pacchetto:

dependencies:
  ntp: ^1.0.7

Quindi aggiungi il codice in questo modo:

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');
}