|
@@ -1,9 +1,10 @@
|
|
|
import 'package:flutter/material.dart';
|
|
|
import 'package:flutter_blue/flutter_blue.dart';
|
|
|
-import 'package:flutter_tracker/dio/login_dao.dart';
|
|
|
+import 'package:flutter_tracker/dio/track_dao.dart';
|
|
|
import 'package:flutter_tracker/model/user_model.dart';
|
|
|
-import 'package:flutter_tracker/utils/app_util.dart';
|
|
|
import 'package:flutter_tracker/views/contact_card.dart';
|
|
|
+import 'package:nearby_connections/nearby_connections.dart';
|
|
|
+import 'package:shared_preferences/shared_preferences.dart';
|
|
|
|
|
|
import 'bluetooth_off_page.dart';
|
|
|
|
|
@@ -19,11 +20,14 @@ class TrackPage extends StatefulWidget {
|
|
|
|
|
|
class _TrackPageState extends State<TrackPage> {
|
|
|
String testText = '';
|
|
|
-
|
|
|
+ final Strategy strategy = Strategy.P2P_STAR;
|
|
|
+ UserModel currentUser;
|
|
|
List<UserModel> blueList = [];
|
|
|
List<BluetoothDevice> devices = [];
|
|
|
List<ScanResult> myScanResult = [];
|
|
|
List<String> updateTime = [];
|
|
|
+
|
|
|
+ List<UserModel> users = [];
|
|
|
FlutterBlue flutterBlue = FlutterBlue.instance;
|
|
|
|
|
|
@override
|
|
@@ -175,84 +179,64 @@ class _TrackPageState extends State<TrackPage> {
|
|
|
@override
|
|
|
void initState() {
|
|
|
super.initState();
|
|
|
- uploadMyId();
|
|
|
- // startTrack(true);
|
|
|
+ addContactsToList();
|
|
|
+ getPermissions();
|
|
|
}
|
|
|
|
|
|
- void startTrack(bool flag) async {
|
|
|
- if (flag) {
|
|
|
- flutterBlue.stopScan();
|
|
|
- } else {
|
|
|
- setState(() {
|
|
|
- blueList = [];
|
|
|
- updateTime = [];
|
|
|
- myScanResult = [];
|
|
|
+ void discovery() async {
|
|
|
+ try {
|
|
|
+ bool a = await Nearby().startDiscovery(currentUser.username, strategy,
|
|
|
+ onEndpointFound: (id, name, serviceId) async {
|
|
|
+ // 保存数据
|
|
|
+ }, onEndpointLost: (id) {
|
|
|
+ print(id);
|
|
|
});
|
|
|
- AppUtil.buildToast("正在搜索附近的人...");
|
|
|
- flutterBlue.startScan(timeout: const Duration(seconds: 20));
|
|
|
- // 扫描周围蓝牙设备
|
|
|
- flutterBlue.scanResults.listen((scanResult) {
|
|
|
- for (ScanResult scan in scanResult) {
|
|
|
- if (!myScanResult.contains(scan)) {
|
|
|
- print("-----------------id------:" + scan.device.id.toString());
|
|
|
- setState(() {
|
|
|
- myScanResult.add(scan);
|
|
|
- blueList.add(UserModel(deviceid: scan.device.id.toString()));
|
|
|
- updateTime.add(DateTime.now().toString().substring(0, 10));
|
|
|
- });
|
|
|
- }
|
|
|
- }
|
|
|
- });
|
|
|
- // 扫描连接设备
|
|
|
- List<BluetoothDevice> connectedDevices =
|
|
|
- await flutterBlue.connectedDevices;
|
|
|
- for (BluetoothDevice device in connectedDevices) {
|
|
|
- if (!devices.contains(device)) {
|
|
|
- devices.add(device);
|
|
|
- AppUtil.buildToast("正在追踪设备\"" + device.id.toString() + "\"健康状态...");
|
|
|
- // 云端检测用户状态
|
|
|
- UserModel user =
|
|
|
- await LoginDao.getUserByDeviceId(device.id.toString());
|
|
|
- blueList.add(user);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- // String myDeviceId = await flutterBlue.localAdapter.deviceId;
|
|
|
+ print('DISCOVERING: ${a.toString()}');
|
|
|
+ } catch (e) {
|
|
|
+ print(e);
|
|
|
}
|
|
|
+ }
|
|
|
|
|
|
- // try {
|
|
|
- // bool a = await Nearby().startAdvertising(
|
|
|
- // loggedInUser.email,
|
|
|
- // strategy,
|
|
|
- // onConnectionInitiated: null,
|
|
|
- // onConnectionResult: (id, status) {
|
|
|
- // print(status);
|
|
|
- // },
|
|
|
- // onDisconnected: (id) {
|
|
|
- // print('Disconnected $id');
|
|
|
- // },
|
|
|
- // );
|
|
|
- //
|
|
|
- // print('ADVERTISING ${a.toString()}');
|
|
|
- // } catch (e) {
|
|
|
- // print(e);
|
|
|
- // }
|
|
|
+ void getPermissions() {
|
|
|
+ Nearby().askLocationAndExternalStoragePermission();
|
|
|
}
|
|
|
|
|
|
- // upload my device BluetoothCharacteristic to server
|
|
|
- void uploadMyId() async {
|
|
|
- // String myDeviceId = await flutterBlue.localAdapter.deviceId;
|
|
|
- // print("-----------------id------:" + myDeviceId);
|
|
|
- // Map<String, dynamic> params = {
|
|
|
- // "userId": loggedInUser.email,
|
|
|
- // "deviceId": myDeviceId,
|
|
|
- // };
|
|
|
- // HttpUtil.post(
|
|
|
- // '/user/updateDeviceId',
|
|
|
- // (data) {
|
|
|
- // print(data);
|
|
|
- // },
|
|
|
- // params: params,
|
|
|
- // );
|
|
|
+ Future<void> getCurrentUser() async {
|
|
|
+ // UserModel user=
|
|
|
+ }
|
|
|
+
|
|
|
+ void addContactsToList() async {
|
|
|
+ await getCurrentUser();
|
|
|
+ // 服务器获取当前用户数据
|
|
|
+ SharedPreferences sharedPreferences = await SharedPreferences.getInstance();
|
|
|
+ String token = sharedPreferences.getString("token");
|
|
|
+ setState(() async {
|
|
|
+ users = await TrackDao.getContactList(token);
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ void startTrack(bool flag) async {
|
|
|
+ try {
|
|
|
+ bool a = await Nearby().startAdvertising(
|
|
|
+ currentUser.username,
|
|
|
+ strategy,
|
|
|
+ onConnectionInitiated: null,
|
|
|
+ onConnectionResult: (id, status) {
|
|
|
+ print(status);
|
|
|
+ },
|
|
|
+ onDisconnected: (id) {
|
|
|
+ print('Disconnected $id');
|
|
|
+ },
|
|
|
+ );
|
|
|
+ // 上传追踪数据
|
|
|
+ SharedPreferences sharedPreferences =
|
|
|
+ await SharedPreferences.getInstance();
|
|
|
+ String token = sharedPreferences.getString("token");
|
|
|
+ TrackDao.uploadContact(token);
|
|
|
+ print('ADVERTISING ${a.toString()}');
|
|
|
+ } catch (e) {
|
|
|
+ print(e);
|
|
|
+ }
|
|
|
+ discovery();
|
|
|
}
|
|
|
}
|