ai_patint_result.dart 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. import 'package:fis_jsonrpc/rpc.dart';
  2. import 'package:fis_measure/view/paint/ai_patint_controller.dart';
  3. import 'package:fis_measure/view/paint/parts/ai_result.dart';
  4. import 'package:fis_measure/view/player/controller.dart';
  5. import 'package:fis_measure/view/player/enums.dart';
  6. import 'package:fis_measure/view/player/events.dart';
  7. import 'package:flutter/material.dart';
  8. import 'package:get/get.dart';
  9. class AIPaintInfoReslut extends StatefulWidget {
  10. /// 播放器控制器
  11. final VidPlayerController controller;
  12. final double? width;
  13. final double? height;
  14. const AIPaintInfoReslut(
  15. this.controller, {
  16. Key? key,
  17. this.width,
  18. this.height,
  19. }) : super(key: key);
  20. @override
  21. State<AIPaintInfoReslut> createState() => _AIPaintInfoState();
  22. }
  23. class _AIPaintInfoState extends State<AIPaintInfoReslut> {
  24. late final aiPatintController = Get.put(
  25. AiPatintController(
  26. widget.controller,
  27. ),
  28. );
  29. late bool isShowAiResult;
  30. void onControllerEvent(Object sender, VidPlayerEvent e) {
  31. if (e is VidPlayerStatusChangeEvent) {
  32. if (!widget.controller.hasView) {
  33. setState(() {});
  34. }
  35. }
  36. if (e is VidPlayerFrameIndexChangeEvent) {
  37. onFrameChanged(e);
  38. }
  39. if (e is VidPlayerBrightnessChangeEvent) {
  40. updateFrame();
  41. }
  42. if (e is VidPlayerContrastChangeEvent) {
  43. updateFrame();
  44. }
  45. }
  46. void onFrameChanged(VidPlayerFrameIndexChangeEvent e) {
  47. setState(() {
  48. aiPatintController.state.frameIndex = e.index;
  49. });
  50. }
  51. void updateFrame() {
  52. setState(() {});
  53. }
  54. @override
  55. void initState() {
  56. //监听Widget是否绘制完毕
  57. super.initState();
  58. widget.controller.eventHandler.addListener(onControllerEvent);
  59. }
  60. @override
  61. void dispose() {
  62. widget.controller.eventHandler.removeListener(onControllerEvent);
  63. super.dispose();
  64. }
  65. @override
  66. void didUpdateWidget(covariant AIPaintInfoReslut oldWidget) {
  67. if (oldWidget.controller != widget.controller) {
  68. throw UnsupportedError("[VidTestPlayer] unsupport replace controller.");
  69. }
  70. super.didUpdateWidget(oldWidget);
  71. }
  72. @override
  73. Widget build(BuildContext context) {
  74. Widget? child;
  75. if (widget.controller.status == VidPlayStatus.pause) {
  76. child = LayoutBuilder(builder: (context, constraints) {
  77. final canvasWidth = constraints.maxWidth;
  78. late final frameDataWidth =
  79. aiPatintController.application.frameData?.width;
  80. late final widthScale = (canvasWidth / frameDataWidth!);
  81. try {
  82. isShowAiResult = aiPatintController.onGetAIResultsInfo(widthScale);
  83. } catch (e) {
  84. isShowAiResult = true;
  85. }
  86. if (!isShowAiResult) {
  87. return const SizedBox();
  88. } else {
  89. if (isShowAiResult &&
  90. aiPatintController.diagnosisOrgan != DiagnosisOrganEnum.Null) {
  91. return AIResultPanel(
  92. aiPatintController.aiDetectedObject,
  93. aiPatintController.diagnosisOrgan,
  94. );
  95. } else {
  96. return Container();
  97. }
  98. }
  99. });
  100. } else {
  101. child = Container();
  102. }
  103. return buildBox(context, child);
  104. }
  105. Widget buildBox(BuildContext context, Widget child) {
  106. return Container(
  107. child: child,
  108. );
  109. }
  110. }