Flutter Web API调用插件el_webapi_api的使用

发布于 1周前 作者 wuwangju 来自 Flutter

Flutter Web API调用插件el_webapi_api的使用

概述

el_webapi_api 是一个用于在 Dart 中实现 ECHONET Lite Web API 的客户端库。它支持解析来自 ECHONET Lite Web API 服务器的 JSON 响应,并将其转换为 Dart 对象。当前版本支持设备描述 v1.4.0 中定义的所有设备。


特性

以下是一些主要功能:

  1. 获取可用设备列表(抽象信息)

    final RegisteredDeviceList devList = await client.getRegisteredDevices();
    
    for (final Profile profile in devList.profiles) {
      print(profile.toJson());
    }
  2. 获取设备资源列表

    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());
        }
      }
    }
  3. 按类型获取设备资源

    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());
      }
    }
  4. 按 ID 获取设备资源

    final TemperatureSensor sensor =
        await client.getTemperatureSensor('temperatureSensor1653899075894947');
    
    print(sensor.toJson());
  5. 设置设备属性

    bool setResult = await client.setOperationStatus('generalLighting1653899076208582', false);
    // 或者
    bool setResult2 = await client.setPropertyNameWithValue(
        'generalLighting1653899076208582', 'operationStatus', false);

支持的设备

以下是一些支持的设备类型:

  • 空气清洁器
  • 空调通风扇
  • 浴室加热传感器
  • 浴室加热干燥机
  • CO₂传感器
  • 冷热水热源设备
  • 商用空调室内单元
  • 商用空调室外单元
  • 商用展示柜
  • 商用展示柜室外单元
  • 控制器
  • 烹饪加热器
  • 电流传感器
  • 电能传感器
  • 电子锁
  • 电动雨门
  • 电热水器
  • 紧急按钮
  • 高级照明系统
  • 电动汽车充电器
  • 电动汽车充放电装置
  • 地板加热器
  • 燃料电池
  • 燃气表
  • 通用照明
  • 家庭空调
  • 人体检测传感器
  • 湿度传感器
  • 智能电能表
  • 混合热水器
  • 照度传感器
  • 即热式热水器
  • 照明系统
  • 智能电能分表
  • 单功能照明
  • 配电板计量
  • 光伏发电
  • 冰箱
  • 电饭煲
  • 智能电能子表
  • 储能电池
  • 开关
  • 温度传感器
  • 电视
  • 通风扇
  • VOC传感器
  • 洗衣烘干机
  • 水流计
  • 电度表

使用方法

  1. 安装依赖pubspec.yaml 文件中添加以下依赖:

    dependencies:
      el_webapi_api: ^1.0.0
  2. 初始化客户端

    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',
        },
      );
    }
  3. 获取设备列表

    final RegisteredDeviceList devList = await client.getRegisteredDevices();
    
    for (final Profile profile in devList.profiles) {
      print(profile.toJson());
    }
  4. 按类型获取设备资源

    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');
    }
  5. 设置设备属性

    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

1 回复

更多关于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 的响应对象包含 statusCodedata 属性。你可以根据 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();
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!