Flutter货币转换插件forex_currency_conversion的使用

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

Flutter货币转换插件forex_currency_conversion的使用

简介

forex_currency_conversion 是一个Flutter包,用于快速获取外汇价格并执行货币转换。它提供了以下特性:

  • 获取所有外汇价格列表。
  • 使用市场价格将一种货币转换为另一种货币。

安装与配置

在您的pubspec.yaml文件中添加依赖项:

dependencies:
  forex_currency_conversion: ^latest_version # 替换为最新版本号

然后运行flutter pub get以安装该包。

使用方法

导入包

首先,在您的Dart文件顶部导入此包:

import 'package:forex_currency_conversion/forex_currency_conversion.dart';

基本用法

获取所有货币汇率

如果您想要获取相对于美元(USD)的所有货币的最新汇率,可以这样做:

final fx = Forex();
Map<String, double> allPrices = await fx.getAllCurrenciesPrices();
print("Exchange rate of PKR: ${allPrices['PKR']}");
print("Exchange rate of EUR: ${allPrices['EUR']}");
print("Exchange rate of TRY: ${allPrices['TRY']}");

获取支持的货币列表

要查看所有支持的货币列表,可以使用以下代码:

final fx = Forex();
List<String> availableCurrencies = await fx.getAvailableCurrencies();
print("The list of all available currencies: ${availableCurrencies}");

货币转换

对于简单的货币转换,您可以使用以下方法进行即时转换。请确保只输入支持的货币,这些货币可以通过上述方法获得。

final fx = Forex();
double myPriceInPKR = await fx.getCurrencyConverted(sourceCurrency: "USD", destinationCurrency: "PKR", sourceAmount: 252.5);
print("252.5 USD in PKR: ${myPriceInPKR}");

初始化设置

您可以使用默认值初始化类,包括源货币、目标货币以及小数位数:

final fx = Forex(defaultDestinationCurrency: 'PKR', defaultSourceCurrency: 'EUR', defaultNumberOfDecimals: 1);

或者,您可以在创建时立即加载货币价格(如果之后不打算立即使用价格,请勿使用此选项,因为这是一个异步未等待的方法):

final fx = Forex(initializeOnCreation: true);

监听货币列表更新和结果

您可以检查货币列表更新的状态以及API调用期间是否发生错误:

final fx = Forex();

// 监听货币列表更新开始/停止状态
ValueNotifier<bool> runNotifier = fx.getRunNotifier;

// 检查货币列表更新是否仍在下载数据
bool runStatus = fx.getRunStatus;

// 监听货币列表更新结果是否有错误
ValueNotifier<String?> errorNotifier = fx.getErrorNotifier;

// 检查最近一次货币列表更新调用是否出错
String? runError = fx.getRunError;

示例应用

下面是一个完整的示例应用程序,展示了如何使用forex_currency_conversion插件来构建一个简单的货币转换器界面。

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

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

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

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  bool _loading = false;
  final fx = Forex(initializeOnCreation: true);

  Future<void> testCurrency() async {
    print('Run Status');
    print(fx.getRunStatus);
    loadingState();
    final Map<String, double> allPrices = await fx.getAllCurrenciesPrices();
    print("Exchange rate of PKR: ${allPrices['PKR']}");
    print("Exchange rate of EUR: ${allPrices['EUR']}");
    print("Exchange rate of TRY: ${allPrices['TRY']}");

    final List<String> availableCurrencies = await fx.getAvailableCurrencies();
    print("The list of all available currencies: $availableCurrencies");

    final double myPriceInPKR = await fx.getCurrencyConverted(
        sourceCurrency: "USD", destinationCurrency: "PKR", sourceAmount: 252.5);
    print("252.5 USD in PKR: $myPriceInPKR");
    print(
        "Default exchange rate (USD - BRL): ${await fx.getCurrencyConverted()}");
    print('Error check');
    print(fx.getRunError);
    loadingState();
  }

  void loadingState() {
    setState(() {
      _loading = !_loading;
    });
  }

  printRunStatus() async {
    print('Run Status');
    print(fx.getRunStatus);
  }

  @override
  void initState() {
    super.initState();
    printRunStatus();
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData(
          colorScheme: ColorScheme.fromSwatch(primarySwatch: Colors.indigo)
              .copyWith(secondary: Colors.pinkAccent)),
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Forex Conversion Example App'),
        ),
        body: Center(
          child: _loading
              ? const CircularProgressIndicator()
              : TextButton(
                  onPressed: testCurrency,
                  child: const Text(
                    'Try it',
                    style: TextStyle(fontSize: 24),
                  ),
                ),
        ),
      ),
    );
  }
}

