视频地址:哔哩哔哩

蓝牙列表功能开发

上一节我们讲解了蓝牙调试助手 App 的需求导入功能,本节我们将讲解 蓝牙列表功能的开发流程

在工作台的项目列表中找到蓝牙调试助手 App,点击【项目菜单】->【开发文档】进入到需求文档页面。

编辑页面信息

  • 点击 切换到页面菜单,选中 BleList

  • 点击 编辑 按钮,对页面信息进行修改

功能详情

功能详情填写:

  • 蓝牙搜索
    • 支持 蓝牙名称、mac地址、RSSI(0到-100范围)搜索过滤
  • 蓝牙列表,显示 设备名称(没有显示 N/A)mac地址、rssi
  • 蓝牙连接,支持连接指定蓝牙设备
  • 广播数据解析,按照官方的格式进行解析,参考 https://www.bluetooth.com/specifications/assigned-numbers/

参考页面

放入下图:

变量列表

进入变量列表,点击 添加变量:

变量名称 变量类型 是否为数组 默认值 变量描述
isScanning Bool false 是否正在扫描
list Map 设备列表
filterData Map 蓝牙过滤数据
device Var 需要连接的device对象

配置流程

在流程设计中,填写以下流程:

  • 页面初始化:配置蓝牙扫描状态监听,并赋值给isScanning;配置蓝牙发现设备监听,将扫描到的设备进行处理。

点击保存按钮保存数据

页面搭建

我们先看一下需求中的页面布局结构:

  • 最上方是一个导航栏,标题为「蓝牙调试助手」,右侧为 开始扫描 按钮

  • 导航栏下方首先展示过滤条件。

  • 继续往下,是设备列表区域。

1. 点击右上角 跳转到开发页面,选中“BleList”页面,开始页面设计。

2. 点击小部件面板图标进入小部件面板

3.在页面预览区域点击顶部导航栏图标,打开添加顶部导航

4.拖动文本组件到导航栏中间,点击选中刚拖动的文本小部件,右侧出现小部件的配置页面,并配置如下内容

  • 文本内容:蓝牙调试助手

  • 字号:18

  • 字体颜色:#FFFFFFFF

5.拖动左右布局到导航栏右侧,然后在右侧的属性编辑器中配置属性,属性信息如下:

  • 主轴对齐:左侧对齐

  • 次轴对齐:居中对齐

6.拖动按钮到左右布局中,然后在右侧的属性编辑器中配置属性,属性信息如下:

  • 宽:80

  • 高:40

  • 背景颜色:#00FCFCFC

  • 阴影大小:0

7.拖动文本到按钮中,然后在右侧的属性编辑器中配置属性,属性信息如下:

  • 文本内容:${sScanning == true ? '停止扫描': '开始扫描'}

  • 文本大小:14

  • 字体颜色:#FFFFFFFF

  • 预览文本:开始扫描

8.拖动按钮到 第5步的左右布局中,然后在右侧的属性编辑器中配置属性,属性信息如下:

  • 宽:50

  • 高:40

  • 背景颜色:#00FCFCFC

  • 阴影大小:0

9.拖动文本到按钮中,然后在右侧的属性编辑器中配置属性,属性信息如下:

  • 文本内容:清空

  • 文本大小:14

  • 字体颜色:#FFFFFFFF

10.拖动按钮到上下布局中,然后在右侧的属性编辑器中配置属性,属性信息如下:

  • 宽:无限

  • 高:40

  • 背景颜色:#FFFFFFFF

  • 阴影大小:0

11.拖动文本到按钮中,然后在右侧的属性编辑器中配置属性,属性信息如下:

  • 文本内容:${filterData['text']?? 'No filter' }

  • 文本大小:16

12.拖动滚动条到上下布局中,然后拖动列表布局到滚动条中,在右侧的属性编辑器中配置属性,属性信息如下:

  • 数据绑定:list

  • 宽:无限

  • 高:680

13.拖动按钮到列表布局中,然后在右侧的属性编辑器中配置属性,属性信息如下:

  • 宽:无限

  • 高:80

  • 背景颜色:#FFFFFFFF

  • 阴影大小:0

  • 外边距:上 2

14.拖动左右布局到按钮中,然后在右侧的属性编辑器中配置属性,属性信息如下:

  • 主轴对齐:环绕对齐

  • 次轴对齐:居中对齐

15.拖动图片到左右布局中,然后在右侧的属性编辑器中配置属性,属性信息如下:

16.拖动容器到左右布局中,然后在右侧的属性编辑器中配置属性,属性信息如下:

  • 宽:200

  • 高:80

  • 背景颜色:#00FFFFFF

17.拖动上下布局到容器中,然后在右侧的属性编辑器中配置属性,属性信息如下:

  • 主轴对齐:环绕对齐

  • 次轴对齐:左侧对齐

18.拖动文本到上下布局中,然后在右侧的属性编辑器中配置属性,属性信息如下:

  • 文本内容:${list[index]['name']==''? 'N/A' :list[index]['name']}

  • 文本大小:16

  • 字体粗细:700

