import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:vnote_device_plugin/devices/twelve_heart.dart'; import 'package:vnote_device_plugin/models/exams/twelve_heart.dart'; class TwelveHeartCard extends StatefulWidget { final String mac; final String model; const TwelveHeartCard({super.key, required this.mac, required this.model}); @override State createState() => _TwelveHeartCardState(); } class _TwelveHeartCardState extends State { late final TwelveHeartDeviceWorker worker = TwelveHeartDeviceWorker( mac: widget.mac, model: widget.model, ); int? value; bool _working = false; @override void initState() { worker.resultReceivedEvent.addListener(_onSuccess); super.initState(); } @override void dispose() { worker.resultReceivedEvent.removeListener(_onSuccess); worker.disconnect(); super.dispose(); } void _onSuccess(_, TwelveHeartExamData e) { setState(() { value = e.heartRate; }); } void _onError(_, String e) { Get.snackbar( "提示", "测量错误: $e", snackPosition: SnackPosition.TOP, ); } @override Widget build(BuildContext context) { return Card( elevation: 4, shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(16)), child: Container( alignment: Alignment.center, width: 360, height: 160, child: SizedBox( height: 80, child: Row( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.end, children: [ Text( value?.toString() ?? "__", style: const TextStyle(fontSize: 80), ), const SizedBox(width: 24), SizedBox( width: 60, height: 60, child: _working ? OutlinedButton( style: ButtonStyle( backgroundColor: MaterialStatePropertyAll( Colors.red.withOpacity(.08), ), shape: MaterialStatePropertyAll( RoundedRectangleBorder( borderRadius: BorderRadius.circular(30), ), ), ), onPressed: () async { await worker.disconnect(); setState(() { _working = false; }); }, child: const Text( "停止", style: TextStyle(color: Colors.red), ), ) : OutlinedButton( style: ButtonStyle( backgroundColor: MaterialStatePropertyAll( Theme.of(context).primaryColor.withOpacity(.08), ), shape: MaterialStatePropertyAll( RoundedRectangleBorder( borderRadius: BorderRadius.circular(30), ), ), ), onPressed: () async { await worker.connect(); setState(() { _working = true; }); }, child: const Text("开始"), ), ), ], ), ), ), ); } }