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