import 'package:fis_jsonrpc/rpc.dart'; import 'package:fis_measure/view/paint/ai_patint_controller.dart'; import 'package:fis_measure/view/paint/parts/ai_result.dart'; import 'package:fis_measure/view/player/controller.dart'; import 'package:fis_measure/view/player/enums.dart'; import 'package:fis_measure/view/player/events.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; class AIPaintInfoReslut extends StatefulWidget { /// 播放器控制器 final VidPlayerController controller; final double? width; final double? height; const AIPaintInfoReslut( this.controller, { Key? key, this.width, this.height, }) : super(key: key); @override State createState() => _AIPaintInfoState(); } class _AIPaintInfoState extends State { late final aiPatintController = Get.put( AiPatintController( widget.controller, ), ); late bool isShowAiResult; void onControllerEvent(Object sender, VidPlayerEvent e) { if (e is VidPlayerStatusChangeEvent) { if (!widget.controller.hasView) { setState(() {}); } } if (e is VidPlayerFrameIndexChangeEvent) { onFrameChanged(e); } if (e is VidPlayerBrightnessChangeEvent) { updateFrame(); } if (e is VidPlayerContrastChangeEvent) { updateFrame(); } } void onFrameChanged(VidPlayerFrameIndexChangeEvent e) { setState(() { aiPatintController.state.frameIndex = e.index; }); } void updateFrame() { setState(() {}); } @override void initState() { //监听Widget是否绘制完毕 super.initState(); widget.controller.eventHandler.addListener(onControllerEvent); } @override void dispose() { widget.controller.eventHandler.removeListener(onControllerEvent); super.dispose(); } @override void didUpdateWidget(covariant AIPaintInfoReslut oldWidget) { if (oldWidget.controller != widget.controller) { throw UnsupportedError("[VidTestPlayer] unsupport replace controller."); } super.didUpdateWidget(oldWidget); } @override Widget build(BuildContext context) { Widget? child; if (widget.controller.status == VidPlayStatus.pause) { child = LayoutBuilder(builder: (context, constraints) { final canvasWidth = constraints.maxWidth; late final frameDataWidth = aiPatintController.application.frameData?.width; late final widthScale = (canvasWidth / frameDataWidth!); try { isShowAiResult = aiPatintController.onGetAIResultsInfo(widthScale); } catch (e) { isShowAiResult = true; } if (!isShowAiResult) { return const SizedBox(); } else { if (isShowAiResult && aiPatintController.diagnosisOrgan != DiagnosisOrganEnum.Null) { return AIResultPanel( aiPatintController.aiDetectedObject, aiPatintController.diagnosisOrgan, ); } else { return Container(); } } }); } else { child = Container(); } return buildBox(context, child); } Widget buildBox(BuildContext context, Widget child) { return Container( child: child, ); } }