|
@@ -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();
|
|
|
-
|
|
|
+ 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);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
+ print('DISCOVERING: ${a.toString()}');
|
|
|
+ } catch (e) {
|
|
|
+ print(e);
|
|
|
}
|
|
|
+ }
|
|
|
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
+ void getPermissions() {
|
|
|
+ Nearby().askLocationAndExternalStoragePermission();
|
|
|
}
|
|
|
|
|
|
-
|
|
|
- void uploadMyId() async {
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
+ Future<void> getCurrentUser() async {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ 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();
|
|
|
}
|
|
|
}
|