Wednesday, 4 September 2019

A Flutter extension to formatting various types of currencies according



FlutterMoneyFormatter

FlutterMoneyFormatter is a Flutter extension to formatting various types of currencies according to the characteristics you like, without having to be tied to any localization.

Install

For complete steps in installing FlutterMoneyFormatter you can see in the Installation Guide.

Usage

Import the library
import 'package:flutter_money_formatter/flutter_money_formatter.dart';
Dart

Getting Started

To be able to format your double value into the various formats you want, you first need to create a FlutterMoneyFormatter instance like the following:
FlutterMoneyFormatter fmf = FlutterMoneyFormatter(
    amount: 12345678.9012345
);
Dart
Note, the code above still uses the default configuration as explained here.
After that, you can request various results of the format as follows:
// normal form
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

// compact form
print(fmf.output.compactNonSymbol) // 12.3M
print(fmf.output.compactSymbolOnLeft) // $ 12.3M
print(fmf.output.compactSymbolOnRight) // 12.3M $
Dart
If you will use the output format several times, I strongly recommend that you initialize a variable as in the following example:
MoneyFormatterOutput fo = fmf.output;
Dart
Or directly when initializing the FlutterMoneyFormatter instance as in the following example:
MoneyFormatterOutput fo = FlutterMoneyFormatter(
    amount: 12345678.9012345
).output;
Dart
So you can immediately take the value more easily as in the following example:
// normal form
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

// compact form
print(fo.compactNonSymbol) // 12.3M
print(fo.compactLeftSymbol) // $ 12.3M
print(fo.compactRightSymbol) // 12.3M $
Dart
See demo section to get more info.

Configurations

To adjust the format to suit your needs, you can set it through the settings parameter:
FlutterMoneyFormatter fmf = new FlutterMoneyFormatter(
    amount: 12345678.9012345,
    settings: MoneyFormatterSettings(
        symbol: 'IDR',
        thousandSeparator: '.',
        decimalSeparator: ',',
        symbolAndNumberSeparator: ' ',
        fractionDigits: 3,
        compactFormatType: CompactFormatType.sort
    )
)
Dart
Of course you are not required to initialize the entire configuration in the settings(MoneyFormatterSettings) parameter as in the example above. You can change one or more of the configurations above. This is because each configuration above is not mandatory and has a default value.

Properties, Methods, and Functions

  • FlutterMoneyFormatter

PROPERTY NAMESDATA TYPEDESCRIPTIONS
amountdoubleAmount number that will be formatted.
settingsMoneyFormatterSettingsSee here.
outputMoneyFormatterOutputSee here.
comparatorMoneyFormatterCompareSee here.
copyWithFlutterMoneyFormattersee here
fastCalcFlutterMoneyFormattersee here
  • MoneyFormatterSettings

CONFIGURATION PROPERTYDATA TYPEDEFAULT VALUEDESCRIPTION
symbolString$ (Dollar Sign)The symbol that will be used on formatted output.
thousandSeparatorString,The character that will be used as thousand separator on formatted output.
decimalSeparatorString.The character that will be used as decimal separator on formatted output.
fractionDigitsint2The fraction digits that will be used on formatted output.
symbolAndNumberSeparatorString' ' (Space)The character that will be used as separator between formatted number and currency symbol.
compactFormatTypeCompactFormatTypeCompactFormatType.shortSee here.
  • CompactFormatType

You can change the type of compact format like for million using M or million, or trillion using T or trillion. and so on. This type only supports two type as described below:
VALUEDESCRIPTION
CompactFormatType.shortUsed to make the compact format displayed using short text.
CompactFormatType.longUsed to make the compact format displayed using long text.
  • MoneyFormatterOutput

You can use formats that match your needs through properties found in the MoneyFormatterOutput instance.
PROPERTY NAMESDATA TYPEDESCRIPTIONS
nonSymbolStringThe results of the format of the currency are normal and without a currency symbol. Example: 12,345,678.90
symbolOnLeftStringThe results of the normal currency format and with currency symbols are on the left. Example: $ 12,345,678.90
symbolOnRightStringThe results of the normal currency format and with currency symbols are on the right. Example: 12,345,678.90 $
compactNonSymbolStringThe results of the currency format are compact and without a currency symbol. Example: 12.3M
compactSymbolOnLeftStringThe results of the currency format are compact and with currency symbols on the left. example: $ 12.3M
compactSymbolOnRightStringThe results of the currency format are compact and with currency symbols on the right. example: 12.3M $
fractionDigitsOnlyStringOnly give the fraction value. Example: 90
withoutFractionDigitsStringGive a value without fractions. Example: 12,345,678
  • MoneyFormatterCompare

METHODPARAMETERDESCRIPTIONS
isLowerThanamountCheck current instance-amount is lower than [amount] or not.
isGreaterThanamountCheck current instance-amount is greater than [amount] or not.
isEqualamountCheck current instance amount is equal than [amount] or not.
isEqualOrLowerThanamountCheck current instance amount is equal or lower than [amount] or not.
isEqualOrGreaterThanamountCheck current instance amount is equal or greater than [amount] or not.
Example of using a comparator:
FlutterMoneyFormatter fmf = FlutterMoneyFormatter(amount: 12345678.9012345);
double comparerValue = 5678.9012;

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

Dart

FastCalc

fastCalc is a function that can be used to perform various fast calculation processes that you might need. In implementing it, the fastCalc function gives the output of aFlutterMoneyFormatter instance so you can perform several calculation functions at once with the chaining method.
Function:
FlutterMoneyFormatter fastCalc({
    @required FastCalcType type, 
    @required double amount
})
Dart
Implementation:
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
Dart
Because it supports the chaining process, the example above can be shortened as follows:
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
Dart
The type parameter used by the fastCalc function has the FastCalcType data type which is an enum. The following table is an explanation for the FastCalcType enum:
INDEXNAMEDESCRIPTION
0additionUsed to do addition calculations.
1substractionUsed to do substraction calculations.
2multiplicationUsed to do multiplication calculations.
3divisionUsed to do division calculations.
4percentageAdditionUsed to do the addition calculations base on percentage.
5percentageSubstractionUsed to do the substraction calculations base on percentage.

Duplicating Instance

For some reasons, you may need to duplicate the instance and just need to change some configurations. To do that, you can use the copyWith method as below:
FlutterMoneyFormatter fmf = FlutterMoneyFormatter(amount: 12345678.9012345);

print(fmf.output.symbolOnLeft); // $ 12,345,678.90
print(fmf.copyWith(symbol: 'IDR', symbolAndNumberSeparator: '-').output.symbolOnLeft); // IDR-12,345,678.90
Dart

GitHub

"FlutterMoneyFormatter" is a Flutter extension to formatting various types of currencies according to the characteristics you like, without having to be tied to any localization. — Read More
Latest commit to the dev branch on 9-2-2019
Download as zip