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
,你可以按照以下步骤进行:
-
查找插件文档: 首先,尝试查找
flutter_api
插件的官方文档或 GitHub 仓库。通常,插件会有一个README.md
文件,里面会介绍插件的功能、如何使用它以及一些示例代码。 -
检查
pubspec.yaml
: 在你的 Flutter 项目的pubspec.yaml
文件中,查找flutter_api
插件的依赖项。它可能看起来像这样:dependencies: flutter_api: ^版本号