Flutter Dart中为API返回数据添加千位分隔符的实现方法
解决Flutter中API数据添加千位分隔符(以“.”为分隔符)的问题
1. 先确认intl包的正确使用
之前用intl包没生效,大概率是初始化或数据类型处理的问题,先把基础流程走对:
在
pubspec.yaml里添加依赖:dependencies: flutter: sdk: flutter intl: ^0.18.1 # 用最新版本即可执行
flutter pub get后,在页面文件中导入:import 'package:intl/intl.dart';创建适配你需求的格式化器:
因为你要以“.”作为千位分隔符,直接用印尼地区的数字格式规则就能满足(印尼地区默认用“.”分隔千位,“,”分隔小数):final NumberFormat numberFormatter = NumberFormat.decimalPattern('id_ID');如果只需要格式化整数,也可以用自定义规则:
final NumberFormat numberFormatter = NumberFormat('#,###', 'id_ID');
2. 在DataTable中应用格式化
修改你的DataCell代码,注意先确保data.rtup是数字类型(int/double),如果API返回的是字符串,要先转换:
DataCell( Text( // 假设data.rtup是int类型 numberFormatter.format(data.rtup), // 如果是String类型,先转成数字:numberFormatter.format(int.parse(data.rtup)), style: const TextStyle( color: Color.fromARGB(255, 17, 17, 17), fontWeight: FontWeight.normal, fontSize: 12, ), ), ),
如果存在空值风险,记得加空处理:
numberFormatter.format(data.rtup ?? 0),
3. 不依赖intl包的替代方案
如果不想用第三方包,自己写个格式化函数也能实现:
String addThousandSeparator(int number) { return number.toString().replaceAllMapped( RegExp(r'(\d{1,3})(?=(\d{3})+(?!\d))'), (match) => '${match[1]}.', ); }
然后在Text中直接调用:
Text( addThousandSeparator(data.rtup), // ...样式代码 ),
内容的提问来源于stack exchange,提问作者Ahmad Rifai
相关产品推荐
相关产品推荐

