我正在开展一个涉及颤振和蓝牙的新项目。为此,我阅读了一些相关内容并尝试了一个测试项目,但我仍然有一些问题,我找不到简单的答案。
首先,BLE 与蓝牙。BLE 就是蓝牙版本 4,主要用于物联网应用。可以在手机上运行,但是有兼容性问题吗?也就是说,BLE 设备可以与蓝牙设备通信吗?还是它们都需要使用相同的蓝牙版本?
这个问题来自于测试 flutter blue示例并且没有发现任何设备,而我的标准手机的蓝牙发现了 10 多个设备(在魅族 16th 上测试)。我是否需要两个具有相同 flutter 蓝牙应用程序的设备才能相互看到并交互?我知道为了发送信息,我需要两个具有相同 flutter 应用程序的设备,但现在我只想测试扫描设备的功能,而返回 0 个设备让我有点失望。
其次,我见过一些蓝牙包,例如flutter_blue、flutter_bluetooth_serial(基于 flutter_blue)、flutter_reactive_ble和bluetooth。考虑到我的项目是基于制作调查问卷 -> 通过蓝牙发送 -> 通过蓝牙取回填写的调查问卷,您认为哪一个最适合?
简而言之,我对 flutter 的了解相当基础,在蓝牙方面的知识绝对是 0,所以我希望在当前的 flutter 蓝牙技术水平上有一些明智的建议,以便我有一个强有力的起点并避免常见的错误。
编辑:为了补充 @ukBaz 的答案,他解释了蓝牙背后的理论,如果有人发现自己使用 flutter_blue 示例,请记住在您的设备中打开蓝牙和 GPS,以使该示例正常工作。
有了 ukBaz 的解释和一个工作示例,我可以承担这个项目,谢谢。
编辑2:解释为什么这里需要位置服务。
我按照这个示例从列表中删除所需的元素,并且效果很好。然后我做了一些更改,因为列表的大小不是预定义的(在示例中又称为 5),而是通过按钮进行更改。在根据我的需要调整代码后,我发现了两个问题:
+每次我点击添加新元素时,元素哈希代码都会发生变化。这是正确的,因为它正在重新绘制列表,还是不正确?这是执行过程:
这是代码:
import 'package:flutter/material.dart';
class StreamBuilderIssue extends StatefulWidget {
@override
_StreamBuilderIssueState createState() => _StreamBuilderIssueState();
}
class _StreamBuilderIssueState extends State<StreamBuilderIssue> {
List<ServiceCard> serviceCardList;
int numElements = 1; //dynamic number of elements
void removeServiceCard(index) {
setState(() {
serviceCardList.remove(index);
numElements--;
});
}
@override
Widget build(BuildContext context) {
serviceCardList = List.generate(numElements, (index) => ServiceCard(removeServiceCard, index: index));
return Scaffold(
body: ListView(
children: <Widget>[
...serviceCardList,
new FlatButton(
onPressed: (){
setState(() {
numElements++;
});
},
child: new Icon(Icons.add),
),
], …Run Code Online (Sandbox Code Playgroud)