|
@@ -10,17 +10,40 @@ import 'package:get/get.dart';
|
|
|
import 'package:vid/us/vid_us_unit.dart';
|
|
|
|
|
|
/// 特征分析
|
|
|
-class FeatureAnalysis extends StatelessWidget {
|
|
|
- FeatureAnalysis(this.descriptions, {Key? key}) : super(key: key);
|
|
|
+class FeatureAnalysis extends StatefulWidget {
|
|
|
+ const FeatureAnalysis(this.descriptions, {Key? key}) : super(key: key);
|
|
|
|
|
|
final List<AIDiagnosisDescription>? descriptions;
|
|
|
+
|
|
|
+ @override
|
|
|
+ State<StatefulWidget> createState() {
|
|
|
+ return FeatureAnalysisState();
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+class FeatureAnalysisState extends State<FeatureAnalysis> {
|
|
|
late final aiPatintController = Get.find<AiPatintController>();
|
|
|
+ double _unitsPhysicalPixels = 0;
|
|
|
final application = Get.find<IApplication>();
|
|
|
final ScrollController scrollController = ScrollController();
|
|
|
+ String _xUnit = '';
|
|
|
+ @override
|
|
|
+ void initState() {
|
|
|
+ _updateImagePhysicalSize();
|
|
|
+ super.initState();
|
|
|
+ }
|
|
|
+
|
|
|
+ @override
|
|
|
+ void didUpdateWidget(FeatureAnalysis oldWidget) {
|
|
|
+ _updateImagePhysicalSize();
|
|
|
+
|
|
|
+ super.didUpdateWidget(oldWidget);
|
|
|
+ }
|
|
|
+
|
|
|
@override
|
|
|
Widget build(BuildContext context) {
|
|
|
List<AIDiagnosisDescription> newDescriptions = [];
|
|
|
- for (var m in descriptions!) {
|
|
|
+ for (var m in widget.descriptions!) {
|
|
|
if (m.type != DiagnosisDescriptionEnum.CarotidIntimaMediaThickness &&
|
|
|
m.type != DiagnosisDescriptionEnum.LesionSize) {
|
|
|
newDescriptions.add(m);
|
|
@@ -159,18 +182,34 @@ class FeatureAnalysis extends StatelessWidget {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ void _updateImagePhysicalSize() {
|
|
|
+ if (application.visuals.isEmpty) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (application.visuals[0].visualAreas.isEmpty) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ VidUsUnit targetUnit =
|
|
|
+ application.visuals[0].visualAreas[0].viewport?.xUnit ?? VidUsUnit.cm;
|
|
|
+ var unitsPhysicalPixels =
|
|
|
+ (application.visuals[0].visualAreas[0].viewport?.region.width)! /
|
|
|
+ (application.frameData!.width).toDouble();
|
|
|
+ setState(() {
|
|
|
+ _xUnit = UnitDescriptionMap.getDesc(targetUnit);
|
|
|
+ _unitsPhysicalPixels = unitsPhysicalPixels;
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
String _buildDescriptionValue(
|
|
|
String diagnosisDescriptionValue, DiagnosisDescriptionEnum type) {
|
|
|
double? doubleValue = double.tryParse(diagnosisDescriptionValue);
|
|
|
- VidUsUnit targetUnit =
|
|
|
- application.visuals[0].visualAreas[0].viewport?.xUnit ?? VidUsUnit.cm;
|
|
|
- var xUnit = UnitDescriptionMap.getDesc(targetUnit);
|
|
|
+
|
|
|
if (doubleValue != null) {
|
|
|
var value = doubleValue.toStringAsFixed(2);
|
|
|
if (type == DiagnosisDescriptionEnum.CarotidRateOfStenosis) {
|
|
|
return value;
|
|
|
}
|
|
|
- return '$value $xUnit';
|
|
|
+ return '$value $_xUnit';
|
|
|
}
|
|
|
if (diagnosisDescriptionValue.length > 50) {
|
|
|
final diagnosisDescription = jsonDecode(diagnosisDescriptionValue);
|
|
@@ -184,16 +223,13 @@ class FeatureAnalysis extends StatelessWidget {
|
|
|
double measuringLineLengthInPixel =
|
|
|
diagnosisDescription['MeasuringLineLengthInPixel'] ?? 0;
|
|
|
|
|
|
- var unitsPhysicalPixels =
|
|
|
- (application.visuals[0].visualAreas[0].viewport?.region.width)! /
|
|
|
- (application.frameData!.width).toDouble();
|
|
|
if (measuringLineLengthInPixel <= 0) {
|
|
|
return '< 1';
|
|
|
}
|
|
|
- var result = (measuringLineLengthInPixel * unitsPhysicalPixels)
|
|
|
+ var result = (measuringLineLengthInPixel * _unitsPhysicalPixels)
|
|
|
.toStringAsFixed(2)
|
|
|
.toString();
|
|
|
- return '$result $xUnit';
|
|
|
+ return '$result $_xUnit';
|
|
|
}
|
|
|
return horizontalAndVertical ? '> 1' : '< 1';
|
|
|
} else {
|