Как получить текущее направление текста локали во Flutter с помощью Intl

Я создаю новый компонент пользовательского интерфейса Flutter, который содержит выбор и получение дополнительной информации о продукте.

Я хочу, чтобы этот компонент также поддерживал 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 ответа

Решение

Благодаря @chunhunghan я создал статический метод, этот метод принимает контекст и возвращает true в зависимости от текущего языкового стандарта приложения, потому что, если вы не передаете языковой код, функция всегда возвращает false.

  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

Вы можете напрямую использовать intl.Bidi.isRtlLanguage() с import 'package:intl/intl.dart' as intl;
внутри этой функции, если вы не передаете языковой код, например en или ar, он будет использовать 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;
  }
Другие вопросы по тегам