You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Flutter类中获取应用当前本地化信息与文本方向(RTL/LTR)

在Flutter中获取当前本地化配置与文本方向

获取当前本地化配置

要拿到应用当前的本地化信息,直接调用Localizations.localeOf(context)就能获取对应的Locale对象,这个对象里包含了语言代码(比如zh、en)和可选的国家/地区代码(比如CN、US)。

示例代码:

Locale currentLocale = Localizations.localeOf(context);
print('当前语言:${currentLocale.languageCode},地区:${currentLocale.countryCode ?? '未指定'}');

注意:这个方法需要传入BuildContext,如果是在没有context的类(比如业务逻辑类、状态管理器)里,你可以提前把locale信息存储到全局变量或者状态管理工具(比如Provider、GetX)中,后续直接取用。

判断文本方向(RTL/LTR)

判断当前文本是从左到右还是从右到左,有两种常用方式:

方式一:通过Context直接获取

用Directionality.of(context)能直接拿到当前的TextDirection枚举值,对比TextDirection.ltr或TextDirection.rtl就能判断:

TextDirection currentDirection = Directionality.of(context);
bool isRtl = currentDirection == TextDirection.rtl;
print(isRtl ? '当前是RTL(从右到左)方向' : '当前是LTR(从左到右)方向');

方式二:通过Locale判断

如果你已经拿到了Locale对象,也可以借助intl包的工具方法来判断(需要先在pubspec.yaml里添加intl依赖):

import 'package:intl/intl.dart';

// 假设已经获取到currentLocale
bool isRtl = Bidi.isRtlLanguage(currentLocale.languageCode);

这种方式不需要Context,适合在无上下文的场景使用。

无Context场景的处理方案

如果需要在没有BuildContext的类里获取这些信息,推荐在应用初始化时把locale和文本方向存起来:

比如在MaterialApp中通过回调把信息保存到全局变量或者状态管理中:

// 全局变量示例(也可以用状态管理替代)
Locale? appLocale;
TextDirection? appTextDirection;

MaterialApp(
  localeResolutionCallback: (locale, supportedLocales) {
    appLocale = locale ?? supportedLocales.first;
    return appLocale;
  },
  builder: (context, child) {
    appTextDirection = Directionality.of(context);
    return child!;
  },
  // 其他配置...
)

之后在任意类里直接使用appLocale和appTextDirection即可。

内容的提问来源于stack exchange,提问作者Ali ZareShahi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 09:10:40