Flutter数字拼写转换插件spelling_number的使用
Flutter Spelling Number
Flutter Spelling Number 是一个插件,可以将数字转换为单词(即阿拉伯语中的 “تفقيط” 或 “将数字转换为文字”)。
示例
将数字转换为单词
SpellingNumber(
lang: "en",
wholesUnit: "ton",
fractionUnit: "kg",
digitsLengthW2F: 3,
decimalSeperator: "and"
).convert(100.951); // => One Hundred Ton And Nine Hundred Fifty-One Kg
将美元和美分转换为单词
SpellingNumber(
lang: "en",
wholesUnit: "dollar",
fractionUnit: "cent",
digitsLengthW2F: 2,
decimalSeperator: "and"
).convert(123.45); // => One Hundred Twenty-Three Dollars And Forty-Five Cents
将重量转换为单词
SpellingNumber(
lang: "en",
wholesUnit: "Ton",
fractionUnit: "Kg",
digitsLengthW2F: 3,
decimalSeperator: "and"
).convert(100.951); // => One Hundred Ton And Nine Hundred Fifty-One Kg
阿拉伯语数字转换为单词
SpellingNumber(
lang: "ar",
wholesUnit: "طن",
fractionUnit: "كيلو غرام",
digitsLengthW2F: 3,
decimalSeperator: "و"
).convert(100.951); // => مائة طن وتسعمائة وواحد وخمسون كيلو غرام
特性
- 支持14种语言,包括阿拉伯语
- 可以指定整数单位、分数单位和小数分隔符
- 可以将货币和重量数字转换为单词
安装
使用Dart
$ dart pub add spelling_number
使用Flutter
$ flutter pub add spelling_number
这将在你的 pubspec.yaml
文件中添加一行:
dependencies:
spelling_number: ^0.0.4
使用方法
导入
在你的Dart代码中,你可以这样使用:
import 'package:spelling_number/spelling_number.dart';
示例代码
import 'dart:developer';
import 'package:flutter/material.dart';
import 'package:spelling_number/spelling_number.dart';
import 'dart:math' as Math;
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: const MyHomePage(title: 'Flutter Spelling Number'),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({Key? key, required this.title}) : super(key: key);
final String title;
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
List<Map<String, dynamic>> spelledNumberList = [];
@override
void initState() {
var numberFormats = [
{
'lang': 'en',
'digitsLengthW2F': 2,
'decimalSeperator': "and",
'header': 'Example Convert Number into words'
},
{
'lang': 'ar',
'digitsLengthW2F': 2,
'decimalSeperator': "و",
'header': ' تفقيط أو تحويل الرقم الى كلمات باللغة العربية'
},
];
var numbers = [100, 132.21, 1000000, 1123000530.12];
for (var numberFormat in numberFormats) {
spelledNumberList.add({'title': numberFormat['header'].toString(), 'value': ""});
for (int i = 0; i < numbers.length; i++) {
spelledNumberList.add({
'title': 'The spelling of ${numbers[i]} in ${numberFormat['lang']} lang is',
'value': SpellingNumber(
lang: numberFormat['lang'].toString(),
digitsLengthW2F: numberFormat['digitsLengthW2F'] as int,
decimalSeperator: numberFormat['decimalSeperator'].toString(),
).convert(numbers[i])
});
}
}
var moneyFormats = [
{
'lang': 'en',
'wholesUnit': "dollar",
'fractionUnit': "cent",
'digitsLengthW2F': 2,
'decimalSeperator': "and",
'header': 'Example Convert Dollars and Cents into words'
},
{
'lang': 'ar',
'wholesUnit': "ليرة لبنانية",
'fractionUnit': "قرش",
'digitsLengthW2F': 3,
'decimalSeperator': "و",
'header': 'تفقيط العملة'
},
];
for (var format in moneyFormats) {
spelledNumberList.add({'title': format['header'].toString(), 'value': ""});
for (int i = 0; i < numbers.length; i++) {
spelledNumberList.add({
'title': 'The spelling of amount ${numbers[i]} in ${format['lang']} lang is',
'value': SpellingNumber(
lang: format['lang'].toString(),
wholesUnit: format['wholesUnit'].toString(),
fractionUnit: format['fractionUnit'].toString(),
digitsLengthW2F: format['digitsLengthW2F'] as int,
decimalSeperator: format['decimalSeperator'].toString(),
).convert(numbers[i])
});
}
}
var weightFormats = [
{
'lang': 'en',
'wholesUnit': "Ton",
'fractionUnit': "Kg",
'digitsLengthW2F': 3,
'decimalSeperator': "and",
'header': 'Example Convert Weight number into words'
},
{
'lang': 'ar',
'wholesUnit': "طن",
'fractionUnit': "كيلو غرام",
'digitsLengthW2F': 3,
'decimalSeperator': "و",
'header': 'تفقيط الوزن'
},
];
for (var weightFormat in weightFormats) {
spelledNumberList.add({'title': weightFormat['header'].toString(), 'value': ""});
for (int i = 0; i < numbers.length; i++) {
spelledNumberList.add({
'title': 'The spelling of weight ${numbers[i]} in ${weightFormat['lang']} lang is',
'value': SpellingNumber(
lang: weightFormat['lang'].toString(),
wholesUnit: weightFormat['wholesUnit'].toString(),
fractionUnit: weightFormat['fractionUnit'].toString(),
digitsLengthW2F: weightFormat['digitsLengthW2F'] as int,
decimalSeperator: weightFormat['decimalSeperator'].toString(),
).convert(numbers[i])
});
}
}
log('${spelledNumberList}');
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Container(
child: ListView.builder(
itemCount: spelledNumberList.length,
itemBuilder: (context, index) {
var item = spelledNumberList[index];
if (item['value'].length == 0) {
return Center(
child: Container(
width: double.infinity,
height: 30,
child: Text(
item['title'].toString(),
style: TextStyle(fontWeight: FontWeight.bold, color: Colors.white),
),
color: Colors.blue,
alignment: AlignmentDirectional.center,
),
);
}
return ListTile(
title: Text(
item['title'].toString(),
style: const TextStyle(color: Colors.blue, fontWeight: FontWeight.bold),
),
subtitle: Text(
item['value'].toString(),
style: const TextStyle(color: Color(0xff738088)),
),
);
}),
),
);
}
}
构造函数参数
noAnd
- 默认为false
。确定是否使用分隔符。分隔符是国际化的。lang
- 可以是string
或object
。默认为'en'
。确定使用哪种语言。可以传递一个外部语言定义的 i18n 配置对象。
目前支持的语言有:
Language | lang |
---|---|
English | en |
Portuguese (Brazil) | pt |
Portuguese (Portugal) | ptPT |
Spanish | es |
French | fr |
Esperanto | eo |
Vietnamese | vi |
Arabic | ar |
Azerbaijan | az |
Turkish | tr |
English (Indian) | enIndian |
Ukrainian | uk |
Indonesian | id |
Russian | ru |
贡献
配置你自己的语言
每种语言都有其独特的语法例外。你可以创建自己的 language.json
文件,并将其放在 i18n
文件夹中,为 writtenNumber
提供支持。
语言参数
参数 | 类型 | 描述 | 示例 |
---|---|---|---|
useLongScale |
boolean | 指示是否使用长标度或短标度。 | 这会影响 billion 、trillion 等词的含义。 |
baseSeparator |
string | 分隔基数词。 | 29 -> twenty-eight。西班牙语使用连接符 “y”。 |
unitSeparator |
string | 分隔单位与最后一个基数词。 | 1234 -> one thousand two hundred and thirty-four。 |
allSeparator |
string | 分隔所有基数词,而不仅仅是最后一个。 | 1125 -> ألف ومائة وخمسة وعشرون。 |
base |
Object | 基数词。这些数字有唯一的名字,并用于构建其他数字。 | |
alternativeBase |
Object | 单位特定的基数词替代版本。这些基数词将作为默认 base 的扩展。 |
"alternativeBase": { "feminine": {"1":"одна","2":"дві"} } |
units |
Array | 数字单位列表(字符串或对象)。支持单数、双数和复数单位。检查以下对象参数。 | |
unitExceptions |
Object | 有时语法例外会影响基数词与单位的组合。你可以为任何基数词设置特定的例外。 | 转换 1232000 在西班牙语中:不使用例外(错误)-> uno millón doscientos treinta y dos mil;使用例外 -> un millón doscientos treinta y dos mil。 |
单位参数
单位参数 | 描述 | 示例语言 |
---|---|---|
singular |
单个元素。 | 所有 |
dual |
两个元素。 | ar |
plural |
两个或更多元素(或三个或更多)。 | 所有 |
few |
2到4之间(包括2和4)。 | uk |
useAlternativeBase |
覆盖默认 base 。 |
uk |
useBaseInstead |
使用基数词而不是单位。 | es 、hu 、pt |
useBaseException |
指定在哪些单位(1到9)上不使用基数词,而是使用常规行为。 | es 、hu 、pt |
avoidPrefixException |
单位1不使用基数词前缀。 | id 、tr 、it |
avoidInNumberPlural |
尾随数字不是0时,单位不使用复数形式。 | fr |
restrictedPlural |
仅3到10使用复数形式,11及以上使用单数形式。 | ar |
useSingularEnding |
以1结尾的数字使用单数形式。 | uk |
useFewEnding |
以2、3或4结尾的数字使用 few 形式。 |
uk |
avoidEndingRules |
使用复数形式而不是 useSingularEnding 和 useFewEnding 。 |
uk |
更多关于Flutter数字拼写转换插件spelling_number的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter数字拼写转换插件spelling_number的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中使用spelling_number
插件将数字转换为拼写的示例代码。spelling_number
是一个用于将阿拉伯数字转换为英文单词的Flutter插件。
步骤 1: 添加依赖
首先,在pubspec.yaml
文件中添加spelling_number
依赖:
dependencies:
flutter:
sdk: flutter
spelling_number: ^最新版本号 # 请替换为实际的最新版本号
然后运行flutter pub get
以获取依赖。
步骤 2: 导入插件
在你的Dart文件中导入spelling_number
插件:
import 'package:spelling_number/spelling_number.dart';
步骤 3: 使用插件
以下是一个简单的示例,展示如何将数字转换为英文单词并在UI中显示:
import 'package:flutter/material.dart';
import 'package:spelling_number/spelling_number.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: NumberSpellingScreen(),
);
}
}
class NumberSpellingScreen extends StatefulWidget {
@override
_NumberSpellingScreenState createState() => _NumberSpellingScreenState();
}
class _NumberSpellingScreenState extends State<NumberSpellingScreen> {
final TextEditingController _controller = TextEditingController();
String _spelledNumber = '';
void _convertNumberToSpelling() {
final int number = int.tryParse(_controller.text) ?? 0;
setState(() {
_spelledNumber = SpellingNumber().numberToWords(number);
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Number to Spelling Converter'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
TextField(
controller: _controller,
decoration: InputDecoration(
labelText: 'Enter a number',
border: OutlineInputBorder(),
),
keyboardType: TextInputType.number,
),
SizedBox(height: 20),
ElevatedButton(
onPressed: _convertNumberToSpelling,
child: Text('Convert'),
),
SizedBox(height: 20),
Text(
'Spelling: $_spelledNumber',
style: TextStyle(fontSize: 20),
),
],
),
),
);
}
@override
void dispose() {
_controller.dispose();
super.dispose();
}
}
解释
- 依赖添加:在
pubspec.yaml
中添加spelling_number
依赖。 - 导入插件:在需要使用插件的Dart文件中导入
spelling_number
。 - UI设计:创建一个简单的Flutter应用,包含一个文本输入框用于输入数字,一个按钮用于触发转换,以及一个文本控件用于显示转换结果。
- 转换逻辑:在按钮点击事件中,使用
SpellingNumber().numberToWords(int number)
方法将输入的数字转换为英文单词,并更新UI显示。
这个示例展示了如何使用spelling_number
插件在Flutter应用中实现数字到英文单词的转换功能。你可以根据需要进一步扩展和定制这个示例。