Flutter货币格式化插件flutter_money_formatter的使用

发布于 1周前 作者 sinazl 来自 Flutter

Flutter货币格式化插件flutter_money_formatter的使用

概述

flutter_money_formatter 是一个用于格式化各种货币类型的 Flutter 扩展库,无需依赖任何本地化设置。它可以帮助开发者轻松地将数字金额转换为用户友好的货币格式。

插件版本

依赖项

此插件依赖于 intl 库,用于处理国际化的支持。 intl

截图


安装

要安装 flutter_money_formatter,请在项目的 pubspec.yaml 文件中添加以下依赖:

dependencies:
  flutter_money_formatter: ^2.0.0

然后运行以下命令以获取最新版本:

flutter pub get

更多安装步骤可以查看安装指南


使用方法

导入库

首先需要导入 flutter_money_formatter 库:

import 'package:flutter_money_formatter/flutter_money_formatter.dart';
基本用法

创建一个 FlutterMoneyFormatter 实例并格式化金额:

FlutterMoneyFormatter fmf = FlutterMoneyFormatter(
    amount: 12345678.9012345
);
获取格式化结果

可以通过 output 属性访问不同格式的结果:

// 正常格式
print(fmf.output.nonSymbol); // 输出: 12,345,678.90
print(fmf.output.symbolOnLeft); // 输出: $ 12,345,678.90
print(fmf.output.symbolOnRight); // 输出: 12,345,678.90 $
print(fmf.output.fractionDigitsOnly); // 输出: 90
print(fmf.output.withoutFractionDigits); // 输出: 12,345,678

// 简约格式
print(fmf.output.compactNonSymbol); // 输出: 12.3M
print(fmf.output.compactSymbolOnLeft); // 输出: $ 12.3M
print(fmf.output.compactSymbolOnRight); // 输出: 12.3M $

如果需要多次使用格式化结果,建议将 output 属性赋值给变量:

MoneyFormatterOutput fo = fmf.output;
print(fo.nonSymbol); // 输出: 12,345,678.90

配置参数

通过 settings 参数自定义格式化行为:

FlutterMoneyFormatter fmf = FlutterMoneyFormatter(
    amount: 12345678.9012345,
    settings: MoneyFormatterSettings(
        symbol: 'IDR',
        thousandSeparator: '.',
        decimalSeparator: ',',
        symbolAndNumberSeparator: ' ',
        fractionDigits: 3,
        compactFormatType: CompactFormatType.short
    )
);

可用的配置项及其默认值如下表所示:

