如何用Flutter读写Airtable中的数据?
How to read and write Data in Airtable with Flutter?
依赖项:
空气表:^0.0.2
导入 'package:airtable/airtable.dart'; ??
进口'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 and dart_airtable 0.1.1.
在您的示例代码中,您对第一个 package
使用了 import 语句,但对第二个使用了代码。由于第一个没有为 repository
提供有效的 link,我将看看第二个。
要从 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 发送了错误的数据。在AirtableRecord
模型的一个toJson
方法中,作者添加了不需要的字段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"}]}
您现在可以扩展它,也许作为 service
和 GetIt
package and add your required funtions. I definetly recommend to also use models
for your response
(have a look at this)。
我使用了他们的示例工作区之一。 projectBase 是一个 ID。您可以查看他们的 API 文档,了解如何构建 requests
.
编辑 2:
阅读可以很简单地完成:
final response = await Dio().get(
'https://api.airtable.com/v0/$projectBase/$recordName',
options: Options(
contentType: 'Application/json',
headers: {
'Authorization': 'Bearer $yourApiKey',
'Accept': 'Application/json',
},
),
);
更新:
final response = await Dio().patch(
'https://api.airtable.com/v0/$projectBase/$recordName',
options: Options(
contentType: 'Application/json',
headers: {
'Authorization': 'Bearer $yourApiKey',
'Accept': 'Application/json',
},
),
data: {
'records': [
{
'id': 'rechYkD0pDW1NjFAF',
'fields': {
'Short Description': 'Cactus II',
'Total': 11.5,
}
},
],
},
);
并删除:
final response = await Dio().delete(
'https://api.airtable.com/v0/$projectBase/$recordName/rec0bMv507juqS7pv',
options: Options(
headers: {
'Authorization': 'Bearer $yourApiKey',
'Accept': 'Application/json',
},
),
);
这些只是示例,我建议您也阅读 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.
},
options: Options(
headers: {
'Authorization': 'Bearer $yourApiKey',
'Accept': 'Application/json',
},
),
);
依赖项: 空气表:^0.0.2 导入 'package:airtable/airtable.dart'; ??
进口'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 and dart_airtable 0.1.1.
在您的示例代码中,您对第一个 package
使用了 import 语句,但对第二个使用了代码。由于第一个没有为 repository
提供有效的 link,我将看看第二个。
要从 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 发送了错误的数据。在AirtableRecord
模型的一个toJson
方法中,作者添加了不需要的字段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"}]}
您现在可以扩展它,也许作为 service
和 GetIt
package and add your required funtions. I definetly recommend to also use models
for your response
(have a look at this)。
我使用了他们的示例工作区之一。 projectBase 是一个 ID。您可以查看他们的 API 文档,了解如何构建 requests
.
编辑 2:
阅读可以很简单地完成:
final response = await Dio().get(
'https://api.airtable.com/v0/$projectBase/$recordName',
options: Options(
contentType: 'Application/json',
headers: {
'Authorization': 'Bearer $yourApiKey',
'Accept': 'Application/json',
},
),
);
更新:
final response = await Dio().patch(
'https://api.airtable.com/v0/$projectBase/$recordName',
options: Options(
contentType: 'Application/json',
headers: {
'Authorization': 'Bearer $yourApiKey',
'Accept': 'Application/json',
},
),
data: {
'records': [
{
'id': 'rechYkD0pDW1NjFAF',
'fields': {
'Short Description': 'Cactus II',
'Total': 11.5,
}
},
],
},
);
并删除:
final response = await Dio().delete(
'https://api.airtable.com/v0/$projectBase/$recordName/rec0bMv507juqS7pv',
options: Options(
headers: {
'Authorization': 'Bearer $yourApiKey',
'Accept': 'Application/json',
},
),
);
这些只是示例,我建议您也阅读 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.
},
options: Options(
headers: {
'Authorization': 'Bearer $yourApiKey',
'Accept': 'Application/json',
},
),
);