当前位置: 首页 > news >正文

【Flutter】多语言适配-波斯语RTL从右到左

前言

在多语言适配的时候,波斯语的显示是从右到左的,需要针对一些控件进行单独适配。

核心逻辑:根据语言动态设置 Directionality

Widget build(BuildContext context) {final isRtl = Localizations.localeOf(context).languageCode == 'fa';return Directionality(textDirection: isRtl ? TextDirection.rtl : TextDirection.ltr,child: YourMainWidget(),);
}

结合 MaterialApp 自动判断 Locale 设置方向

class MyApp extends StatelessWidget {Widget build(BuildContext context) {return MaterialApp(localizationsDelegates: const [GlobalMaterialLocalizations.delegate,GlobalWidgetsLocalizations.delegate,GlobalCupertinoLocalizations.delegate,],supportedLocales: const [Locale('en'),Locale('fa'),],builder: (context, child) {final locale = Localizations.localeOf(context);final isRtl = locale.languageCode == 'fa';return Directionality(textDirection: isRtl ? TextDirection.rtl : TextDirection.ltr,child: child!,);},home: HomePage(),);}
}

控制单个组件方向(局部 RTL / LTR)

你可以按需局部设置 TextField、Text、Row 等的方向:

final isRtl = Localizations.localeOf(context).languageCode == 'fa';TextField(textDirection: isRtl ? TextDirection.rtl : TextDirection.ltr,textAlign: isRtl ? TextAlign.right : TextAlign.left,
)
Row(textDirection: isRtl ? TextDirection.rtl : TextDirection.ltr,children: [...],
)

工具函数封装建议(便于项目统一处理)

你可以写一个统一函数判断是否是 RTL 语言:

bool isRtlLanguage(BuildContext context) {final lang = Localizations.localeOf(context).languageCode;return lang == 'fa' || lang == 'ar' || lang == 'he';
}

特别提示

  1. TextAlign.start / TextAlign.end 会自动适配方向,不建议用 TextAlign.left/right。

  2. 推荐使用AlignmentDirectional,不建议使用Alignment。

  3. EdgeInsetsDirectional 自动适配左右方向,推荐代替 EdgeInsets.only(left/right)。

  4. 自动方向适配依赖于你在 MaterialApp 中设置正确的 locale 和 supportedLocales。

  5. 推荐使用BorderDirectional,不推荐使用Border。

  6. 推荐使用BorderRadiusDirection,不推荐使用BorderRadius。

http://www.xdnf.cn/news/604513.html

相关文章:

  • 基于 Vue3 与 exceljs 实现自定义导出 Excel 模板
  • 如何在Mac 上使用Python Matplotlib
  • Redis 详解
  • G1人形机器人软硬件组成
  • vite学习笔记
  • Jenkins 2.426.2配置“构建历史的显示名称,加上包名等信息“
  • 计算机网络——每一层的用到的设备及其作用
  • Spring MVC-面试题(33)
  • Python asyncio库:基本概念与使用方法
  • voc怎么转yolo,如何分割数据集为验证集,怎样检测CUDA可用性 并使用yolov8训练安全帽数据集且构建基于yolov8深度学习的安全帽检测系统
  • React+MapBox GL JS引入URL服务地址实现自定义图标标记地点、区域绘制功能
  • vue 鼠标经过时显示/隐藏其他元素
  • FPGA高效验证工具Solidify 8.0:全面重构图形用户界面
  • 游戏引擎学习第306天:图结构排序的调试
  • QT-VStudio2107加载项目,报出“元素 <LanguageStandard>只有无效值“Default“”
  • ten-vad:低延迟、轻量化且高性能的流式语音活动检测系统
  • 2025年5月网工基础知识
  • rosbridge_suit、roslibpy 源码阅读与简单测试 —— 图片编解码与传输
  • 从 Docker 到 runC
  • 小说漫画管理系统
  • FRP技术概览
  • 黑马点评--短信登录实现
  • 针对面试-java集合篇
  • Alpha shapes算法边缘点进行排序(C++)
  • 「二叉搜索树·手撕暴走篇」:用C++《一路向北》狂写指针のの死亡轮盘!
  • 初识main函数
  • C/C++的OpenCV 进行图像梯度提取
  • [原创](计算机数学)(The Probability Lifesaver)(P14): 推导计算 In(1-u) 约等于 -u
  • 游戏引擎学习第308天:调试循环检测
  • 服务器修改/home的挂载路径