import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:vnote_device_plugin/devices/weight.dart'; class WeightCard extends StatefulWidget { final String mac; final String model; const WeightCard({super.key, required this.mac, required this.model}); @override State createState() => _WeightCardState(); } class _WeightCardState extends State { late final WeightDeviceWorker worker = WeightDeviceWorker( mac: widget.mac, model: widget.model, ); double value = 0.0; bool _working = false; @override void initState() { worker.successEvent.addListener(_onSuccess); worker.errorEvent.addListener(_onError); super.initState(); // WidgetsBinding.instance.addPostFrameCallback((timeStamp) { // if (mounted) { // Future.delayed(const Duration(seconds: 1), () async { // await worker.connect(); // setState(() { // _working = true; // }); // }); // } // }); } @override void dispose() { worker.successEvent.removeListener(_onSuccess); worker.errorEvent.removeListener(_onError); worker.disconnect(); super.dispose(); } void _onSuccess(_, double e) { setState(() { value = e; }); } 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: 8), const Text( "kg", style: TextStyle(fontSize: 26), ), 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("开始"), ), ), ], ), ), ), ); } }