Как указать TimeZone при создании объекта DateTime в Dart / Flutter? - PullRequest
0 голосов
/ 10 июня 2018

Dart? Flutter, по-видимому, не позволяет указывать часовой пояс (например, «Австралия / Сидней» или «Америка / Детройт») при создании объекта DateTime.Либо будет использоваться местный часовой пояс, либо может быть указано UT.

Кто-нибудь знает об обходном пути?

Существует пакет TimeZone для Dart, но он не может использоваться в приложении для флаттера.

См. https://pub.dartlang.org/packages/timezone

Ответы [ 2 ]

0 голосов
/ 11 июня 2018

Пакет TimeZone работает.Из списка проблем на GitHub:

Извините, это заняло 6 месяцев, но у меня есть хорошее решение.Я думаю, что это будет рекомендуемое решение.

См. Документы Flutter по добавлению активов.Вы должны иметь возможность добавить в pubspec.yaml вашего приложения Flutter:

flutter:
  assets:
    - packages/timezone/lib/data/2015b.tzf

и загрузить в свое приложение:

Future<List<int>> loadDefaultData() async {
  var byteData = await rootBundle.load('packages/timezone/data/2015b.tzf');
  return byteData.buffer.asUint8List();
}

// Call the above with something like:

loadDefaultData().then((rawData) {
  initializeDatabase(rawData);
  var zurich = getLocation('Europe/Zurich');
});
0 голосов
/ 10 июня 2018

Вы должны сделать немного магии, чтобы заставить package:timezone работать во флаттере.

Извлечь любой файл данных, который вам нужен (есть 3: по умолчанию, все и 2010-2020) и переместить его вВаша папка активов флаттера.(Я использую 2018c_2010-2020.tzf, который доступен в филиале.)

Добавьте его в качестве актива в pubspec.yaml:

  assets:
    - assets/2018c_2010-2020.tzf

Затем загрузите этот файл при запуске (например, изinitState StatefulWidget верхнего уровня) и использовать его для инициализации базы данных.

ByteData tzf = await rootBundle.load('assets/2018c_2010-2020.tzf');
initializeDatabase(tzf.buffer.asUint8List());
...
Location newYork = getLocation('US/Eastern');

Я не пробовал, но вы можете даже загрузить его из main, если отметите его как асинхронный.

Я также заметил, что я, должно быть, клонировал последнюю ветку, как я вижу это в моем pubspec

  timezone:
    path: ../../dart/source/timezone

... но похоже, что вам просто нужно взять 0.5.0-dev-2 из паба

dependencies:
  timezone: "^0.5.0-dev-2"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...