如何使用 Intl 在 Flutter 中获取当前语言环境文本方向

How to get the current locale text direction in Flutter using Intl

我正在创建一个新的 flutter UI 组件,其中包含 selection 并获取有关该产品的更多信息。

我希望此组件也支持 RTL,因此我需要获取当前语言环境的语言方向,这将使我知道 selection 形状的哪些角将变圆。

LTR形码是这样的

shape: RoundedRectangleBorder(
  borderRadius: BorderRadius.only(
    bottomLeft: Radius.circular(35),
    topLeft: Radius.circular(35),
    ),
  )

RTL形码会像

shape: RoundedRectangleBorder(
  borderRadius: BorderRadius.only(
    bottomRight: Radius.circular(35),
    topRight: Radius.circular(35),
    ),
  )

我知道 intl 提供了获取特定文本方向的功能,而我想获取当前 select 语言环境的默认方向,所以如果当前语言环境是阿拉伯语、波斯语或任何其他权利左语言我将 return RLT 组件。我不知道具体怎么做。

您可以直接使用 intl.Bidi.isRtlLanguage()import 'package:intl/intl.dart' as intl;
在此函数中,如果您不传递 enar 等语言代码,它将使用 Intl.getCurrentLocale()

来自 bidi_util.dart

的代码片段
 static bool isRtlLanguage([String languageString]) {
    var language = languageString ?? Intl.getCurrentLocale();
    if (_lastLocaleCheckedForRtl != language) {
      _lastLocaleCheckedForRtl = language;
      _lastRtlCheck = _rtlLocaleRegex.hasMatch(language);
    }
    return _lastRtlCheck;
  }

感谢@chunhunghan 我创建了一个静态方法,该方法根据应用程序的当前区域设置获取上下文和 returns true,因为如果您不传递语言代码,函数总是 returns 错误。

  import 'package:intl/intl.dart' as intl;
  static bool isDirectionRTL(BuildContext context){
   return intl.Bidi.isRtlLanguage( Localizations.localeOf(context).languageCode);
  }
Directionality.of(context) == TextDirection.rtl