| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- 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<void> 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 =<SportWear>[].obs;
- final listMap = HashMap<String, SportWear>();
- StreamSubscription<List<SportWear>>? _subscription;
- @override
- void onReady() {
- super.onReady();
- SportWearService service = Get.find();
- _subscription = service.sportWearScanResult.listen((d) {
- final newList = <SportWear>[];
- 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<SportWearSelectController>{
- 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),
- ],
- )) ;
- }
- }
|