以上就是关于forex_currency_conversion插件的基本介绍和使用方法。希望这能帮助您更好地理解和使用这个强大的工具!如果您有任何问题或需要进一步的帮助,请随时提问。


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

1 回复

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


当然,下面是一个使用Flutter中的forex_currency_conversion插件进行货币转换的示例代码。这个插件可以帮助你从一种货币转换到另一种货币。

首先,确保在你的pubspec.yaml文件中添加forex_currency_conversion依赖项:

dependencies:
  flutter:
    sdk: flutter
  forex_currency_conversion: ^最新版本号  # 请确保使用最新版本

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

接下来,在你的Flutter项目中,你可以按照以下步骤使用forex_currency_conversion插件。

  1. 导入插件
import 'package:forex_currency_conversion/forex_currency_conversion.dart';
  1. 初始化并调用API

以下是一个完整的示例,展示了如何初始化插件并进行货币转换:

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

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

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

class CurrencyConversionScreen extends StatefulWidget {
  @override
  _CurrencyConversionScreenState createState() => _CurrencyConversionScreenState();
}

class _CurrencyConversionScreenState extends State<CurrencyConversionScreen> {
  final ForexCurrencyConversion _forex = ForexCurrencyConversion();
  String _amount = '';
  String _fromCurrency = 'USD';
  String _toCurrency = 'EUR';
  String _convertedAmount = '';
  String _error = '';

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Currency Conversion'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          children: [
            TextField(
              decoration: InputDecoration(labelText: 'Amount'),
              keyboardType: TextInputType.numberWithOptions(decimal: true),
              onChanged: (value) {
                setState(() {
                  _amount = value;
                });
              },
            ),
            DropdownButtonFormField<String>(
              value: _fromCurrency,
              hint: Text('From Currency'),
              onChanged: (value) {
                setState(() {
                  _fromCurrency = value!;
                });
              },
              items: [
                'USD', 'EUR', 'JPY', 'GBP', 'AUD', 'CAD', // 添加更多货币代码
              ].map<DropdownMenuItem<String>>((String value) {
                return DropdownMenuItem<String>(
                  value: value,
                  child: Text(value),
                );
              }).toList(),
            ),
            DropdownButtonFormField<String>(
              value: _toCurrency,
              hint: Text('To Currency'),
              onChanged: (value) {
                setState(() {
                  _toCurrency = value!;
                });
              },
              items: [
                'USD', 'EUR', 'JPY', 'GBP', 'AUD', 'CAD', // 添加更多货币代码
              ].map<DropdownMenuItem<String>>((String value) {
                return DropdownMenuItem<String>(
                  value: value,
                  child: Text(value),
                );
              }).toList(),
            ),
            ElevatedButton(
              onPressed: () async {
                setState(() {
                  _convertedAmount = '';
                  _error = '';
                });
                double amount = double.tryParse(_amount) ?? 0.0;
                if (amount > 0) {
                  try {
                    double converted = await _forex.convertCurrency(
                      amount,
                      fromCurrency: _fromCurrency,
                      toCurrency: _toCurrency,
                    );
                    setState(() {
                      _convertedAmount = converted.toStringAsFixed(2);
                    });
                  } catch (e) {
                    setState(() {
                      _error = e.toString();
                    });
                  }
                } else {
                  setState(() {
                    _error = 'Please enter a valid amount.';
                  });
                }
              },
              child: Text('Convert'),
            ),
            Text(
              _error != '' ? _error : 'Converted Amount: $_convertedAmount',
              style: TextStyle(color: Colors.red.shade600),
            ),
          ],
        ),
      ),
    );
  }
}

在这个示例中,我们创建了一个简单的Flutter应用,它允许用户输入金额、选择源货币和目标货币,并显示转换后的金额。我们使用DropdownButtonFormField来选择货币,并使用ElevatedButton来触发转换操作。

请注意,forex_currency_conversion插件可能会依赖外部API来获取最新的汇率数据,因此在实际应用中,请确保处理网络错误和API限制。

希望这个示例能帮助你理解如何使用forex_currency_conversion插件进行货币转换。

回到顶部