import 'dart:async'; import 'dart:collection'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:trackoffical_app/service/sport_wear.dart'; import 'package:sensor/sensor.dart'; Future showSportWearSelectDialog() async{ Get.put(SportWearSelectController()); SportWearService service = Get.find(); await service.scanStart(); final SportWear? sw = await Get.dialog(const SportWearSelectView()); await service.scanStop(); if(sw != null){ final old = service.connectedSportWear.value; // if(old != null){ // await service.disconnect(old); // } await service.disconnect(SportWear()); await service.connect(sw); } } class SportWearSelectController extends GetxController{ final list =[].obs; final listMap = HashMap(); StreamSubscription>? _subscription; @override void onReady() { super.onReady(); SportWearService service = Get.find(); _subscription = service.sportWearScanResult.listen((d) { final newList = []; for(var one in d){ if(! listMap.containsKey(one.address)){ listMap[one.address] = one; newList.add(one); } } list.addAll(newList); }); } @override void onClose() { super.onClose(); _subscription?.cancel(); } } class SportWearSelectView extends GetView{ const SportWearSelectView({super.key}); @override Widget build(BuildContext context) { return Container( margin: const EdgeInsets.fromLTRB(20, 120, 20, 120), padding: const EdgeInsets.all(20), decoration: BoxDecoration(color: Colors.white, borderRadius: BorderRadius.circular(12)), child: Column( children: [ Text('选择心率带', style: context.textTheme.titleLarge), const SizedBox(height: 12), Obx(() => Column( children: controller.list.map((element) => _ElemRow(element, (){ Get.back(result: element); })).toList(), ) ) ], ), ) ; } } class _ElemRow extends StatelessWidget{ final SportWear data; final VoidCallback onClick; const _ElemRow(this.data, this.onClick); @override Widget build(BuildContext context) { final style = context.textTheme.bodyLarge; return TextButton(onPressed: onClick, child: Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Text(data.name, style: style), ], )) ; } }