Last active
March 18, 2024 14:50
-
-
Save feliwir/4726f35d8be8bf925c4c2b29347d5872 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import 'package:dicom_web/dicom_web.dart'; | |
import 'package:flutter/material.dart'; | |
import 'package:mray_client/models/series_model.dart'; | |
import 'package:mray_client/models/studies_model.dart'; | |
import 'package:mray_client/services/dicom_web_service.dart'; | |
import 'package:mray_client/widgets/study_tile.dart'; | |
import 'package:provider/provider.dart'; | |
class InboxPage extends StatefulWidget { | |
const InboxPage({ | |
super.key, | |
}); | |
@override | |
InboxPageState createState() => InboxPageState(); | |
} | |
class InboxPageState extends State<InboxPage> { | |
SeriesModel _createSeriesModel(BuildContext context, DicomObject study) { | |
var model = SeriesModel(); | |
var service = DicomWebService.instance; | |
var studyUid = study[TagsDictionary.STUDY_INSTANCE_UID]?.asString(); | |
// Return an empty model if the study UID is null | |
if (studyUid == null) { | |
model; | |
} | |
service.querySeries(studyUid!).then((series) { | |
model.addRange(series); | |
}); | |
return model; | |
} | |
ListView _buildStudyList(List<DicomObject> studies) { | |
return ListView.builder( | |
shrinkWrap: true, | |
itemCount: studies.length, | |
itemBuilder: (context, index) { | |
return ChangeNotifierProvider( | |
create: (context) => _createSeriesModel(context, studies[index]), | |
child: StudyTile(study: studies[index])); | |
}, | |
); | |
} | |
@override | |
Widget build(BuildContext context) { | |
return Consumer<StudyModel>( | |
builder: (context, studyModel, child) { | |
return Scaffold( | |
appBar: AppBar( | |
title: const Text('Inbox'), | |
), | |
body: studyModel.studies.isEmpty | |
? const Center( | |
child: Text('No studies found'), | |
) | |
: _buildStudyList(studyModel.studies), | |
); | |
}, | |
); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import 'package:dicom_web/dicom_web.dart'; | |
import 'package:flutter/material.dart'; | |
import 'package:mray_client/models/series_model.dart'; | |
import 'package:mray_client/pages/viewer_page.dart'; | |
import 'package:mray_client/services/dicom_web_service.dart'; | |
import 'package:mray_client/widgets/patient_info.dart'; | |
import 'package:mray_client/widgets/study_info.dart'; | |
import 'package:provider/provider.dart'; | |
class StudyTile extends StatelessWidget { | |
final DicomObject study; | |
const StudyTile({super.key, required this.study}); | |
Widget _buildSeriesList() { | |
return Consumer<SeriesModel>(builder: (context, seriesModel, child) { | |
return SizedBox( | |
height: 100, | |
child: ListView.builder( | |
scrollDirection: Axis.horizontal, | |
itemCount: seriesModel.series.length, | |
itemBuilder: (context, index) { | |
var series = seriesModel.getSeriesByIndex(index); | |
var seriesInstanceUid = | |
series[TagsDictionary.SERIES_INSTANCE_UID]?.asString(); | |
var studyInstanceUid = | |
series[TagsDictionary.STUDY_INSTANCE_UID]?.asString(); | |
// TODO: return placeholder if one of the UIDs is null | |
return Container( | |
padding: const EdgeInsets.all(8), | |
child: DicomWebService.instance.retrieveSeriesRendered( | |
studyInstanceUid!, seriesInstanceUid!)); | |
})); | |
}); | |
} | |
@override | |
Widget build(BuildContext context) { | |
return GestureDetector( | |
onTap: () { | |
Navigator.pushNamed(context, '/viewer', | |
arguments: ViewerArguments(study)); | |
}, | |
child: Padding( | |
padding: const EdgeInsets.all(4), | |
child: Expanded( | |
child: Row( | |
crossAxisAlignment: CrossAxisAlignment.start, | |
children: [ | |
Wrap(spacing: 2, direction: Axis.vertical, children: [ | |
IconButton( | |
onPressed: () => (), icon: const Icon(Icons.share)), | |
IconButton( | |
onPressed: () => (), icon: const Icon(Icons.download)), | |
IconButton( | |
onPressed: () => (), icon: const Icon(Icons.delete)), | |
]), | |
const SizedBox(width: 10), | |
Expanded( | |
child: Column( | |
crossAxisAlignment: CrossAxisAlignment.start, | |
children: [ | |
StudyInfo(dicom: study), | |
Expanded( | |
child: Row( | |
crossAxisAlignment: CrossAxisAlignment.center, | |
children: [ | |
PatientInfo(dicom: study), | |
Expanded(child: _buildSeriesList()) | |
], | |
)), | |
], | |
)), | |
], | |
), | |
)), | |
); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment