Flutter货币处理插件flutter_money的使用
Flutter货币处理插件flutter_money的使用
本项目基于 FlutterMoneyFormatter。以下为原README的重述。
FlutterMoney
是一个针对 Flutter 的扩展插件,用于根据你的喜好格式化各种类型的货币,而不必受限于任何本地化设置。
依赖项 :
安装
要安装 FlutterMoney
,你可以查看 安装指南。
使用
首先导入库:
import 'package:flutter_money/flutter_money.dart';
入门
为了能够将 double
类型的值格式化为你想要的各种形式,你需要创建一个 FlutterMoney
实例,如下所示:
FlutterMoney fm = FlutterMoney(
amount: 12345678.9012345
);
注意,上述代码仍然使用了默认配置,如在配置部分所解释的那样。
创建实例后,你可以请求各种格式的结果,如下所示:
// 正常格式
print(fm.output.nonSymbol); // 12,345,678.90
print(fm.output.symbolOnLeft); // $ 12,345,678.90
print(fm.output.symbolOnRight); // 12,345,678.90 $
print(fm.output.fractionDigitsOnly); // 90
print(fm.output.withoutFractionDigits); // 12,345,678
// 简约格式
print(fm.output.compactNonSymbol) // 12.3M
print(fm.output.compactSymbolOnLeft) // $ 12.3M
print(fm.output.compactSymbolOnRight) // 12.3M $
如果你将输出格式多次使用,我强烈建议你初始化一个变量,如下所示:
MoneyFormatterOutput fo = fm.output;
或者在初始化 FlutterMoney
实例时直接赋值,如下所示:
MoneyFormatterOutput fo = FlutterMoney(
amount: 12345678.9012345
).output;
这样你就可以更方便地获取值,如下所示:
// 正常格式
print(fo.nonSymbol); // 12,345,678.90
print(fo.symbolOnLeft); // $ 12,345,678.90
print(fo.symbolOnRight); // 12,345,678.90 $
print(fo.fractionDigitsOnly); // 90
print(fo.withoutFractionDigits); // 12,345,678
// 简约格式
print(fo.compactNonSymbol) // 12.3M
print(fo.compactLeftSymbol) // $ 12.3M
print(fo.compactRightSymbol) // 12.3M $
更多详细信息,请参见 演示部分。
配置
要根据你的需求调整格式,你可以通过 settings
参数进行设置:
FlutterMoney fm = new FlutterMoney(
amount: 12345678.9012345,
settings: MoneyFormatterSettings(
symbol: 'IDR',
thousandSeparator: '.',
decimalSeparator: ',',
symbolAndNumberSeparator: ' ',
fractionDigits: 3,
compactFormatType: CompactFormatType.sort
)
)
当然,你不必在 settings
(MoneyFormatterSettings
) 参数中初始化整个配置,如上例所示。你可以更改上述配置中的一个或多个。这是因为上述每个配置都不是强制性的,并且有默认值。
属性、方法和函数
FlutterMoney
属性名称 | 数据类型 | 描述 |
---|---|---|
amount |
double |
将要格式化的金额数字。 |
settings |
MoneyFormatterSettings |
详见 MoneyFormatterSettings。 |
output |
MoneyFormatterOutput |
详见 MoneyFormatterOutput。 |
comparator |
MoneyFormatterCompare |
详见 MoneyFormatterCompare。 |
copyWith |
FlutterMoney |
详见 复制实例。 |
fastCalc |
FlutterMoney |
详见 快速计算。 |
MoneyFormatterSettings
配置属性 | 数据类型 | 默认值 | 描述 |
---|---|---|---|
symbol |
String |
$ (美元符号) |
格式化输出中使用的符号。 |
thousandSeparator |
String |
, |
格式化输出中用作千位分隔符的字符。 |
decimalSeparator |
String |
. |
格式化输出中用作小数点分隔符的字符。 |
fractionDigits |
int |
2 |
格式化输出中小数点后的位数。 |
symbolAndNumberSeparator |
String |
' ' (空格) |
格式化数字和货币符号之间的分隔符。 |
compactFormatType |
CompactFormatType |
CompactFormatType.short |
详见 CompactFormatType。 |
CompactFormatType
你可以更改紧凑格式类型,例如使用 M
或 million
表示百万,或使用 T
或 trillion
表示万亿等。这种类型只支持两种类型,如下所述:
值 | 描述 |
---|---|
CompactFormatType.short |
用于使紧凑格式显示为短文本。 |
CompactFormatType.long |
用于使紧凑格式显示为长文本。 |
MoneyFormatterOutput
你可以通过 MoneyFormatterOutput
实例中的属性来使用符合你需求的格式。
属性名称 | 数据类型 | 描述 |
---|---|---|
nonSymbol |
String |
货币格式化结果,不带货币符号。例如:12,345,678.90 |
symbolOnLeft |
String |
带货币符号的正常货币格式,符号在左边。例如:$ 12,345,678.90 |
symbolOnRight |
String |
带货币符号的正常货币格式,符号在右边。例如:12,345,678.90 $ |
compactNonSymbol |
String |
紧凑格式化结果,不带货币符号。例如:12.3M |
compactSymbolOnLeft |
String |
紧凑格式化结果,带货币符号在左边。例如:$ 12.3M |
compactSymbolOnRight |
String |
紧凑格式化结果,带货币符号在右边。例如:12.3M $ |
fractionDigitsOnly |
String |
只给出分数值。例如:90 |
withoutFractionDigits |
String |
给出不带分数的值。例如:12,345,678 |
MoneyFormatterCompare
方法 | 参数 | 描述 |
---|---|---|
isLowerThan |
amount |
检查当前实例的金额是否小于 [amount] 。 |
isGreaterThan |
amount |
检查当前实例的金额是否大于 [amount] 。 |
isEqual |
amount |
检查当前实例的金额是否等于 [amount] 。 |
isEqualOrLowerThan |
amount |
检查当前实例的金额是否等于或小于 [amount] 。 |
isEqualOrGreaterThan |
amount |
检查当前实例的金额是否等于或大于 [amount] 。 |
使用比较器的例子:
FlutterMoney fm = FlutterMoney(amount: 12345678.9012345);
double comparerValue = 5678.9012;
print(fm.comparator.isEqual(comparerValue)); // false
print(fm.comparator.isGreaterThan(comparerValue)); // true
快速计算
fastCalc
是一个可以用于执行各种快速计算过程的函数。在实现时,fastCalc
函数返回一个 FlutterMoney
实例,因此你可以通过链式方法一次执行多个计算功能。
函数
FlutterMoney fastCalc({
@required FastCalcType type,
@required double amount
})
实现
FlutterMoney fm = FlutterMoney(amount: 12345.678);
fm.fastCalc(type: FastCalcType.addition, amount: 1.111);
fm.fastCalc(type: FastCalcType.substraction, amount: 2.222);
print(fm.output.nonSymbol); // 12,345.68
由于它支持链式过程,上面的示例可以简化为:
FlutterMoney fm = FlutterMoney(amount: 12345.678)
.fastCalc(type: FastCalcType.addition, amount: 1.111)
.fastCalc(type: FastCalcType.substraction, amount: 2.222);
print(fm.output.nonSymbol); // 12,345.68
type
参数由 FastCalcType
数据类型枚举提供。以下是 FastCalcType
枚举的说明表:
索引 | 名称 | 描述 |
---|---|---|
0 | addition | 用于做加法运算。 |
1 | substraction | 用于做减法运算。 |
2 | multiplication | 用于做乘法运算。 |
3 | division | 用于做除法运算。 |
4 | percentageAddition | 用于基于百分比的加法运算。 |
5 | percentageSubstraction | 用于基于百分比的减法运算。 |
复制实例
出于某些原因,你可能需要复制实例并仅更改一些配置。为此,你可以使用 copyWith
方法,如下所示:
FlutterMoney fm = FlutterMoney(amount: 12345678.9012345);
print(fm.output.symbolOnLeft); // $ 12,345,678.90
print(fm.copyWith(symbol: 'IDR', symbolAndNumberSeparator: '-').output.symbolOnLeft); // IDR-12,345,678.90
演示
更多完整的示例,你可以从 示例目录 获取。
我们的其他包
查看我们的 其他包。
帮助我
如果你发现任何问题或错误,请在这里 报告问题。你也可以在这里 请求新功能。
更改日志
你对每次版本的变化感到好奇吗? 这里 查看详细的变更信息。
贡献者
姓名 | 链接 |
---|---|
Fadhly Permata | https://github.com/fadhly-permata |
Gerrel | https://github.com/Gerrel |
Emeka Nwagu | https://github.com/nwagu |
…你… | …你的链接… |
许可证
版权所有 (c) 2019, Fadhly Permata <fadhly.permata@gmail.com>
保留所有权利。
重新分发和使用源码和二进制形式,无论是修改还是未修改,均允许,但须满足以下条件:
1. 源码的重新分发必须保留上述版权声明、此条件列表和以下免责声明。
2. 二进制形式的重新分发必须在文档和/或其他提供的材料中包含上述版权声明、此条件列表和以下免责声明。
此软件按“现状”提供,没有任何明示或暗示的保证,包括但不限于适销性和适用于特定用途的默示保证。在任何情况下,版权持有者或贡献者都不应对任何直接、间接、附带、特殊、惩戒性或后果性损害负责(包括但不限于替代商品或服务的采购、数据或利润的损失、或业务中断)无论这些损害是如何引起的,即使已被告知发生此类损害的可能性。
软件和文档中包含的观点和结论属于作者,不应被解释为官方政策,无论是明示的还是暗示的,代表“FlutterMoney”项目的观点。
更多关于Flutter货币处理插件flutter_money的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter货币处理插件flutter_money的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何在Flutter项目中使用flutter_money
插件来处理货币的基本示例。flutter_money
插件允许你格式化、解析和显示货币金额。
1. 添加依赖
首先,在你的pubspec.yaml
文件中添加flutter_money
依赖:
dependencies:
flutter:
sdk: flutter
flutter_money: ^2.0.0 # 请检查最新版本号
然后运行flutter pub get
来安装依赖。
2. 导入插件
在你的Dart文件中导入flutter_money
插件:
import 'package:flutter_money/flutter_money.dart';
3. 配置货币设置
你需要配置货币设置,比如货币符号、小数点分隔符、千位分隔符等。
void main() {
// 配置货币设置
MoneyFormat format = MoneyFormat(
symbol: '\$', // 货币符号
decimalSeparator: '.', // 小数点分隔符
thousandSeparator: ',', // 千位分隔符
precision: 2, // 小数位数
);
runApp(MyApp(format));
}
4. 使用插件
下面是一个简单的例子,展示如何格式化金额和解析字符串金额:
import 'package:flutter/material.dart';
import 'package:flutter_money/flutter_money.dart';
void main() {
MoneyFormat format = MoneyFormat(
symbol: '\$',
decimalSeparator: '.',
thousandSeparator: ',',
precision: 2,
);
runApp(MyApp(format));
}
class MyApp extends StatelessWidget {
final MoneyFormat format;
MyApp(this.format);
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Money Example',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(format: format),
);
}
}
class MyHomePage extends StatefulWidget {
final MoneyFormat format;
MyHomePage({required this.format});
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
late double amount;
@override
void initState() {
super.initState();
amount = 1234567.89;
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Flutter Money Example'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text('Formatted Amount:'),
Text(
formatMoney(amount, widget.format),
style: TextStyle(fontSize: 20),
),
SizedBox(height: 16),
Text('Parse Amount from String:'),
TextField(
decoration: InputDecoration(
border: OutlineInputBorder(),
labelText: 'Enter amount (e.g., \$1,234,567.89)',
),
onSubmitted: (value) {
double? parsedAmount = parseMoney(value, widget.format);
if (parsedAmount != null) {
setState(() {
amount = parsedAmount;
});
}
},
),
SizedBox(height: 16),
Text('Parsed Amount: ${formatMoney(amount, widget.format)}'),
],
),
),
);
}
}
// 辅助函数
String formatMoney(double amount, MoneyFormat format) {
return Money(amount, currency: format.symbol).format(
locale: 'en_US',
decimalDigits: format.precision,
symbolOnLeft: true,
separator: format.thousandSeparator,
decimalSeparator: format.decimalSeparator,
);
}
double? parseMoney(String amountStr, MoneyFormat format) {
try {
return double.parse(
amountStr.replaceAllMapped(
RegExp(r'[^\d\.\,]', multiLine: true, caseSensitive: false),
(match) {
if (match[0] == ',') return '.';
return '';
},
),
);
} catch (_) {
return null;
}
}
说明
- 配置货币设置:在
main
函数中,我们创建了一个MoneyFormat
实例来配置货币格式。 - 格式化金额:
formatMoney
函数使用Money
类来格式化金额。 - 解析字符串金额:
parseMoney
函数尝试从字符串中解析金额,并处理千位分隔符和小数点分隔符的差异。
请注意,parseMoney
函数是一个简单的实现,并没有完全遵循flutter_money
插件的所有功能。实际项目中,你可能需要更复杂的解析逻辑或依赖插件的内置解析功能(如果可用)。
希望这个示例对你有帮助!