4

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

在此处输入图像描述

我希望这个组件也支持 RTL,所以我需要获取当前的语言环境语言方向,这将使我知道选择形状的哪些角将被圆角。

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 提供了获取特定文本方向的功能,而我想获取当前选择区域设置的默认方向,因此,如果当前区域设置是阿拉伯语、波斯语或任何其他从右到左的语言,我将返回该RLT组件。我不知道该怎么做。

4

3 回答 3

13
Directionality.of(context) == TextDirection.rtl
于 2020-05-07T14:49:34.677 回答
3

感谢@chunhunghan,我创建了一个静态方法,该方法获取上下文并根据应用程序的当前语言环境返回 true,因为如果您不传递语言代码,该函数总是返回 false。

  import 'package:intl/intl.dart' as intl;
  static bool isDirectionRTL(BuildContext context){
   return intl.Bidi.isRtlLanguage( Localizations.localeOf(context).languageCode);
  }
于 2020-01-15T12:26:04.937 回答
1

如果不传递or等​​语言代码,则可以直接在该函数内部使用intl.Bidi.isRtlLanguage()with ,它将使用import 'package:intl/intl.dart' as intl;
enarIntl.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;
  }
于 2020-01-15T03:26:17.493 回答