Flutter Como obter a rede DateTime.Now ()?

Sep 23 2020

Na verdade, a vibração DateTime.now()retorna a data e a hora do dispositivo. Os usuários às vezes mudam seu relógio interno e o uso DateTime.now()pode gerar um resultado incorreto.

  1. Como posso obter o DateTime atual da rede / servidor em flutter?
  2. É possível obter o DateTime atual da rede / servidor sem usar nenhum pacote?

Desde já, obrigado!

Respostas

5 AmonChowdhury Sep 23 2020 at 18:26

Não é possível sem qualquer chamada de API.

Existe um plugin que permite obter o tempo preciso do Network Time Protocol (NTP). Ele implementa todo o protocolo NTP em dardo.

Isso é útil para eventos baseados em tempo, já que DateTime.now () retorna a hora do dispositivo. Os usuários às vezes mudam seu relógio interno e usar DateTime.now () pode dar o resultado errado. Você pode apenas obter o deslocamento do relógio [NTP.getNtpTime] e aplicá-lo manualmente ao objeto DateTime.now () quando necessário (basta adicionar o deslocamento como duração em milissegundos) ou pode obter o objeto [DateTime] já formatado de [NTP.now].

Adicione ao arquivo pubspec.yaml do seu pacote:

dependencies:
  ntp: ^1.0.7

Em seguida, adicione o código como este:

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