Flutter货币输入格式化插件cash_input_formatter的使用

Flutter货币输入格式化插件cash_input_formatter的使用

cash_input_formatter 是一个简单的货币输入格式化插件。大多数格式化工具默认会在输入时添加分隔符(如逗号或空格),而此插件只会让用户在输入小数点后添加小数部分。

使用

TextFormField(
  textAlign: TextAlign.center,
  inputFormatters: const [
    CashInputFormatter(),
  ],
),

完整示例代码

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

void main() {
  // 在根目录运行示例应用:flutter run example
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: '现金输入格式化示例',
      theme: ThemeData(
        primarySwatch: Colors.green,
      ),
      home: const MyHomePage(title: '现金输入格式化示例'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  final String title;

  const MyHomePage({super.key, required this.title});

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Padding(
          padding: const EdgeInsets.symmetric(horizontal: 20),
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              /// 显示带有符号的组件
              Column(
                children: [
                  const Align(
                    alignment: Alignment.centerLeft,
                    child: Text("带符号:"),
                  ),
                  Padding(
                    padding: const EdgeInsets.symmetric(vertical: 16.0),
                    child: Column(
                      children: [
                        const Text("在此处输入金额"),
                        Padding(
                          padding: const EdgeInsets.symmetric(horizontal: 50),
                          child: TextFormField(
                            textAlign: TextAlign.center,

                            /// 只需将插件作为输入格式化器添加即可。
                            inputFormatters: const [
                              CashInputFormatter(),
                            ],
                          ),
                        ),
                      ],
                    ),
                  ),
                ],
              ),
              // 元素之间的间距
              const Padding(
                padding: EdgeInsets.symmetric(vertical: 40.0),
              ),

              /// 显示不带符号的组件
              Column(
                children: [
                  Padding(
                    padding: const EdgeInsets.symmetric(vertical: 16.0),
                    child: Column(
                      children: [
                        const Align(
                          alignment: Alignment.centerLeft,
                          child: Text("不带符号:"),
                        ),
                        const Text("在此处输入金额"),
                        Padding(
                          padding: const EdgeInsets.symmetric(horizontal: 50),
                          child: TextFormField(
                            textAlign: TextAlign.center,
                            inputFormatters: const [
                              /// 只需将插件作为输入格式化器添加即可。
                              CashInputFormatter(useSymbol: false)
                            ],
                          ),
                        )
                      ],
                    ),
                  ),
                ],
              ),
            ],
          ),
        ),
      ),
    );
  }
}

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

1 回复

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


cash_input_formatter 是一个用于 Flutter 的插件,专门用于格式化货币输入。它可以帮助你在用户输入货币值时自动格式化文本,例如添加千位分隔符、小数点等。

安装

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

dependencies:
  flutter:
    sdk: flutter
  cash_input_formatter: ^0.2.0

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

使用

  1. 导入包

    在你的 Dart 文件中导入 cash_input_formatter 包:

    import 'package:cash_input_formatter/cash_input_formatter.dart';
    
  2. 创建 TextEditingController

    你可以使用 TextEditingController 来控制文本输入框的内容:

    final TextEditingController _controller = TextEditingController();
    
  3. 应用 CashInputFormatter

    你可以将 CashInputFormatter 应用到 TextFieldTextFormFieldinputFormatters 属性中:

    TextField(
      controller: _controller,
      decoration: InputDecoration(
        labelText: '金额',
      ),
      keyboardType: TextInputType.numberWithOptions(decimal: true),
      inputFormatters: [
        CashInputFormatter(
          decimalSeparator: '.',
          thousandSeparator: ',',
          precision: 2,
        ),
      ],
    );
    
    • decimalSeparator: 小数点的分隔符,默认为 .
    • thousandSeparator: 千位分隔符,默认为 ,
    • precision: 小数点后的位数,默认为 2
  4. 获取格式化后的值

    你可以通过 _controller.text 获取格式化后的值。

示例代码

以下是一个完整的示例代码:

import 'package:flutter/material.dart';
import 'package:cash_input_formatter/cash_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('货币输入格式化示例'),
        ),
        body: Padding(
          padding: const EdgeInsets.all(16.0),
          child: MyForm(),
        ),
      ),
    );
  }
}

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

class _MyFormState extends State<MyForm> {
  final TextEditingController _controller = TextEditingController();

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Column(
      children: [
        TextField(
          controller: _controller,
          decoration: InputDecoration(
            labelText: '金额',
          ),
          keyboardType: TextInputType.numberWithOptions(decimal: true),
          inputFormatters: [
            CashInputFormatter(
              decimalSeparator: '.',
              thousandSeparator: ',',
              precision: 2,
            ),
          ],
        ),
        SizedBox(height: 20),
        ElevatedButton(
          onPressed: () {
            print('输入的金额: ${_controller.text}');
          },
          child: Text('提交'),
        ),
      ],
    );
  }
}
回到顶部