如何独立于语言更改时间选择器的格式

How to change time picker's format independent of language

有人知道我如何使用任何语言的时间选择器的 AM/PM 格式吗?
该应用程序有英语和罗马尼亚语,当使用罗马尼亚语时,时间选择器使用 24 小时格式,但我需要 AM/PM.

我没有找到任何方法来为其设置语言环境,所以我有点卡住了。

来自 MediaQuery.of(context)TimePickerDialog gets its format。 如 documentation for showTimePicker 所示,您可以将 builder 传递给 showTimePicker 以强制使用 24 小时格式。

您可以使用当前的 Locale 选择时间格式。

final time = showTimePicker(
  context: context,
  initialTime: const TimeOfDay(hour: 10, minute: 47),
  builder: (BuildContext context, Widget? child) {
  Locale locale = Localizations.localeOf(context);
  final force24HourFormat = locale.countryCode == 'RO';
    return MediaQuery(
      data: MediaQuery.of(context).copyWith(
        alwaysUse24HourFormat: force24HourFormat,
      ),
      child: child!,
    );
  },
);

由于 Filip 没有编辑他的答案,我将自己用解决方案给出答案。

showTimePicker 需要在函数的构建器方法中将 alwaysUse24HourFormat 设置为 true 并将区域设置更改为 en-US。

不做任何一个都做不到。

所以,正确的解决方案是:

 showTimePicker(
    context: context,
    initialTime: TimeOfDay.now(),
    builder: (BuildContext context, Widget? child) => MediaQuery(
      data: MediaQuery.of(context).copyWith(alwaysUse24HourFormat: false),
      child: Localizations.override(
        context: context,
        locale: const Locale('en', 'US'),
        child: child!,
      ),
    ),
  );

还有一个未解决的 Github 问题,for this issue.