19.拖动文本到上下布局中,然后在右侧的属性编辑器中配置属性,属性信息如下:

  • 文本内容:${list[index]['mac']}

  • 文本大小:14

  • 字体粗细:400

20.拖动文本到上下布局中,然后在右侧的属性编辑器中配置属性,属性信息如下:

  • 文本内容:${list[index]['rssi']} dBm

  • 文本大小:14

  • 字体粗细:400

21.拖动条件生成器到左右布局中,然后在右侧的属性编辑器中配置属性,属性信息如下:

  • 条件内容:list[index]['connectable']

22.拖动按钮到第一个条件内容中,然后在右侧的属性编辑器中配置属性,属性信息如下:

  • 宽:100

  • 高:40

  • 背景颜色:#FF000000

  • 阴影大小:4

23.拖动文本到上下布局中,然后在右侧的属性编辑器中配置属性,属性信息如下:

  • 文本内容:连接

  • 文本大小:14

  • 字体粗细:500

  • 字体颜色:#FFFFFFFF

24.拖动容器到第二个条件内容中,然后在右侧的属性编辑器中配置属性,属性信息如下:

  • 宽:100

  • 高:40

  • 背景颜色:#00FFFFFF

至此页面搭建完成

配置逻辑(动作流程图)

进入页面动作流程图

1.点击右上角 页面设置 图标进入到页面设置中

2.打开动作 → 点击 编辑流程图

页面初始化

1. 点击页面初始化下面的加号添加事件

2.点击开始下方的加号,添加动作

3.鼠标选中动作,右侧出现动作配置并配置如下内容

  • 动作类型:硬件动作

  • 硬件类型:蓝牙

  • 蓝牙操作类型:蓝牙扫描状态监听

  • 停止扫描变量更新绑定:isScanning false

  • 开始扫描变量更新绑定:isScanning true

4.在蓝牙扫描状态监听下方添加一个新的动作并用鼠标选中动作,右侧出现动作配置并配置如下内容

  • 动作类型:自定义代码块

  • 点击新增自定义代码块

    • 代码块名称:蓝牙扫描结果处理

    • 代码块内容

      •     

        void function(){
            ble.onScanResults(callbackLast: (result) {
              String name = result.advertisementData.advName; // 蓝牙名称
              String mac = result.device.remoteId.str; // 蓝牙mac地址
              int rssi = result.rssi;
        
              if (filterData["nameType"] == '有名称' && name == '') {
                return;
              }
        
              String filterName = (filterData["name"] ?? "").toLowerCase();
              String filterMac = (filterData["mac"] ?? "").toLowerCase();
              int filterRssi = filterData["rssi"] ?? 100;
        
              if (filterName.isNotEmpty && !name.toLowerCase().contains(filterName)) {
                return;
              }
        
              if (filterMac.isNotEmpty && !mac.toLowerCase().contains(filterMac)) {
                return;
              }
        
              if (filterRssi != 100 && rssi < -filterRssi) {
                return;
              }
        
              var item = list.firstWhere((map) => map['mac'] == mac, orElse: () => {});
        
        
         
              List<int> data = result.advertisementData.rawBytes ?? [];
         
              if (item.isEmpty) {
                list.add({
                  "mac": mac,
                  "name": name,
                  "rssi": rssi,
                  "device": result.device,
                  "data": data,
                  "connectable": result.advertisementData.connectable
                });
              } else {
                item["rssi"] = rssi;
                item["data"] = data;
              }
        
              setState(() {});
            });
          }

扫描按钮动作流程图

1.点击按钮小部件进入到小部件配置中

2.打开动作 → 点击 编辑流程图

单击事件

1. 点击页面初始化下面的加号添加事件

2.点击开始下方的加号,添加条件

3.鼠标选中条件,右侧出现动作配置并配置如下内容

  • IF:isScanning = true

4.点击第一个分支下的添加按钮,选择添加动作,并配置动作属性

  • 动作类型:硬件动作
  • 硬件类型:蓝牙
  • 蓝牙操作类型:停止扫描

5.点击第二个分支下的添加按钮,选择添加动作,并配置动作属性

  • 动作类型:硬件动作
  • 硬件类型:蓝牙
  • 蓝牙操作类型:蓝牙扫描
  • 扫描时长:15
清空按钮动作流程图
单击事件

1. 点击页面初始化下面的加号添加事件

2.点击开始下方的加号,添加动作,并配置动作属性

  • 动作类型:变量更新
  • 选择变量:list
  • 数组操作类型:清空数组
连接按钮动作流程图
单击事件

1. 点击页面初始化下面的加号添加事件

2.点击开始下方的加号,添加动作,并配置动作属性

  • 动作类型:变量更新
  • 选择变量:device
  • 对应的值:list[index]['device']

3.点击变量更新下方的加号,添加动作,并配置动作属性

  • 动作类型:导航
  • 导航到:DataTransfer
  • 携带参数:
    • key:name,常量值:${list[index]['name']}
    • key:device,变量值:device

至此,页面及逻辑全部设置完成。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