ai_result.dart 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. import 'package:fis_measure/view/paint/ai_patint_controller.dart';
  2. import 'package:fis_measure/view/paint/date_structure.dart';
  3. import 'package:fis_measure/view/paint/parts/ai_resul_info.dart';
  4. import 'package:fis_measure/view/paint/parts/feature_analysis.dart';
  5. import 'package:flutter/material.dart';
  6. import 'package:get/get.dart';
  7. class AIResultPanel extends StatefulWidget {
  8. AIResultPanel(this.aiDetectedObject, this.diagnosisOrgan, {Key? key})
  9. : super(key: key);
  10. late List<AIDetectedObject> aiDetectedObject = [];
  11. /// ai部位
  12. final DiagnosisOrganEnum diagnosisOrgan;
  13. @override
  14. State<AIResultPanel> createState() => _AIResultPanelState();
  15. }
  16. class _AIResultPanelState extends State<AIResultPanel> {
  17. late AIDetectedObject aiDetectedObjectItem;
  18. final aiPatintController = Get.find<AiPatintController>();
  19. @override
  20. Widget build(BuildContext context) {
  21. return Row(
  22. mainAxisAlignment: MainAxisAlignment.spaceBetween,
  23. children: [
  24. Expanded(child: Container()),
  25. SizedBox(
  26. width: 200,
  27. child: Column(
  28. crossAxisAlignment: CrossAxisAlignment.start,
  29. children: [
  30. if (widget.aiDetectedObject.length > 1)
  31. Container(
  32. child: Wrap(
  33. spacing: 2.0, // 主轴(水平)方向间距
  34. runSpacing: 2.0, // 纵轴(垂直)方向间距
  35. direction: Axis.horizontal,
  36. alignment: WrapAlignment.start,
  37. children: List<Widget>.generate(
  38. widget.aiDetectedObject.length,
  39. (index) {
  40. return GestureDetector(
  41. onTap: () {
  42. aiPatintController.state.aiResultIndex = index;
  43. },
  44. child: Obx(
  45. () => Container(
  46. decoration: BoxDecoration(
  47. color: aiPatintController.state.aiResultIndex ==
  48. index
  49. ? const Color.fromRGBO(54, 169, 206, 1)
  50. : Colors.grey,
  51. ),
  52. width: 38,
  53. height: 35,
  54. child: Center(
  55. child: Text(
  56. '${index + 1}',
  57. style: const TextStyle(
  58. color: Colors.white,
  59. ),
  60. ),
  61. ),
  62. ),
  63. ),
  64. );
  65. },
  66. ),
  67. ),
  68. color: Colors.transparent,
  69. ),
  70. const SizedBox(
  71. height: 10,
  72. ),
  73. Obx(() {
  74. try {
  75. aiDetectedObjectItem = widget
  76. .aiDetectedObject[aiPatintController.state.aiResultIndex];
  77. if (aiDetectedObjectItem.label != 0) {
  78. return Column(
  79. children: [
  80. ResultInfo(
  81. widget.aiDetectedObject,
  82. ),
  83. const SizedBox(
  84. height: 10,
  85. ),
  86. aiDetectedObjectItem.descriptions?.isNotEmpty ?? false
  87. ? FeatureAnalysis(
  88. aiDetectedObjectItem.descriptions,
  89. )
  90. : const SizedBox(),
  91. ],
  92. );
  93. } else {
  94. return const SizedBox();
  95. }
  96. } catch (e) {
  97. return const SizedBox();
  98. }
  99. })
  100. ],
  101. ),
  102. ),
  103. ],
  104. );
  105. }
  106. }