Flutter插件flutter_api的使用方法详解

Flutter插件flutter_api的使用方法详解

初始化

baseUri 是必需的,并且全局使用。

Api.baseUri = Uri.parse('https://query1.finance.yahoo.com/v8/finance/');

配置

  • Api.baseUri 用于所有请求。(必需)
  • Api.globalDataPath 设置响应的 JSON 路径以供 value.data 使用。
  • Api.globalErrorPath 设置用于确定响应中是否存在错误的 JSON 路径。
  • Api.headers 可以添加 API 所需的任何头信息。
  • Api.onError 在响应出现错误时调用。

函数用法

  • Api.set() 发起 API 请求,不返回值。
  • Api.get<T>() 返回一个值。
  • Api.getList<T>() 返回一个 List 值。
  • Api.getMap<K,V>() 返回一个 Map 值。

示例:

Api.get<num>(
    'chart/${_currencys[0]}=X?includePrePost=false&interval=1d&corsDomain=finance.yahoo.com&.tsrc=finance',
    dataPath: 'chart/result/meta/regularMarketPrice'
).then((value) {
  print(_currencys[0] + ': ' + value.data.toString());
});

构建器用法

  • ApiBuilder<T> 返回一个值。
  • ApiListBuilder<T> 返回一个 List 值。
  • ApiMapBuilder<K,V> 返回一个 Map 值。

示例:

ApiBuilder(
  url: 'chart/${_currencys[index]}=X?includePrePost=false&interval=1d&corsDomain=finance.yahoo.com&.tsrc=finance',
  dataPath: 'chart/result/meta',
  showLoading: false,
  builder: (value) {
    if (!value.hasData) return Text("No Data");
    var title = 'USD - ' + value.data['currency'];
    return ListTile(
      title: Text(title),
      subtitle: Text(
        DateTime.fromMillisecondsSinceEpoch(value.data['regularMarketTime'] * 1000).toString() + 
        ' (${value.data['timezone']})',
        textScaleFactor: .8,
      ),
      trailing: Text(value.data['regularMarketPrice'].toString() + ' \$'),
    );
  },
);

完整示例Demo

import 'package:flutter/material.dart';
import 'package:flutter_api/api.dart';
import 'package:flutter_api/api_builders.dart';

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

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

class _MyAppState extends State<MyApp> {
  List<String> _currencys = ["USDARS", "USDCAD", "USDJPY", "USDMXN", "USDEUR"];

  [@override](/user/override)
  void initState() {
    super.initState();

    Api.baseUri = Uri.parse('https://query1.finance.yahoo.com/v8/finance/');

    Api.get<num>(
            'chart/${_currencys[0]}=X?includePrePost=false&interval=1d&corsDomain=finance.yahoo.com&.tsrc=finance',
            dataPath: 'chart/result/meta/regularMarketPrice')
        .then((value) {
      print(_currencys[0] + ': ' + value.data.toString());
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: const Text('Flutter Api example')),
        body: RefreshIndicator(
          onRefresh: () async => setState(() {}),
          child: ListView.builder(
            itemCount: _currencys.length,
            itemBuilder: (BuildContext context, int index) {
              return ApiBuilder(
                url: 'chart/${_currencys[index]}=X?includePrePost=false&interval=1d&corsDomain=finance.yahoo.com&.tsrc=finance',
                dataPath: 'chart/result/meta',
                showLoading: false,
                builder: (value) {
                  if (!value.hasData) return Text("No Data");
                  var title = 'USD - ' + value.data['currency'];
                  return ListTile(
                    title: Text(title),
                    subtitle: Text(
                      DateTime.fromMillisecondsSinceEpoch(value.data['regularMarketTime'] * 1000).toString() + 
                      ' (${value.data['timezone']})',
                      textScaleFactor: .8,
                    ),
                    trailing: Text(value.data['regularMarketPrice'].toString() + ' \$'),
                    onTap: () => _dialogMap(context, 'Map $title', _currencys[index]),
                    onLongPress: () => _dialogList(context, 'List $title', _currencys[index]),
                  );
                },
              );
            },
          ),
        ),
      ),
    );
  }

  void _dialogList(BuildContext context, String title, String currency) {
    showDialog(
      context: context,
      builder: (context) => AlertDialog(
        title: Text('Cierres $title'),
        content: ApiListBuilder<double>(
          url: 'chart/$currency=X?includePrePost=false&interval=1m&corsDomain=finance.yahoo.com&.tsrc=finance',
          dataPath: 'chart/result/indicators/quote/close',
          builder: (data) {
            List<Widget> list = [];

            for (var i = 0; i < data.items.length; i++) {
              var item = data.items[i];
              if (item == null) continue;
              if (i > 0 && data.items[i - 1] == item) continue;
              list.add(ListTile(
                trailing: Text(item.toString()),
              ));
            }

            return Scrollbar(
              child: SingleChildScrollView(child: Column(children: list)),
            );
          },
        ),
        actions: [
          TextButton(
            onPressed: () => Navigator.of(context).pop(),
            child: Text('OK'),
          ),
        ],
      ),
    );
  }

  void _dialogMap(BuildContext context, String title, String currency) {
    showDialog(
      context: context,
      builder: (context) => AlertDialog(
        title: Text(title),
        content: ApiMapBuilder<String, dynamic>(
          url: 'chart/$currency=X?includePrePost=false&interval=1m&corsDomain=finance.yahoo.com&.tsrc=finance',
          dataPath: 'chart',
          builder: (data) {
            List<Widget> list = [];

            var timestamps = List.castFrom<dynamic, int>(data.map['result'][0]['timestamp']);
            var quotes = List.castFrom<dynamic, double>(data.map['result'][0]['indicators']['quote'][0]['close']);

            for (var i = 0; i < timestamps.length; i++) {
              var time = DateTime.fromMillisecondsSinceEpoch(timestamps[i] * 1000);
              list.add(ListTile(
                title: Text(
                  time.toString(),
                  textScaleFactor: .8,
                ),
                trailing: Text(
                  (quotes[i] == null ? '-' : quotes[i].toStringAsFixed(4)) + 
                  ' \$',
                ),
              ));
            }

            return Scrollbar(
              child: SingleChildScrollView(child: Column(children: list)),
            );
          },
        ),
        actions: [
          TextButton(
            onPressed: () => Navigator.of(context).pop(),
            child: Text('ACEPTAR'),
          ),
        ],
      ),
    );
  }
}

更多关于Flutter插件flutter_api的使用方法详解的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter插件flutter_api的使用方法详解的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


Flutter 是一个由 Google 开发的开源 UI 软件开发工具包,用于构建跨平台的移动应用程序。在 Flutter 中,插件(plugins)是用来扩展 Flutter 功能的一种方式,它们允许你访问原生平台的 API 或者提供一些额外的功能。

flutter_api 并不是 Flutter 官方提供的一个已知插件名称,因此它可能是一个社区开发的插件,或者是一个特定项目中使用的内部插件。如果你想要探索一个未知的 Flutter 插件,比如 flutter_api,你可以按照以下步骤进行:

  1. 查找插件文档: 首先,尝试查找 flutter_api 插件的官方文档或 GitHub 仓库。通常,插件会有一个 README.md 文件,里面会介绍插件的功能、如何使用它以及一些示例代码。

  2. 检查 pubspec.yaml: 在你的 Flutter 项目的 pubspec.yaml 文件中,查找 flutter_api 插件的依赖项。它可能看起来像这样:

    dependencies:
      flutter_api: ^版本号
回到顶部