问题描述
依赖关系: 航空表:^ 0.0.2 导入'package:airtable / airtable.dart'; ??
import'package:dart_airtable / dart_airtable.dart'; ??
void main() async {
final apiKey = 'my-airtable-api-key'
final projectBase = 'my-airtable-project-base';
final recordName = 'Tasks';
var airtable = Airtable(apiKey: apiKey,projectBase: projectBase);
var records = await airtable.getAllRecords(recordName);
print(records);
}
如果有人知道如何解决,我将非常感激。
解决方法
首先,似乎您将两件事混合在一起。当前有两个packages
提供了用于与airtable进行通信的库:airtable 0.0.2和dart_airtable 0.1.1。
在示例代码中,您将import语句用于第一个package
,但使用第二个代码。由于第一个没有提供指向repository
的有效链接,因此我将看第二个。
要从API检索项目的records
,可以使用以下代码:
var records = await airtable.getAllRecords(recordName);
很遗憾,package
有一些错误。当我想创建记录时,我使用了createRecord
方法,如下所示:
var test = await airtable.createRecord(
recordName,AirtableRecord(
fields: [
AirtableRecordField(
fieldName: 'Short Description',value: 'Test Description',),],);
print(test);
但是我唯一得到的response
是null
。因此,我克隆了项目并调试了方法。结果是这样的:
{"error":{"type":"INVALID_REQUEST_UNKNOWN","message":"Invalid request: parameter validation failed. Check your request data."}}
经过一番搜索,我发现package
向airtable API发送了错误的数据。在toJson
模型的AirtableRecord
方法中,作者添加了不必要的字段id
和createdTime
。删除它们后,该方法将起作用。
响应:
AirtableRecord(id: rec9bqN78Le1dbC1g,createdTime: 2020-10-20 19:10:21.000Z,fields: {Short Description: Test Description})
我没有寻找其余的方法,但是我的建议是编写自己的通话时间API连接或使用现有的package
并更改不起作用的内容。希望对您有帮助。
编辑:
我将再次检查repository
,看来作者不活跃。由于它仅包含一些与airtable API一起使用的方法和模型,因此我认为只编写自己的实现并不是一个坏主意。
下面是一个简单的示例(使用Dio进行网络连接):
try {
final response = await Dio().post(
'https://api.airtable.com/v0/$projectBase/$recordName',options: Options(
contentType: 'Application/json',headers: {
'Authorization': 'Bearer $yourApiKey','Accept': 'Application/json',},data: {
'records': [
{
'fields': {
'Short Description': 'Cactus','Total': 11.5,}
},);
// TODO: Whatever you want to do with the response. A good practice is to transform it into models and than work with them
print(response);
} on DioError catch (e) {
// TODO: Error handling
if (e.response != null) {
print(e.response.data);
} else {
print(e.request);
print(e.message);
}
}
响应:
{"records":[{"id":"recrvxH93gJgAGo7j","fields":{"Short Description":"Cactus","Total":11.5},"createdTime":"2020-10-21T20:41:19.000Z"}]}
您现在可以使用GetIt
软件包将其扩展为service
,并添加所需的功能。我明确建议您也将models
用于response
(请看this)。
我使用了他们的示例工作区之一。 projectBase是一个ID。您只需查看他们的API文档,即可了解如何构建requests
。
编辑2:
阅读可以通过以下方式简单完成:
final response = await Dio().get(
'https://api.airtable.com/v0/$projectBase/$recordName',);
更新:
final response = await Dio().patch(
'https://api.airtable.com/v0/$projectBase/$recordName',data: {
'records': [
{
'id': 'rechYkD0pDW1NjFAF','fields': {
'Short Description': 'Cactus II',);
然后删除:
final response = await Dio().delete(
'https://api.airtable.com/v0/$projectBase/$recordName/rec0bMv507juqS7pv',options: Options(
headers: {
'Authorization': 'Bearer $yourApiKey',);
这些只是示例,我建议您也阅读API文档以获得可能的概述。还有您自己的实现以及适当的错误处理。
编辑3:
您可以使用filterByFormula
参数来检索所有符合条件(Reference)的数据。
例如:
final response = await Dio().get(
'https://api.airtable.com/v0/$projectBase/$recordName',queryParameters: {
'filterByFormula': 'SEARCH("Cactus",{Short Description})' // Searches the value 'Cactus' in the 'Short description' field.
},);