import 'package:flutter/material.dart'; import 'package:flutter_blue/flutter_blue.dart'; import 'package:flutter_tracker/utils/app_util.dart'; import 'package:flutter_tracker/views/contact_card.dart'; import 'bluetooth_off_page.dart'; /// Description: /// Time : 2021年12月03日 Friday /// Author : liuyuqi.gov@msncn class TrackPage extends StatefulWidget { const TrackPage({Key key}) : super(key: key); @override _TrackPageState createState() => _TrackPageState(); } class _TrackPageState extends State { String testText = ''; List contactTraces = []; List contactTimes = []; List contactLocations = []; FlutterBlue flutterBlue = FlutterBlue.instance; @override Widget build(BuildContext context) { return StreamBuilder( stream: FlutterBlue.instance.state, initialData: BluetoothState.unknown, builder: (c, snapshot) { final state = snapshot.data; if (state == BluetoothState.on) { return buildContent(); } return BluetoothOffPage(state: state); }); } Column buildContent() { return Column( children: [ Expanded( child: Padding( padding: const EdgeInsets.only( left: 25.0, right: 25.0, bottom: 10.0, top: 30.0, ), child: Container( height: 50.0, width: double.infinity, decoration: BoxDecoration( color: Colors.deepPurple[500], borderRadius: BorderRadius.circular(20.0), boxShadow: const [ BoxShadow( color: Colors.black, blurRadius: 4.0, spreadRadius: 0.0, offset: Offset(2.0, 2.0), // shadow direction: bottom right ) ], ), child: Row( children: const [ Expanded( child: Image( image: AssetImage('assets/images/corona.png'), ), ), Expanded( flex: 2, child: Text( '附近用户', textAlign: TextAlign.left, style: TextStyle( fontSize: 21.0, color: Colors.white, fontWeight: FontWeight.w500, ), ), ) ], ), ), ), ), buildStartButton(), Expanded( flex: 2, child: Padding( padding: const EdgeInsets.symmetric(horizontal: 25.0), child: ListView.builder( itemBuilder: (context, index) { return ContactCard( imagePath: 'assets/images/head.jpg', infection: '健康', contactUsername: contactTraces[index], contactTime: contactTimes[index], ); }, itemCount: contactTraces.length, ), ), ), ], ); } StreamBuilder buildStartButton() { return StreamBuilder( stream: flutterBlue.isScanning, initialData: false, builder: (context, snapshot) { if (snapshot.data) { return Padding( padding: EdgeInsets.only(bottom: 200.0), child: RaisedButton( shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(20.0)), elevation: 5.0, color: Colors.red, onPressed: () async { startTrack(snapshot.data); }, child: const Text( '停止追踪', style: TextStyle( fontSize: 20.0, fontWeight: FontWeight.bold, color: Colors.white, ), ), ), ); } else { return Padding( padding: EdgeInsets.only(bottom: 200.0), child: RaisedButton( shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(20.0)), elevation: 5.0, color: Colors.deepPurple[400], onPressed: () async { startTrack(snapshot.data); }, child: const Text( '开始追踪', style: TextStyle( fontSize: 20.0, fontWeight: FontWeight.bold, color: Colors.white, ), ), ), ); } }); } void startTrack(bool flag) async { if (flag) { flutterBlue.stopScan(); } else { AppUtil.buildToast("正在搜索附近的人..."); flutterBlue.startScan(timeout: const Duration(seconds: 4)); // 扫描周围蓝牙设备 // List services = await device.discoverServices(); var subscription = flutterBlue.scanResults.listen((scanResult) { for (ScanResult scan in scanResult) { BluetoothDevice device = scan.device; print("------------------------------" + '${device.name} found! rssi: ${scan.rssi}dBm' + device.id.toString()); } }); // 上传周边设备到服务器 // 循环对每个设备检测安全性 //更新结果 } // 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); // } discovery(); AppUtil.buildToast("追踪用户状态中..."); } void discovery() async {} }