Flutter数字拼写转换插件spelling_number的使用

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

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 - 可以是 stringobject。默认为 '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 指示是否使用长标度或短标度。 这会影响 billiontrillion 等词的含义。
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 使用基数词而不是单位。 eshupt
useBaseException 指定在哪些单位(1到9)上不使用基数词,而是使用常规行为。 eshupt
avoidPrefixException 单位1不使用基数词前缀。 idtrit
avoidInNumberPlural 尾随数字不是0时,单位不使用复数形式。 fr
restrictedPlural 仅3到10使用复数形式,11及以上使用单数形式。 ar
useSingularEnding 以1结尾的数字使用单数形式。 uk
useFewEnding 以2、3或4结尾的数字使用 few 形式。 uk
avoidEndingRules 使用复数形式而不是 useSingularEndinguseFewEnding uk

更多关于Flutter数字拼写转换插件spelling_number的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于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();
  }
}

解释

  1. 依赖添加:在pubspec.yaml中添加spelling_number依赖。
  2. 导入插件:在需要使用插件的Dart文件中导入spelling_number
  3. UI设计:创建一个简单的Flutter应用,包含一个文本输入框用于输入数字,一个按钮用于触发转换,以及一个文本控件用于显示转换结果。
  4. 转换逻辑:在按钮点击事件中,使用SpellingNumber().numberToWords(int number)方法将输入的数字转换为英文单词,并更新UI显示。

这个示例展示了如何使用spelling_number插件在Flutter应用中实现数字到英文单词的转换功能。你可以根据需要进一步扩展和定制这个示例。

回到顶部