属性名称 数据类型 默认值 描述
symbol String $ (美元符号) 货币符号
thousandSeparator String , 千位分隔符
decimalSeparator String . 小数点
fractionDigits int 2 小数部分的位数
symbolAndNumberSeparator String ' ' (空格) 数字与符号之间的分隔符
compactFormatType CompactFormatType short 简约格式类型(shortlong

快速计算

fastCalc 方法允许快速执行加减乘除等运算,并支持百分比计算:

FlutterMoneyFormatter fmf = FlutterMoneyFormatter(amount: 12345.678);

fmf.fastCalc(type: FastCalcType.addition, amount: 1.111);
fmf.fastCalc(type: FastCalcType.substraction, amount: 2.222);

print(fmf.output.nonSymbol); // 输出: 12,345.68

也可以链式调用:

FlutterMoneyFormatter fmf = FlutterMoneyFormatter(amount: 12345.678)
    .fastCalc(type: FastCalcType.addition, amount: 1.111)
    .fastCalc(type: FastCalcType.substraction, amount: 2.222);

print(fmf.output.nonSymbol); // 输出: 12,345.68

比较器

通过 comparator 属性比较两个金额大小:

FlutterMoneyFormatter fmf = FlutterMoneyFormatter(amount: 12345678.9012345);
double comparerValue = 5678.9012;

print(fmf.comparator.isEqual(comparerValue)); // 输出: false
print(fmf.comparator.isGreaterThan(comparerValue)); // 输出: true

示例代码

以下是一个完整的示例代码,展示如何使用 flutter_money_formatter 进行货币格式化:

import 'package:flutter/material.dart';
import 'package:flutter_money_formatter/flutter_money_formatter.dart';

void main() => runApp(MyApp());

class MyApp extends StatefulWidget {
  [@override](/user/override)
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  [@override](/user/override)
  Widget build(BuildContext context) {
    TextStyle titleStyle = TextStyle(fontSize: 24.0, fontWeight: FontWeight.bold);
    TextStyle subtitleStyle = TextStyle(fontSize: 20.0);

    FlutterMoneyFormatter fmf = FlutterMoneyFormatter(amount: 12345678.9012345);

    MoneyFormatterOutput fo = fmf.output;

    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Money Formatter Demo'),
        ),
        body: SingleChildScrollView(
          child: ConstrainedBox(
            constraints: BoxConstraints(),
            child: Container(
              padding: EdgeInsets.all(15.0),
              child: Column(
                crossAxisAlignment: CrossAxisAlignment.start,
                children: <Widget>[
                  ListTile(
                    title: Text('FormattedNonSymbol:', style: titleStyle),
                    subtitle: Text(fo.nonSymbol, style: subtitleStyle),
                  ),
                  ListTile(
                    title: Text('FormattedLeftSymbol:', style: titleStyle),
                    subtitle: Text(fo.symbolOnLeft, style: subtitleStyle),
                  ),
                  ListTile(
                    title: Text('FormattedRightSymbol:', style: titleStyle),
                    subtitle: Text(fo.symbolOnRight, style: subtitleStyle),
                  ),
                  ListTile(
                    title: Text('FormattedWithoutDecimal:', style: titleStyle),
                    subtitle: Text(fo.withoutFractionDigits, style: subtitleStyle),
                  ),
                  ListTile(
                    title: Text('DecimalOnly:', style: titleStyle),
                    subtitle: Text(fo.fractionDigitsOnly, style: subtitleStyle),
                  ),
                  ListTile(
                    title: Text('FormattedNonSymbolCustom:', style: titleStyle),
                    subtitle: Text(
                      fmf.copyWith(amount: 123.4567, fractionDigits: 4).output.nonSymbol,
                      style: subtitleStyle,
                    ),
                  ),
                  ListTile(
                    title: Text('FormattedLeftSymbolCustom:', style: titleStyle),
                    subtitle: Text(
                      fmf.copyWith(symbol: 'IDR', symbolAndNumberSeparator: '-').output.symbolOnLeft,
                      style: subtitleStyle,
                    ),
                  ),
                  ListTile(
                    title: Text('CompactNonSymbol:', style: titleStyle),
                    subtitle: Text(
                      fmf.copyWith(amount: 12345678987654321.9012345).output.compactNonSymbol,
                      style: subtitleStyle,
                    ),
                  ),
                  ListTile(
                    title: Text('CompactLongNonSymbol:', style: titleStyle),
                    subtitle: Text(
                      fmf.copyWith(
                        amount: 12345678987654321.9012345,
                        compactFormatType: CompactFormatType.long,
                      ).output.compactNonSymbol,
                      style: subtitleStyle,
                    ),
                  ),
                  ListTile(
                    title: Text('CompactLeftSymbol:', style: titleStyle),
                    subtitle: Text(
                      fmf.copyWith(amount: 1234.56789).output.compactSymbolOnLeft,
                      style: subtitleStyle,
                    ),
                  ),
                  ListTile(
                    title: Text('CompactRightSymbol:', style: titleStyle),
                    subtitle: Text(
                      fmf.copyWith(
                        amount: 123456.7890,
                        compactFormatType: CompactFormatType.short,
                      ).output.compactSymbolOnRight,
                      style: subtitleStyle,
                    ),
                  ),
                  ListTile(
                    title: Text('Fast Calc', style: titleStyle),
                    subtitle: Text(
                      '${FlutterMoneyFormatter(amount: 12345.678).fastCalc(type: FastCalcType.addition, amount: 1.111).fastCalc(type: FastCalcType.substraction, amount: 2.222).output.nonSymbol}',
                      style: subtitleStyle,
                    ),
                  ),
                  ListTile(
                    title: Text('Fast Calc', style: titleStyle),
                    subtitle: Text(
                      '${fmf.fastCalc(type: FastCalcType.addition, amount: 1234.567).fastCalc(type: FastCalcType.substraction, amount: 234.5678).output.nonSymbol}',
                      style: subtitleStyle,
                    ),
                  ),
                  ListTile(
                    title: Text('Compare IsEqual (=)', style: titleStyle),
                    subtitle: Text('${fmf.comparator.isEqual(5000)}', style: subtitleStyle),
                  ),
                ],
              ),
            ),
          ),
        ),
      ),
    );
  }
}

更多关于Flutter货币格式化插件flutter_money_formatter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter货币格式化插件flutter_money_formatter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


flutter_money_formatter 是一个用于格式化货币的 Flutter 插件,它可以帮助你将数字格式化为带有货币符号、千位分隔符、小数位等的货币格式。以下是如何使用 flutter_money_formatter 插件的步骤:

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 flutter_money_formatter 依赖:

dependencies:
  flutter:
    sdk: flutter
  flutter_money_formatter: ^0.9.0

然后运行 flutter pub get 来获取依赖。

2. 导入包

在你的 Dart 文件中导入 flutter_money_formatter 包:

import 'package:flutter_money_formatter/flutter_money_formatter.dart';

3. 使用 FlutterMoneyFormatter

你可以使用 FlutterMoneyFormatter 来格式化货币。以下是一个简单的示例:

void main() {
  double amount = 1234567.89;

  // 创建 FlutterMoneyFormatter 实例
  FlutterMoneyFormatter fmf = FlutterMoneyFormatter(
    amount: amount,
    settings: MoneyFormatterSettings(
      symbol: '\$', // 货币符号
      thousandSeparator: ',', // 千位分隔符
      decimalSeparator: '.', // 小数分隔符
      symbolAndNumberSeparator: ' ', // 货币符号和数字之间的分隔符
      fractionDigits: 2, // 小数位数
    ),
  );

  // 获取格式化后的货币
  MoneyFormatterOutput formatted = fmf.output;

  print('Without Symbol: ${formatted.nonSymbol}');
  print('With Symbol: ${formatted.symbolOnLeft}');
  print('Compact Format: ${formatted.compactNonSymbol}');
  print('Compact Format with Symbol: ${formatted.compactSymbolOnLeft}');
}

4. 输出结果

运行上述代码后,你将得到以下输出:

Without Symbol: 1,234,567.89
With Symbol: \$ 1,234,567.89
Compact Format: 1.23M
Compact Format with Symbol: \$ 1.23M
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!