我设法从Flutter项目上本地的Json文件加载数据。如果API网址类似于:
,我还能够从Internet上获取数据。https://[API-Server][parameter1:xy][parameter2:abc][API-KEY:lasgoewrijeowfjsdfdfiia]
我用以下代码示例将其归档:
Future<String> _loadStringFixtures() async {
return await rootBundle.loadString('assets/fixtures.json');
}
Future loadFixtures() async {
String jsonString = await _loadStringFixtures();
final jsonResponse = json.decode(jsonString);
FixturesAPI value = new FixturesAPI.fromJson(jsonResponse);
return value;
}
到目前为止一切都很好...
但是现在我正面临API提供程序RapidAPI的问题 您可以在这里找到文档等: https://rapidapi.com/api-sports/api/api-football/endpoints
如您所见,它们提供了一些代码段以连接到其API。 有一些C,C#,Java,Python等。您可以通过上面的链接查看所有这些内容。 可悲的是,没有Flutter的例子。 而且,我没有找到适应这些示例的方法。
通常,您可以将您的API密钥直接粘贴到URL中,但是这似乎不可能吗?也许是?
除了我做过的事情外,Flutter还可以从API接收数据吗?
非常感谢您的帮助!
答案 0 :(得分:0)
是的,可能会出现抖动。在Flutter中使用Dio Package,这是一个功能强大的Http客户端。使用dio,您可以设置拦截器以将api键添加到url,因此您不必将其附加在每个请求中。 Setting interceptors将为您提供帮助。
答案 1 :(得分:0)
使用http package可能非常简单。您可以在下面的示例中看到...
import 'dart:convert';
import 'package:http/http.dart' as http;
import 'package:flutter/material.dart';
class APIService {
// API key
static const _api_key = <YOU-API-KEY-HERE>;
// Base API url
static const String _baseUrl = "api-football-beta.p.rapidapi.com";
// Base headers for Response url
static const Map<String, String> _headers = {
"content-type": "application/json",
"x-rapidapi-host": "api-football-beta.p.rapidapi.com",
"x-rapidapi-key": _api_key,
};
// Base API request to get response
Future<dynamic> get({
@required String endpoint,
@required Map<String, String> query,
}) async {
Uri uri = Uri.https(_baseUrl, endpoint, query);
final response = await http.get(uri, headers: _headers);
if (response.statusCode == 200) {
// If server returns an OK response, parse the JSON.
return json.decode(response.body);
} else {
// If that response was not OK, throw an error.
throw Exception('Failed to load json data');
}
}
}
然后得到您的请求:
//....
APIService apiService = APIService();
// You future
Future future;
//in the initState() or use it how you want...
future = apiService.get(endpoint:'/fixtures', query:{"live": "all"});
//....