Flutter货币输入插件currency_input_field的使用

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

Flutter货币输入插件currency_input_field的使用

License: MIT

一个用于输入货币和金额值的可定制化Flutter组件。此组件旨在为用户提供一种直观且用户友好的方式来输入货币类型及其相应的金额,并带有验证功能。

预览

无边框 有边框
Currency Input Field Currency Input Field

特性

  • 货币下拉选择
  • 金额数值输入框
  • 可自定义的提示文本
  • 金额输入验证
  • 与其他Flutter组件无缝集成

安装

pubspec.yaml文件中添加以下依赖:

dependencies:
  currency_input_field: ^0.0.5

或者使用命令行安装:

flutter pub add currency_input_field

使用

在Dart文件中导入CurrencyInputField组件:

import 'package:currency_input_field/currency_input_field.dart';

示例

以下是一个简单的示例,展示如何使用CurrencyInputField组件:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Currency Amount Input Example'),
        ),
        body: Padding(
          padding: const EdgeInsets.all(16.0),
          child: CurrencyInputExample(),
        ),
      ),
    );
  }
}

class CurrencyInputExample extends StatefulWidget {
  @override
  _CurrencyInputExampleState createState() => _CurrencyInputExampleState();
}

class _CurrencyInputExampleState extends State<CurrencyInputExample> {
  String selectedCurrency = 'ZMW';
  double enteredAmount = 0.0;

  @override
  Widget build(BuildContext context) {
    return Column(
      children: [
        CurrencyInputField(
          currencyHintText: "Currency",
          monetaryHintText: "Amount",
          currencies: ['ZMW', 'MWK', 'KES', 'ZAR', 'BWP', 'GBP', 'ZWL', 'USD'],
          onCurrencyChanged: (currency) {
            setState(() {
              selectedCurrency = currency;
            });
            print('Selected currency: $currency');
          },
          onAmountChanged: (amount) {
            setState(() {
              enteredAmount = amount;
            });
            print('Entered amount: $amount');
          },
          validateAmount: (value) {
            if (value == null || value.isEmpty) {
              return 'Please enter an amount';
            }
            final amount = double.tryParse(value);
            if (amount == null || amount <= 0) {
              return 'Please enter a valid amount';
            }
            return null;
          },
        ),
        SizedBox(height: 20.0),
        Text(
          "Selected Currency: $selectedCurrency",
          style: TextStyle(fontSize: 16.0),
        ),
        Text(
          "Entered Amount: $enteredAmount",
          style: TextStyle(fontSize: 16.0),
        ),
      ],
    );
  }
}

自定义

你可以通过传递不同的参数来自定义CurrencyInputField组件:

CurrencyInputField(
  currencyHintText: "Select Currency",
  monetaryHintText: "Enter Amount",
  currencies: ['USD', 'EUR', 'JPY', 'GBP'],
  onCurrencyChanged: (currency) {
    // 处理货币更改
  },
  onAmountChanged: (amount) {
    // 处理金额更改
  },
  
  // 应用自定义设置
  currencyInputDecoration: InputDecoration(
    border: OutlineInputBorder(),
    labelText: 'Currency',
    hintText: 'Currency'
  ),
  amountInputDecoration: InputDecoration(
    border: OutlineInputBorder(),
    labelText: 'Amount',
    hintText: 'Enter Amount'
  ),
  currencyTextStyle: TextStyle(
    fontSize: 16.0,
    color: Colors.blueAccent,
  ),
  amountTextStyle: TextStyle(
    fontSize: 16.0,
    color: Colors.green,
  ),
  
  // 默认为16.0,但你可以将其更改为任何值
  spacingBetweenFields: EdgeInsets.symmetric(horizontal: 20.0),
)

高级用法

你还可以在高级用法中添加更多参数以满足特定需求:

CurrencyInputField(
  currencyHintText: "Select Currency",
  monetaryHintText: "Enter Amount",
  currencies: ['USD', 'EUR', 'JPY', 'GBP'],
  onCurrencyChanged: (currency) {
    // 处理货币更改
  },
  onAmountChanged: (amount) {
    // 处理金额更改
  },
  validateAmount: (value) {
    if (value == null || value.isEmpty) {
      return 'Please enter an amount';
    }
    final amount = double.tryParse(value);
    if (amount == null || amount <= 0) {
      return 'Please enter a valid amount';
    }
    return null;
  },
),

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

1 回复

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


当然,下面是一个关于如何使用 currency_input_field 插件的 Flutter 代码示例。这个插件可以帮助你实现一个货币输入字段,支持格式化、验证和国际化等功能。

首先,确保你已经在 pubspec.yaml 文件中添加了 currency_input_field 依赖:

dependencies:
  flutter:
    sdk: flutter
  currency_input_field: ^x.y.z  # 替换为最新版本号

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

接下来是一个完整的 Flutter 应用示例,展示了如何使用 currency_input_field

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

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

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

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final _formKey = GlobalKey<FormState>();
  String _currencyValue = '';

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Currency Input Field Example'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Form(
          key: _formKey,
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.start,
            children: <Widget>[
              TextFormField(
                decoration: InputDecoration(
                  labelText: 'Enter some text',
                ),
              ),
              SizedBox(height: 16),
              CurrencyInputField<String>(
                decoration: InputDecoration(
                  labelText: 'Enter currency',
                ),
                initialValue: _currencyValue,
                onChanged: (value) {
                  setState(() {
                    _currencyValue = value;
                  });
                },
                options: CurrencyInputFieldOptions(
                  formatInput: true,
                  decoration: CurrencyInputDecoration(
                    prefix: '\$',
                    suffix: ' USD',
                  ),
                  keyboardType: TextInputType.numberWithOptions(decimal: true),
                  locale: 'en_US',
                ),
              ),
              SizedBox(height: 24),
              ElevatedButton(
                onPressed: () {
                  if (_formKey.currentState!.validate()) {
                    // Perform submit actions here
                    ScaffoldMessenger.of(context).showSnackBar(
                      SnackBar(
                        content: Text('Currency value: $_currencyValue'),
                      ),
                    );
                  }
                },
                child: Text('Submit'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

在这个示例中,我们做了以下几件事:

  1. 导入必要的包:导入了 flutter/material.dartcurrency_input_field 包。
  2. 定义应用入口MyApp 类是应用的入口,设置了主题和主页。
  3. 创建主页MyHomePage 是一个有状态的 widget,包含了一个表单。
  4. 添加文本输入字段:使用 TextFormField 添加了一个普通的文本输入字段。
  5. 添加货币输入字段:使用 CurrencyInputField 添加了一个货币输入字段。
    • decoration:设置输入字段的装饰,包括标签文本。
    • initialValue:设置初始值。
    • onChanged:当输入值改变时的回调,更新 _currencyValue 状态。
    • options:配置货币输入字段的选项,包括格式化输入、装饰、键盘类型和区域设置。
  6. 添加提交按钮:使用 ElevatedButton 添加了一个提交按钮,点击按钮时验证表单并显示一个包含货币值的 snack bar。

这样,你就可以在你的 Flutter 应用中使用 currency_input_field 插件来实现一个功能完善的货币输入字段了。

回到顶部