ai_patint_result.dart 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  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 ifShowAiResult;
  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. aiPatintController.updateFeatures();
  59. widget.controller.eventHandler.addListener(onControllerEvent);
  60. }
  61. @override
  62. void dispose() {
  63. widget.controller.eventHandler.removeListener(onControllerEvent);
  64. super.dispose();
  65. }
  66. @override
  67. void didUpdateWidget(covariant AIPaintInfoReslut oldWidget) {
  68. if (oldWidget.controller != widget.controller) {
  69. throw UnsupportedError("[VidTestPlayer] unsupport replace controller.");
  70. }
  71. super.didUpdateWidget(oldWidget);
  72. }
  73. @override
  74. Widget build(BuildContext context) {
  75. Widget? child;
  76. return Obx(() {
  77. if (aiPatintController.state.vidStatus == VidPlayStatus.pause) {
  78. child = LayoutBuilder(builder: (context, constraints) {
  79. try {
  80. ifShowAiResult = aiPatintController.onGetAIResultsInfo();
  81. } catch (e) {
  82. ifShowAiResult = true;
  83. }
  84. if (!ifShowAiResult) {
  85. return const SizedBox();
  86. } else {
  87. if (ifShowAiResult &&
  88. aiPatintController.diagnosisOrgan != DiagnosisOrganEnum.Null) {
  89. return AIResultPanel(
  90. aiPatintController.aiDetectedObject,
  91. aiPatintController.diagnosisOrgan,
  92. );
  93. } else {
  94. return Container();
  95. }
  96. }
  97. });
  98. } else {
  99. child = Container();
  100. }
  101. return buildBox(context, child!);
  102. });
  103. }
  104. Widget buildBox(BuildContext context, Widget child) {
  105. return Container(
  106. child: child,
  107. );
  108. }
  109. }