123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259 |
- import 'package:fis_i18n/i18n.dart';
- import 'package:fis_measure/define.dart';
- import 'package:fis_measure/view/ai_result_modifier/widgets/ai_conclusion_result.dart';
- import 'package:fis_measure/view/ai_result_modifier/widgets/ai_index_tag.dart';
- import 'package:fis_measure/view/ai_result_modifier/widgets/ai_mode_change_button.dart';
- import 'package:fis_measure/view/ai_result_modifier/widgets/ai_one_frame_player.dart';
- import 'package:fis_measure/view/ai_result_modifier/widgets/custom_operate_button.dart';
- import 'package:fis_ui/index.dart';
- import 'package:fis_ui/interface/interactive_container.dart';
- import 'package:flutter/gestures.dart';
- import 'package:flutter/material.dart';
- import 'package:get/get.dart';
- import 'package:vid/us/vid_us_image.dart';
- import 'widgets/ai_result_canvas.dart';
- import 'index.dart';
- class AiResultModifierDialog extends FisView<AiResultModifierController>
- implements FInteractiveContainer {
- const AiResultModifierDialog({
- Key? key,
- required this.remedicalCode,
- required this.currFrameIndex,
- required this.currFrame,
- required this.currentLabel,
- }) : super(key: key);
- final String remedicalCode;
- final int currFrameIndex;
- final int currentLabel;
- final VidUsImage currFrame;
- @override
- String get pageName => "ai_result_modifier";
- @override
- FWidget build(BuildContext context) {
- return FisBuilder<AiResultModifierController>(
- init: AiResultModifierController(
- remedicalCode: remedicalCode,
- currFrameIndex: currFrameIndex,
- currFrame: currFrame,
- ),
- id: "ai_result_modifier",
- builder: (_) {
- print("1: current lable is ${currentLabel}");
- controller.currentAiDetectedObjectIndex = currentLabel;
- return FDialog(
- shape: RoundedRectangleBorder(
- borderRadius: BorderRadius.circular(8),
- ),
- clipBehavior: Clip.hardEdge,
- child: FContainer(
- width: Get.width * 0.9,
- height: Get.height * 0.9,
- color: const Color.fromARGB(255, 54, 55, 56),
- padding: const EdgeInsets.all(10),
- child: FColumn(
- mainAxisSize: MainAxisSize.min,
- children: [
- // _buildTitle(),
- FExpanded(child: _buildAiResultModifier()),
- // _buildDebugButtons(),
- ],
- ),
- ),
- );
- },
- );
- }
- FWidget _buildAiResult() {
- return FContainer(
- width: 400,
- margin: const EdgeInsets.only(
- left: 15,
- ),
- child: FColumn(
- children: [
- const AiIndexTag(),
- const FSizedBox(height: 10),
- FExpanded(
- child: FisBuilder<AiResultModifierController>(
- id: 'ai_result_panel',
- builder: (_) {
- if (_.aiDetectedObjectList.isNotEmpty) {
- return const AiConclusionResult();
- }
- return const Center(
- child: CircularProgressIndicator(),
- );
- },
- ),
- ),
- const FSizedBox(height: 20),
- _buildOperateButtons(),
- ],
- ),
- );
- }
- FWidget _buildAiResultModifier() {
- return FRow(
- children: [
- FExpanded(child: _buildImageArea()),
- _buildAiResult(),
- ],
- );
- }
- // 操作按钮
- FWidget _buildOperateButtons() {
- return FContainer(
- child: FColumn(
- children: [
- _buildModeChangeButtons(),
- const FSizedBox(height: 20),
- FSizedBox(
- height: 50,
- child: FRow(
- children: [
- FExpanded(
- child: FCustomOperateButton(
- text: i18nBook.measure.resetAiResult.t,
- icon: Icons.restart_alt,
- highlightColor: const Color.fromRGBO(54, 169, 206, 1),
- onPressed: () {
- controller.resetAIResult();
- },
- ),
- ),
- const FSizedBox(width: 20),
- FExpanded(
- child: FCustomOperateButton(
- text: i18nBook.measure.saveEditResult.t,
- icon: Icons.save,
- normalColor: Colors.transparent,
- highlightColor: const Color.fromRGBO(54, 169, 206, 1),
- onPressed: () {
- controller.saveAIResult();
- },
- ),
- ),
- ],
- ),
- ),
- ],
- ),
- );
- }
- FWidget _buildModeChangeButtons() {
- return FisBuilder<AiResultModifierController>(
- id: 'ai_mode_change_buttons',
- builder: (_) {
- return FColumn(
- children: [
- FAlign(
- alignment: Alignment.centerLeft,
- child: FText(
- i18nBook.measure.editMode.t,
- style: const TextStyle(color: Colors.white),
- textAlign: TextAlign.start,
- ),
- ),
- const FSizedBox(height: 10),
- AiModifierModeChangeButton(
- isSelected: _.currMode == AiResultModifierMode.drag,
- mainColor: const Color.fromRGBO(54, 169, 206, 1),
- modeName: i18nBook.measure.dragMode.t,
- onClick: () {
- controller.changeModifierMode(AiResultModifierMode.drag);
- },
- ),
- AiModifierModeChangeButton(
- isSelected: _.currMode == AiResultModifierMode.pen,
- mainColor: const Color.fromRGBO(54, 169, 206, 1),
- modeName: i18nBook.measure.drawOutlineMode.t,
- onClick: () {
- controller.changeModifierMode(AiResultModifierMode.pen);
- },
- ),
- ],
- );
- },
- );
- }
- // 图像区域
- FWidget _buildImageArea() {
- return FContainer(
- child: FCenter(
- child: FStack(
- key: controller.framePlayerKey,
- children: [
- FOneFramePlayer(
- oneFrame: currFrame,
- ),
- FisBuilder<AiResultModifierController>(
- id: 'ai_result_canvas',
- builder: (_) {
- return FCenter(
- child: QuickFWidget(
- ClipRect(
- child: RepaintBoundary(
- key: _.captureAreaKey,
- child: FCustomPaint(
- painter: AIResultCanvas(
- contoursPoints: _.canvasContoursPoints,
- newContoursPoints: _.canvasNewContoursPoints,
- keyPoints: _.canvasKeyPoints,
- highlightKeyPoints: _.canvasAffectedKeyPoints,
- lesionSizePointsIndexes:
- _.canvasLesionSizePointsIndexes,
- penModeKeyPointIndexes:
- _.canvasPenModeKeyPointIndexes,
- currMode: _.currMode,
- ),
- size: _.aiCanvasSize,
- ),
- ),
- ),
- ),
- );
- },
- ),
- FisBuilder<AiResultModifierController>(
- id: 'ai_result_modifier_interactive_layer',
- builder: (_) {
- return FCenter(
- child: FMouseRegion(
- onHover: (event) => _.onMouseHover(event),
- onExit: (event) => _.onMouseExit(event),
- child: FGestureDetector(
- behavior: HitTestBehavior.opaque,
- businessParent: this,
- name: "ai_result_modifier_interactive_layer",
- onPanDown: (e) {
- _.onMouseDragStart(e);
- },
- onPanUpdate: (e) {
- _.onMouseDrag(e);
- },
- onPanEnd: (e) {
- _.onMouseDragEnd(e);
- },
- dragStartBehavior: DragStartBehavior.down,
- child: FContainer(
- width: _.aiCanvasSize.width,
- height: _.aiCanvasSize.height,
- )),
- ),
- );
- },
- ),
- ],
- ),
- ),
- );
- }
- }
|