Flutter货币文本输入格式化插件currency_text_input_formatter_fork的使用

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

Flutter货币文本输入格式化插件currency_text_input_formatter_fork的使用

Currency Text Input Formatter for Flutter

该插件用于在Flutter应用中格式化货币文本输入。

安装

首先,在pubspec.yaml文件中添加依赖:

dependencies:
  currency_text_input_formatter: ^2.2.6

解决intl包冲突问题:

pubspec.yaml文件末尾添加以下内容:

dependency_overrides:
  intl: your intl package version

使用

基本用法
import 'package:currency_text_input_formatter/currency_text_input_formatter.dart';
import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Welcome to Flutter',
      home: Scaffold(
        appBar: AppBar(
          title: Text('Welcome to Flutter'),
        ),
        body: Center(
          child: TextField(
            inputFormatters: [CurrencyTextInputFormatter.currency()],
            keyboardType: TextInputType.number,
          ),
        ),
      ),
    );
  }
}
带初始值的用法
import 'package:currency_text_input_formatter/currency_text_input_formatter.dart';
import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Welcome to Flutter',
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Welcome to Flutter'),
        ),
        body: Center(
          child: MyFormField(),
        ),
      ),
    );
  }
}

class MyFormField extends StatefulWidget {
  const MyFormField({ super.key });

  [@override](/user/override)
  State<MyFormField> createState() => _MyFormFieldState();
}

class _MyFormFieldState extends State<MyFormField> {
  final CurrencyTextInputFormatter _formatter = CurrencyTextInputFormatter.currency();

  [@override](/user/override)
  Widget build(BuildContext context) {
    return TextFormField(
      initialValue: _formatter.format('2000'),
      inputFormatters: <TextInputFormatter>[_formatter],
      keyboardType: TextInputType.number,
    );
  }
}
自定义选项
import 'package:currency_text_input_formatter/currency_text_input_formatter.dart';
import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Welcome to Flutter',
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Welcome to Flutter'),
        ),
        body: Center(
          child: TextField(
            inputFormatters: <TextInputFormatter>[
              CurrencyTextInputFormatter.currency(
                locale: 'ko',
                decimalDigits: 0,
                symbol: 'KRW(원) ',
              ),
            ],
            keyboardType: TextInputType.number,
          ),
        ),
      ),
    );
  }
}
使用内置方法
import 'package:currency_text_input_formatter/currency_text_input_formatter.dart';
import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Welcome to Flutter',
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Welcome to Flutter'),
        ),
        body: Center(
          child: MyFormField(),
        ),
      ),
    );
  }
}

class MyFormField extends StatefulWidget {
  const MyFormField({ super.key });

  [@override](/user/override)
  State<MyFormField> createState() => _MyFormFieldState();
}

class _MyFormFieldState extends State<MyFormField> {
  final CurrencyTextInputFormatter _formatter = CurrencyTextInputFormatter.currency();

  [@override](/user/override)
  Widget build(BuildContext context) {
    // 内置方法
    print(_formatter.getFormattedValue()); // $ 2,000
    print(_formatter.getUnformattedValue()); // 2000.00
    print(_formatter.format('2000')); // $ 2,000
    print(_formatter.formatDouble('20.00')); // $ 20

    return TextFormField(
      inputFormatters: <TextInputFormatter>[_formatter],
      keyboardType: TextInputType.number,
    );
  }
}

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

1 回复

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


currency_text_input_formatter_fork 是一个 Flutter 插件,用于格式化货币输入。它可以帮助你在文本输入框中自动格式化用户输入的金额,使其符合货币的显示格式。这个插件是基于 currency_text_input_formatter 的一个分支版本。

使用步骤

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  currency_text_input_formatter_fork: ^1.0.0+1  # 请检查最新版本

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

2. 导入插件

在你的 Dart 文件中导入插件:

import 'package:currency_text_input_formatter_fork/currency_text_input_formatter.dart';

3. 使用 CurrencyTextInputFormatter

你可以在 TextFieldTextFormField 中使用 CurrencyTextInputFormatter 来格式化用户的输入。

TextField(
  decoration: InputDecoration(
    labelText: 'Amount',
  ),
  keyboardType: TextInputType.number,
  inputFormatters: [
    CurrencyTextInputFormatter(
      locale: 'en_US',  // 设置本地化(可选)
      decimalDigits: 2,  // 设置小数位数(可选)
      symbol: '\$',      // 设置货币符号(可选)
    ),
  ],
);

4. 参数说明

  • locale: 本地化设置,例如 en_US 表示美国英语,de_DE 表示德国德语。默认值为 null,表示使用系统默认本地化。
  • decimalDigits: 小数位数,默认为 2
  • symbol: 货币符号,例如 \$。默认为 null,表示不使用货币符号。

5. 获取格式化后的值

如果你想获取格式化后的值,可以监听 TextFieldTextFormFieldonChanged 事件:

String formattedValue = '';

TextField(
  decoration: InputDecoration(
    labelText: 'Amount',
  ),
  keyboardType: TextInputType.number,
  inputFormatters: [
    CurrencyTextInputFormatter(
      locale: 'en_US',
      decimalDigits: 2,
      symbol: '\$',
    ),
  ],
  onChanged: (value) {
    setState(() {
      formattedValue = value;
    });
  },
);

示例

以下是一个完整的示例:

import 'package:flutter/material.dart';
import 'package:currency_text_input_formatter_fork/currency_text_input_formatter.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Currency Input Formatter Example'),
        ),
        body: CurrencyInputForm(),
      ),
    );
  }
}

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

class _CurrencyInputFormState extends State<CurrencyInputForm> {
  String formattedValue = '';

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.all(16.0),
      child: Column(
        children: [
          TextField(
            decoration: InputDecoration(
              labelText: 'Amount',
            ),
            keyboardType: TextInputType.number,
            inputFormatters: [
              CurrencyTextInputFormatter(
                locale: 'en_US',
                decimalDigits: 2,
                symbol: '\$',
              ),
            ],
            onChanged: (value) {
              setState(() {
                formattedValue = value;
              });
            },
          ),
          SizedBox(height: 20),
          Text('Formatted Value: $formattedValue'),
        ],
      ),
    );
  }
}
回到顶部