123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324 |
- import 'package:fis_i18n/i18n.dart';
- import 'package:fis_jsonrpc/rpc.dart';
- import 'package:flutter/material.dart';
- // import 'package:flyinsono/pages/remedical/consultation/controller.dart';
- /// 带数据回调
- typedef void ValueCallback<T>(T value);
- /// 所有图片的入口
- class ImageStatus extends StatelessWidget {
- /// 图片类型
- final RemedicalFileDataTypeEnum fileDataType;
- /// 图片地址
- final TerminalImageDTO terminalImage;
- /// AI 良恶性
- final DiagnosisConclusionEnum? diagnosisConclusion;
- /// 是否是测量页面
- final bool? isMeasure;
- /// 改变图片地址
- final VoidCallback? onChangeImage;
- /// AI测量的器官
- final List<DiagnosisOrganEnum>? diagnosisOrgans;
- /// 打开测量页面的方法
- final ValueCallback? onOpenMeasure;
- ImageStatus({
- Key? key,
- required this.fileDataType,
- required this.terminalImage,
- this.diagnosisConclusion = DiagnosisConclusionEnum.NotRequired,
- this.diagnosisOrgans = const [DiagnosisOrganEnum.Null],
- this.isMeasure = false,
- this.onChangeImage,
- this.onOpenMeasure,
- }) : super(key: key);
- @override
- Widget build(BuildContext context) {
- Map<
- Enum,
- Widget Function(
- TerminalImageDTO imageUrlMap,
- )> buildItem = {
- RemedicalFileDataTypeEnum.Image: (
- imageUrlMap,
- ) =>
- _buildImageCard(
- imageUrlMap,
- ),
- RemedicalFileDataTypeEnum.ThirdVidSingle: (
- imageUrlMap,
- ) =>
- _buildImageCard(
- imageUrlMap,
- ),
- RemedicalFileDataTypeEnum.ThirdVidMovie: (
- imageUrlMap,
- ) =>
- _buildVidMovieCard(
- imageUrlMap,
- ),
- RemedicalFileDataTypeEnum.VinnoVidSingle: (
- imageUrlMap,
- ) =>
- _buildImageCard(
- imageUrlMap,
- ),
- RemedicalFileDataTypeEnum.VinnoVidMovie: (
- imageUrlMap,
- ) =>
- _buildVidMovieCard(
- imageUrlMap,
- ),
- };
- return buildItem[fileDataType]!(terminalImage);
- }
- Widget _buildVidMovieCard(
- TerminalImageDTO imageUrlMap,
- ) {
- return Listener(
- child: Container(
- width: 190,
- height: 160,
- color: Colors.black,
- child: Stack(
- children: [
- Center(
- child: Image.network(
- imageUrlMap.previewUrl!,
- errorBuilder: ((context, error, stackTrace) {
- return Container(
- child: Text('error'),
- );
- }),
- ),
- ),
- Positioned(
- bottom: 5,
- left: 5,
- child: _buildAIDiagnosticOrgans(),
- ),
- InkWell(
- onTap: () {
- !isMeasure!
- ? onOpenMeasure!.call(imageUrlMap.imageUrl!)
- : onChangeImage!.call();
- },
- child: Center(
- child: Container(
- child: Icon(
- Icons.play_circle_outline_rounded,
- color: Colors.white,
- size: 50,
- ),
- ),
- ),
- ),
- Positioned(
- bottom: 5,
- right: 5,
- child: Tooltip(
- textStyle: TextStyle(
- fontSize: 16,
- color: Colors.white,
- ),
- message: _buildAIText(diagnosisConclusion!),
- child: Text(
- 'AI',
- style: TextStyle(
- color: _buildAITextColor(
- diagnosisConclusion!,
- ),
- fontSize: 20,
- ),
- ),
- ),
- ),
- ],
- ),
- ),
- );
- }
- Widget _buildImageCard(
- TerminalImageDTO imageUrlMap,
- ) {
- return Listener(
- child: InkWell(
- onTap: () {
- !isMeasure!
- ? onOpenMeasure!.call(imageUrlMap.imageUrl!)
- : onChangeImage!.call();
- },
- child: Container(
- width: 190,
- height: 160,
- color: Colors.black,
- child: Stack(
- children: [
- Center(
- child: Image.network(
- imageUrlMap.previewUrl!,
- errorBuilder: ((context, error, stackTrace) {
- return Container(
- child: Text('error'),
- );
- }),
- ),
- ),
- Positioned(
- bottom: 5,
- left: 5,
- child: _buildAIDiagnosticOrgans(),
- ),
- Positioned(
- bottom: 5,
- right: 5,
- child: Tooltip(
- textStyle: TextStyle(
- fontSize: 16,
- color: Colors.white,
- ),
- message: _buildAIText(diagnosisConclusion!),
- child: Text(
- 'AI',
- style: TextStyle(
- color: _buildAITextColor(
- diagnosisConclusion!,
- ),
- fontSize: 20,
- ),
- ),
- ),
- ),
- ],
- ),
- ),
- ),
- );
- }
- String _buildAIText(DiagnosisConclusionEnum diagnosisConclusion) {
- switch (diagnosisConclusion) {
- case DiagnosisConclusionEnum.NotRequired:
- return i18nBook.remedical.noNeedAIYet.t;
- case DiagnosisConclusionEnum.InProcess:
- return i18nBook.remedical.didNotHandle.t;
- case DiagnosisConclusionEnum.Unrecognized:
- return i18nBook.remedical.didNotIdentify.t;
- case DiagnosisConclusionEnum.NoObviousLesion:
- return i18nBook.remedical.noAbnormal.t;
- case DiagnosisConclusionEnum.Benign:
- return i18nBook.remedical.benign.t;
- case DiagnosisConclusionEnum.Malignant:
- return i18nBook.remedical.malignant.t;
- case DiagnosisConclusionEnum.BenignAndMalignant:
- return i18nBook.remedical.benignWithMalignant.t;
- default:
- return i18nBook.remedical.didNotIdentify.t;
- }
- }
- dynamic _buildAITextColor(DiagnosisConclusionEnum diagnosisConclusion) {
- switch (diagnosisConclusion) {
- case DiagnosisConclusionEnum.NotRequired:
- return Colors.transparent;
- case DiagnosisConclusionEnum.InProcess:
- return Colors.lightBlue;
- case DiagnosisConclusionEnum.Unrecognized:
- return Colors.lightBlue;
- case DiagnosisConclusionEnum.NoObviousLesion:
- return Colors.lightBlue;
- case DiagnosisConclusionEnum.Benign:
- return Colors.greenAccent;
- case DiagnosisConclusionEnum.Malignant:
- return Colors.redAccent;
- case DiagnosisConclusionEnum.BenignAndMalignant:
- return Colors.redAccent;
- default:
- return Colors.transparent;
- }
- }
- Widget _buildAIDiagnosticOrgans() {
- switch (diagnosisOrgans?.length == 0
- ? DiagnosisOrganEnum.Null
- : diagnosisOrgans?[0]) {
- case DiagnosisOrganEnum.Null:
- return const SizedBox();
- case DiagnosisOrganEnum.placeHolder_1:
- return const SizedBox();
- case DiagnosisOrganEnum.Breast:
- return Text(
- i18nBook.remedical.breast.t,
- style: TextStyle(
- color: _buildAITextColor(
- diagnosisConclusion!,
- ),
- fontSize: 18,
- ),
- );
- case DiagnosisOrganEnum.Abdomen:
- return Text(
- i18nBook.bodyParts.abdomen.t,
- style: TextStyle(
- color: _buildAITextColor(
- diagnosisConclusion!,
- ),
- fontSize: 18,
- ),
- );
- case DiagnosisOrganEnum.Liver:
- return Text(
- i18nBook.remedical.liver.t,
- style: TextStyle(
- color: _buildAITextColor(
- diagnosisConclusion!,
- ),
- fontSize: 18,
- ),
- );
- case DiagnosisOrganEnum.Cholecyst:
- return Text(
- i18nBook.remedical.cholecyst.t,
- style: TextStyle(
- color: _buildAITextColor(
- diagnosisConclusion!,
- ),
- fontSize: 18,
- ),
- );
- case DiagnosisOrganEnum.Kidney:
- return Text(
- i18nBook.remedical.kidney.t,
- style: TextStyle(
- color: _buildAITextColor(
- diagnosisConclusion!,
- ),
- fontSize: 18,
- ),
- );
- case DiagnosisOrganEnum.Spleen:
- return Text(
- i18nBook.remedical.spleen.t,
- style: TextStyle(
- color: _buildAITextColor(
- diagnosisConclusion!,
- ),
- fontSize: 18,
- ),
- );
- default:
- return Container();
- }
- }
- }
|