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

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

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

Currency Text Input Formatter

pub package

currency_text_input_formatter是Flutter的一个库,用于在文本输入时自动格式化货币值。以下是它的安装和使用方法。

安装

添加到pubspec.yaml

dependencies:
  currency_text_input_formatter: ^2.2.6

解决Intl包冲突

如果你遇到了intl包版本冲突的问题,可以在pubspec.yaml中添加以下内容:

dependency_overrides:
  intl: your intl package version

使用方法

基本用法

下面是一个简单的例子,展示了如何使用CurrencyTextInputFormatter来格式化用户输入的货币值:

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
  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,
          ),
        ),
      ),
    );
  }
}

带初始值

你可以为TextFormField设置一个初始值,并使用CurrencyTextInputFormatter进行格式化:

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
  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
  State<MyFormField> createState() => _MyFormFieldState();
}

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

  @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
  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,
          ),
        ),
      ),
    );
  }
}

使用内置方法

CurrencyTextInputFormatter还提供了一些内置的方法,方便你获取格式化或未格式化的值:

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
  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
  State<MyFormField> createState() => _MyFormFieldState();
}

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

  @override
  Widget build(BuildContext context) {
    // Built-in Methods
    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,
    );
  }
}

推荐库

维护者

许可证

MIT


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

1 回复

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


当然,下面是一个关于如何使用 currency_text_input_formatter 插件的示例代码。这个插件可以帮助你在 Flutter 应用中格式化货币输入。首先,你需要确保你的项目中已经添加了这个插件。如果还没有添加,可以在 pubspec.yaml 文件中添加以下依赖项:

dependencies:
  flutter:
    sdk: flutter
  currency_text_input_formatter: ^x.y.z  # 请使用最新版本号

然后运行 flutter pub get 来安装依赖。

下面是一个完整的 Flutter 应用示例,展示了如何使用 currency_text_input_formatter 来格式化货币输入:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Currency Text Input Formatter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: CurrencyInputScreen(),
    );
  }
}

class CurrencyInputScreen extends StatefulWidget {
  @override
  _CurrencyInputScreenState createState() => _CurrencyInputScreenState();
}

class _CurrencyInputScreenState extends State<CurrencyInputScreen> {
  final CurrencyTextInputFormatter _currencyFormatter =
      CurrencyTextInputFormatter(
        locale: 'en_US',  // 设置货币格式化的区域设置,例如 'en_US' 为美元
        symbol: '\$',     // 货币符号,例如美元符号 '$'
        decimalPlaces: 2, // 小数位数
        groupSeparator: ',', // 千分位分隔符
      );

  final TextEditingController _controller = TextEditingController();

  @override
  void dispose() {
    _controller.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Currency Text Input Formatter Demo'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: <Widget>[
            TextField(
              controller: _controller,
              decoration: InputDecoration(
                labelText: 'Enter Amount',
                suffixText: ' $_currencyFormatter.symbol', // 显示货币符号
              ),
              keyboardType: TextInputType.numberWithOptions(decimal: true),
              inputFormatters: [
                FilteringTextInputFormatter.digitsOnly, // 只允许输入数字
                _currencyFormatter, // 应用货币格式化
              ],
              inputConnectionProvider: _currencyFormatter.inputConnectionProvider(
                base: _controller.textEditingValue,
                options: const EditingTextControllerOptions(
                  inputAction: TextInputAction.done,
                ),
              ),
            ),
            SizedBox(height: 16.0),
            Text(
              'Formatted Value: $_currencyFormatter.text',
              style: TextStyle(fontSize: 18.0, fontWeight: FontWeight.bold),
            ),
          ],
        ),
      ),
    );
  }
}

在这个示例中,我们创建了一个 CurrencyTextInputFormatter 实例,并设置了货币格式化的相关参数,如区域设置、货币符号、小数位数和千分位分隔符。然后,我们在 TextFieldinputFormatters 中添加了这个格式化器,以确保用户输入的文本被正确格式化为货币格式。

此外,我们还使用了 inputConnectionProvider 来确保格式化器可以处理用户的输入。suffixText 显示了货币符号,而 Formatted Value 文本则显示了格式化后的货币值。

这个示例展示了如何使用 currency_text_input_formatter 插件来格式化货币输入,并在用户输入时动态更新显示格式化的货币值。

回到顶部