Исключение LocationNotFoundException (местоположение с именем «GMT» не существует)

#flutter #dart #push-notification

#flutter #дротик #push-уведомление

Вопрос:

мне нужно создать локальное уведомление для планирования, проблема заключается в том, что я использую функцию setLocalLocation для получения имени часового пояса, которое равно [log] timeZoneName value is =>GMT .

исключение:

 LocationNotFoundException (Location with the name "GMT" doesn't exist)
 

основная функция:

 const MethodChannel platform = MethodChannel('dexterx.dev/example_app');
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await _configureLocalTimeZone();
runApp(MyApp());
}
 

_configureLocalTimeZone функция:

 Future<void> _configureLocalTimeZone() async {
  tz.initializeTimeZones();
  final String timeZoneName = await platform.invokeMethod('getTimeZoneName');
  log("timeZoneName value is =>$timeZoneName",error: {"name":"Value or not"});
  tz.setLocalLocation(tz.getLocation(timeZoneName));
}
 

Ответ №1:

Вы работаете над эмулятором ? По умолчанию часовой пояс не установлен. Таким образом, вы должны выбрать один из них, чтобы GMT не был нулевым.

Вы пытались изменить часовой пояс в настройках телефона?

Я работал над эмулятором, и смена часового пояса с Соединенных Штатов на Францию прекратила сбой моего приложения

Ответ №2:

Здесь у меня такая же проблема.

Вероятно, это связано с тем, что эмулятор не имеет ЯЗЫКОВОГО стандарта, установленного по умолчанию.

Однако я заметил, что при сбое tz.getLocation(«GMT») также происходит сбой setLocalLocation(), и он все равно остается на GMT 0, поэтому вы можете просто перехватить и проигнорировать эту ошибку или обработать GMT самостоятельно…

   _setupTimezone() async {
    tz.initializeTimeZones();
    try {
      var tzName = await FlutterNativeTimezone.getLocalTimezone();
      tz.setLocalLocation(tz.getLocation(tzName));
    } catch (err) {
      // If it fails, timezone will be GMT 0 anyway, so nothing to worry about.
    }
  }
 

Если вам не нравится такой подход, вы можете пойти другим путем:

   var tzName = await FlutterNativeTimezone.getLocalTimezone();
  if(tzName != "GMT"){
    tz.setLocalLocation(tz.getLocation(tzName));
  }