当前位置: 首页 > 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。

相关文章:

  • 怎么判断一个Android APP使用了flutter 这个跨端框架
  • ITK-读取DICOM文件标签
  • Linux火墙管理及优化
  • C++中IOstream解析
  • JAVA05基本数据类型和包装类的转换,转换成其他数据类型,包装类与字符串的转换+学生类的定义实例
  • 店铺长尾销售与动销率转型及开源AI智能名片链动2+1模式S2B2C商城小程序源码应用探讨
  • CloudCanal RAG x Ollama 构建全栈私有 AI 服务
  • C++可变参数宏定义语法笔记
  • 关于flutter中Scaffold.of(context).openEndDrawer();不生效问题
  • 【Golang笔记03】error、panic、fatal错误处理学习笔记
  • Go语言中内存释放 ≠ 资源释放
  • Java详解LeetCode 热题 100(20):LeetCode 48. 旋转图像(Rotate Image)详解
  • Linux入门(九)任务调度
  • 【Go】1、Go语言基础
  • 【Java高阶面经:消息队列篇】23、Kafka延迟消息:实现高并发场景下的延迟任务处理
  • 今日行情明日机会——20250523
  • Selenium 测试框架 - Java
  • el-input宽度自适应方法总结
  • 深入解析Spring Boot与Redis集成:高性能缓存实践
  • [crxjs]自己创建一个浏览器插件
  • 做网站做手机站还是自适应站/关键词排名工具
  • 婚纱网站策划书模板下载/短链接在线生成
  • 公司网站制作教学/seo的中文是什么
  • 互联网网站开发有哪些职位/百度推广后台登陆首页
  • 有什么网站可以发布个人信息/网推拉新app推广接单平台
  • 微信网站下载/百度指数官网入口登录