Как получить текущее направление текста локали в Flutter, используя Intl - PullRequest
0 голосов
/ 14 января 2020

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

enter image description here

Я хочу, чтобы этот компонент поддерживал 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 предоставляет функциональность для получения направления заданного текста c, в то время как я хочу получить направление по умолчанию для текущей выбранной локали Таким образом, если текущим языковым стандартом является арабский c, фарси или любой другой язык справа налево, я верну компонент RLT. Я не знаю точно, как это сделать.

Ответы [ 2 ]

1 голос
/ 15 января 2020

Вы можете напрямую использовать 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;
  }
0 голосов
/ 15 января 2020

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

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