Как получить текущее направление текста локали во 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);
}
Вы можете напрямую использовать 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;
}