Flutter Web API调用插件el_webapi_api的使用
Flutter Web API调用插件el_webapi_api的使用
概述
el_webapi_api
是一个用于在 Dart 中实现 ECHONET Lite Web API 的客户端库。它支持解析来自 ECHONET Lite Web API 服务器的 JSON 响应,并将其转换为 Dart 对象。当前版本支持设备描述 v1.4.0 中定义的所有设备。
特性
以下是一些主要功能:
-
获取可用设备列表(抽象信息)
final RegisteredDeviceList devList = await client.getRegisteredDevices(); for (final Profile profile in devList.profiles) { print(profile.toJson()); }
-
获取设备资源列表
final List<EchonetLiteDevice>? devices = await client.fetchRegisteredDevicesResources(devList); if (devices != null) { for (final EchonetLiteDevice dev in devices) { if (dev.runtimeType == TemperatureSensor) { final TemperatureSensor temperatureSensor = dev as TemperatureSensor; print(temperatureSensor.toJson()); } } }
-
按类型获取设备资源
final List<EchonetLiteDevice>? temperatureSensors = await client.getDeviceResourcesByType(DeviceType.temperatureSensor, null); if (temperatureSensors != null) { for (final EchonetLiteDevice sensor in temperatureSensors) { final TemperatureSensor temperatureSensor = sensor as TemperatureSensor; print(temperatureSensor.toJson()); } }
-
按 ID 获取设备资源
final TemperatureSensor sensor = await client.getTemperatureSensor('temperatureSensor1653899075894947'); print(sensor.toJson());
-
设置设备属性
bool setResult = await client.setOperationStatus('generalLighting1653899076208582', false); // 或者 bool setResult2 = await client.setPropertyNameWithValue( 'generalLighting1653899076208582', 'operationStatus', false);
支持的设备
以下是一些支持的设备类型:
- 空气清洁器
- 空调通风扇
- 浴室加热传感器
- 浴室加热干燥机
- CO₂传感器
- 冷热水热源设备
- 商用空调室内单元
- 商用空调室外单元
- 商用展示柜
- 商用展示柜室外单元
- 控制器
- 烹饪加热器
- 电流传感器
- 电能传感器
- 电子锁
- 电动雨门
- 电热水器
- 紧急按钮
- 高级照明系统
- 电动汽车充电器
- 电动汽车充放电装置
- 地板加热器
- 燃料电池
- 燃气表
- 通用照明
- 家庭空调
- 人体检测传感器
- 湿度传感器
- 智能电能表
- 混合热水器
- 照度传感器
- 即热式热水器
- 照明系统
- 智能电能分表
- 单功能照明
- 配电板计量
- 光伏发电
- 冰箱
- 电饭煲
- 智能电能子表
- 储能电池
- 开关
- 温度传感器
- 电视
- 通风扇
- VOC传感器
- 洗衣烘干机
- 水流计
- 电度表
使用方法
-
安装依赖 在
pubspec.yaml
文件中添加以下依赖:dependencies: el_webapi_api: ^1.0.0
-
初始化客户端
import 'package:el_webapi_api/src/el_webapi_client.dart'; import 'package:el_webapi_api/src/models/models.dart'; void main() async { const accessToken = 'xxx-AXbjg4r9zbj7NXs'; const serverUrl = 'xxx'; // 替换为实际服务器地址 final ElWebApiClient client = ElWebApiClient( url: serverUrl, header: { 'Content-Type': 'application/json', 'Accept': 'application/json', 'Authorization': 'Bearer $accessToken', }, ); }
-
获取设备列表
final RegisteredDeviceList devList = await client.getRegisteredDevices(); for (final Profile profile in devList.profiles) { print(profile.toJson()); }
-
按类型获取设备资源
final List<EchonetLiteDevice>? devices = await client.getDeviceResourcesByType(DeviceType.temperatureSensor, null); if (devices != null) { print(devices.length); for (EchonetLiteDevice? dev in devices) { TemperatureSensor ss = dev as TemperatureSensor; print(ss.toJson()); } } else { print('empty'); }
-
设置设备属性
bool setResult = await client.setOperationStatus('generalLighting1653899076208582', false);
示例代码
以下是一个完整的示例代码,展示了如何使用 el_webapi_api
调用 ECHONET Lite Web API:
import 'package:el_webapi_api/src/el_webapi_client.dart';
import 'package:el_webapi_api/src/models/models.dart';
void main() async {
const accessToken = 'xxx-AXbjg4r9zbj7NXs';
const serverUrl = 'http://example.com/api'; // 替换为实际服务器地址
final ElWebApiClient client = ElWebApiClient(
url: serverUrl,
header: {
'Content-Type': 'application/json',
'Accept': 'application/json',
'Authorization': 'Bearer $accessToken',
},
);
/// 获取注册设备列表
final RegisteredDeviceList devList = await client.getRegisteredDevices();
for (final Profile profile in devList.profiles) {
print('设备信息: ${profile.toJson()}');
}
/// 按类型获取温度传感器
final List<EchonetLiteDevice>? temperatureSensors =
await client.getDeviceResourcesByType(DeviceType.temperatureSensor, null);
if (temperatureSensors != null) {
print('温度传感器数量: ${temperatureSensors.length}');
for (final EchonetLiteDevice dev in temperatureSensors) {
if (dev.runtimeType == TemperatureSensor) {
final TemperatureSensor temperatureSensor = dev as TemperatureSensor;
print('温度传感器数据: ${temperatureSensor.toJson()}');
}
}
} else {
print('未找到温度传感器');
}
/// 设置设备状态
bool setResult = await client.setOperationStatus('generalLighting1653899076208582', false);
print('设置结果: $setResult');
}
更多关于Flutter Web API调用插件el_webapi_api的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter Web API调用插件el_webapi_api的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
el_webapi_api
是一个用于在 Flutter Web 应用中调用 Web API 的插件。它简化了与后端服务的通信过程,使得开发者可以更轻松地发送 HTTP 请求并处理响应。以下是使用 el_webapi_api
插件的基本步骤:
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 el_webapi_api
插件的依赖:
dependencies:
flutter:
sdk: flutter
el_webapi_api: ^1.0.0 # 请检查最新版本
然后运行 flutter pub get
来安装依赖。
2. 导入插件
在你的 Dart 文件中导入 el_webapi_api
插件:
import 'package:el_webapi_api/el_webapi_api.dart';
3. 创建 API 客户端
使用 ElWebApiClient
类来创建一个 API 客户端。你可以指定基础 URL 和其他配置项:
final client = ElWebApiClient(
baseUrl: 'https://your-api-endpoint.com', // 替换为你的API地址
defaultHeaders: {
'Content-Type': 'application/json',
'Authorization': 'Bearer your_access_token', // 如果需要认证
},
);
4. 发送请求
使用 client
对象来发送 HTTP 请求。以下是一些常见的请求示例:
GET 请求
final response = await client.get('/api/some-endpoint');
if (response.statusCode == 200) {
// 处理成功的响应
final data = response.data;
print(data);
} else {
// 处理错误
print('Error: ${response.statusCode}');
}
POST 请求
final response = await client.post(
'/api/some-endpoint',
data: {'key': 'value'}, // 请求体数据
);
if (response.statusCode == 200 || response.statusCode == 201) {
// 处理成功的响应
final data = response.data;
print(data);
} else {
// 处理错误
print('Error: ${response.statusCode}');
}
PUT 请求
final response = await client.put(
'/api/some-endpoint/1',
data: {'key': 'new-value'}, // 请求体数据
);
if (response.statusCode == 200) {
// 处理成功的响应
final data = response.data;
print(data);
} else {
// 处理错误
print('Error: ${response.statusCode}');
}
DELETE 请求
final response = await client.delete('/api/some-endpoint/1');
if (response.statusCode == 204) {
// 处理成功的响应
print('Resource deleted successfully');
} else {
// 处理错误
print('Error: ${response.statusCode}');
}
5. 处理响应
ElWebApiClient
的响应对象包含 statusCode
和 data
属性。你可以根据 statusCode
来判断请求是否成功,并使用 data
来处理返回的数据。
6. 错误处理
在实际应用中,你可能需要对网络错误、超时、认证失败等情况进行处理。你可以使用 try-catch
块来捕获异常:
try {
final response = await client.get('/api/some-endpoint');
if (response.statusCode == 200) {
// 处理成功的响应
final data = response.data;
print(data);
} else {
// 处理错误
print('Error: ${response.statusCode}');
}
} catch (e) {
// 处理异常
print('An error occurred: $e');
}
7. 自定义配置
你可以通过 ElWebApiClient
的构造函数来自定义超时时间、拦截器、认证信息等。
final client = ElWebApiClient(
baseUrl: 'https://your-api-endpoint.com',
defaultHeaders: {
'Content-Type': 'application/json',
'Authorization': 'Bearer your_access_token',
},
timeout: Duration(seconds: 10), // 设置超时时间
interceptors: [
// 添加拦截器
(request) {
print('Request: ${request.method} ${request.url}');
return request;
},
],
);
8. 清理资源
在使用完 ElWebApiClient
后,可以调用 dispose
方法来释放资源:
client.dispose();