背景知识视频教程
Dart和Flutter:完整的开发人员指南 - 国外课栈viadean.comFlutter使用Firestore构建复杂的Android和ios应用 - 国外课栈viadean.comFlutter的实际项目 - 国外课栈viadean.com您想使用蓝牙玩物联网设备,但不能在其中放置任何软件吗? 在这里,我们将了解如何使用电话应用程序通过蓝牙与IoT设备进行通信。 是使用Android还是iOS? 都可以! 我们将使用Flutter作为移动应用程序的开发框架。 我们将编写一个nRF连接灯,以便在设备上进行扫描,连接,读取和写入操作。
添加依赖项
</>...
更改用于Android的minSdkVersion
Android {
defaultConfig {
minSdkVersion: 19
添加蓝牙权限
我们需要添加使用蓝牙和访问位置的权限:
Android
在AndroidManifest.xml中添加:
</>...
iOS
在Info.plist中添加:
</>...
开始
现在是我们的main.dart:
import 'package:flutter/material.dart';
</>...
我们将可以通过使用_MyHomePageState小部件内的widget.flutterBlue属性来访问它。
扫描蓝牙设备
现在开始扫描蓝牙设备,并将其显示在ListView中。
首先,我们在MyHomePage类中添加一个包含设备的列表:
</>...
并在_MyHomePage类中编写一个方法,该方法将有助于在列表中填充该方法:
</>...
现在,通过在_MyHomePage的initState方法内开始扫描来填充它:
注意:开始扫描时,您只会列出尚未连接的设备。因此,我们还将通过访问FlutterBlue实例的connectedDevices属性将已连接的设备添加到列表中。
</>...
现在,我们的列表将填充FlutterBlue通过扫描找到的设备。
现在,以deviceList作为内容构建ListView:
</>...
将此listView分配为我们主要支架的主体:
</>...
现在我们应该有附近的支持蓝牙的设备列表。接下来,我们将连接到其中一个,并显示其具有的服务和特征。
连接到设备并显示具有特征的服务
出于可读性考虑,我们将不会创建新视图来连接到设备,而是会修改MyHomePage的当前内容,以使其取决于我们是否已连接。 为此,我们首先要添加一个函数,该函数将返回正确的视图以显示。
因此,让我们在_MyHomePageState中添加一个表示要连接的设备的状态及其公开的服务列表:
</>...
函数:
</>...
_buildConnectDeviceView方法目前尚不做很多事情:
</>...
现在,我们的构建方法将返回此_buildView:
</>...
最后,我们可以在FlatButton的onPressed方法中添加一些逻辑,在该方法中我们将停止FlutterBlue的扫描,连接到该设备并将该设备设置为先前创建的状态_connectedDevice并获取该设备的服务并显示列表。
</>...
更改_buildConnectDeviceView如下:
</>...
显示特性
现在,我们有可供使用的服务列表。我们将显示每个服务的特征,并根据我们是否可以读取,写入或通知此功能来添加按钮。
我们新的_buildConnectDeviceView看起来像这样:
</>...
然后添加一个计算按钮的函数:
</>...
现在的结果:
读取,写入和接收来自特征的通知
最后一步是在读取,写入和通知按钮上添加逻辑。
我们将首先添加一个Map以按特征存储我们的值,以便能够显示它们。
在MyHomePage类中,添加以下内容:
</>...
然后在_buildConnectDeviceView方法中添加一个新行以显示我们的值:
</>...
读取
首先让我们在读取按钮的onPressed方法中添加逻辑:
</>...
在这里,我们首先听取特征变化并将其新值存储在我们先前创建的Map中。然后它将更新我们的视图并显示更新的值。
写入
为了将数据发送到设备,我们将在对话框内创建一个TextField字段,将控制器链接到该字段并发送其内容。
因此,让我们向_MyHomePageState添加一个控制器:
</>...
并使用写入按钮的onPressed方法内部的逻辑创建我们的对话框:
</>...
因此,我们只需将传递给我们的输入值调用特征的write函数,然后使用dart:convert将其转换为字节数组
通知
通知只是在每次处理通知的特征值更新时执行的回调:
</>...
现在,每次此特征的值发生变化时,我们都会得到通知,这也将更新我们UI中的值。
现在,我们有了一个完整的应用程序,可以扫描蓝牙设备,连接到它们,显示它们的服务,读取它们的值,更新它们并收到有关更改的通知。