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

9

我正在创建一个新的Flutter 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 组件。但我不确定如何实现。

3个回答

31
Directionality.of(context) == TextDirection.rtl

2
你需要 import dart:ui。如果与 bidi_utils 冲突,请参考 https://dev59.com/aFUL5IYBdhLWcg3w4reQ。 - shield
1
它会搜索最近的方向组件并返回其文本方向。 - Eslam Sameh Ahmed

9

感谢@chunhunghan的帮助,我创建了一个静态方法。这个方法将上下文作为输入,并基于应用程序的当前语言环境返回true。因为如果没有传递语言代码,则该函数始终返回false。

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

3
您可以直接使用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;
  }

谢谢你的帮助,经过一些修改它终于起作用了。我会写出完整的答案。 - Shady Mohamed Sherif

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接