123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196 |
- // ignore_for_file: must_be_immutable
- import 'dart:convert';
- import 'package:fis_common/logger/logger.dart';
- import 'package:fis_jsonrpc/rpc.dart';
- import 'package:flutter/material.dart';
- import 'package:get/get.dart';
- import 'package:vitalapp/architecture/utils/prompt_box.dart';
- import 'package:vitalapp/components/button.dart';
- import 'package:vitalapp/managers/interfaces/exam.dart';
- import 'package:vitalapp/pages/check/models/form.dart';
- import 'package:vitalapp/pages/check/widgets/exam_configurable/exam_radio_and_select.dart';
- import 'package:vitalapp/pages/check/widgets/exam_configurable/exam_self_care_card.dart';
- import 'package:vitalapp/pages/check/widgets/exam_title.dart';
- import 'package:vitalapp/pages/self_care_ability_assessment/view.dart';
- import 'package:vitalapp/store/store.dart';
- /// 特殊组件,老年人自理评估
- class ExamAbilityRadio extends StatefulWidget {
- ExamAbilityRadio({
- super.key,
- required this.currentFormObject,
- required this.options,
- required this.selectRaidoChange,
- required this.currentSelected,
- required this.patientCode,
- });
- final FormObject currentFormObject;
- final List<Option> options;
- final Function selectRaidoChange;
- final String currentSelected;
- final String patientCode;
- @override
- State<ExamAbilityRadio> createState() => _ExamAbilityRadioState();
- }
- class _ExamAbilityRadioState extends State<ExamAbilityRadio> {
- final _examManager = Get.find<IExamManager>();
- String _currentSelfCare = "";
- Future<void> getPatientExamList() async {
- try {
- Store.app.setBusy("加载中");
- // 获取当前病人所有的量表
- var result = await _examManager.getPatientExamByPageAsync(
- widget.patientCode,
- "LNRZLNLPG",
- );
- Store.app.cancelBusy();
- if (result != null) {
- ExamConclusionDTO examConclusion = await Get.dialog(ExamSelfCareCard(
- conclusionList: result,
- currentSelfCare: _currentSelfCare,
- ));
- if (examConclusion.examData != null) {
- _currentSelfCare = examConclusion.code!;
- String examData = examConclusion.examData!;
- String? selfCareScore = jsonDecode(examData)['SelfCareScore'];
- if (selfCareScore != null) {
- selectRaidoChangeByScore(int.parse(selfCareScore));
- }
- }
- }
- } catch (e) {
- PromptBox.toast("获取老年人自理评估结果失败");
- logger.e("getPatientExamList 获取自理评估结果" + e.toString());
- Store.app.cancelBusy();
- }
- }
- void selectRaidoChangeByScore(int score) {
- Option currentOption = Option();
- if (score <= 3) {
- currentOption = Option(label: "可自理(0~3分)", value: "1");
- } else if (score <= 8) {
- currentOption = Option(label: "轻度依赖(4~8分)", value: "2");
- } else if (score <= 18) {
- currentOption = Option(label: "中度依赖(9~18分)", value: "3");
- } else {
- currentOption = Option(label: "不能自理(19~24分)", value: "4");
- }
- if (currentOption.value != widget.currentSelected) {
- widget.selectRaidoChange(currentOption);
- }
- }
- @override
- Widget build(BuildContext context) {
- if (widget.currentFormObject.showLimit ?? true) {
- return Stack(
- children: [
- ExamCardRadioSelect(
- titleText: ExamTitle(
- label: widget.currentFormObject.label,
- titleType: '(单选)',
- ),
- title: widget.currentFormObject.label ?? '',
- content: Stack(
- children: [
- Container(
- padding: const EdgeInsets.symmetric(
- horizontal: 5,
- ),
- alignment: widget.currentFormObject.span == 24
- ? Alignment.centerLeft
- : Alignment.center,
- width: double.infinity,
- child: Wrap(
- children: widget.options
- .map(
- (e) => Container(
- padding: const EdgeInsets.all(7),
- child: InkWell(
- onTap: () => widget.selectRaidoChange(e),
- borderRadius: BorderRadius.circular(50),
- child: Ink(
- decoration: BoxDecoration(
- border: Border.all(
- color: widget.currentSelected == e.value
- ? Colors.blue
- : Colors.black26,
- ),
- borderRadius: const BorderRadius.all(
- Radius.circular(50),
- ),
- color: widget.currentSelected == e.value
- ? Colors.blue
- : Colors.transparent,
- ),
- child: Container(
- padding: const EdgeInsets.all(15),
- alignment: Alignment.center,
- width: 250,
- child: FittedBox(
- child: Text(
- e.label ?? '',
- style: TextStyle(
- fontSize: 20,
- color: widget.currentSelected == e.value
- ? Colors.white
- : Colors.black54,
- ),
- ),
- ),
- ),
- ),
- ),
- ),
- )
- .toList(),
- ),
- ),
- ],
- ),
- ),
- Positioned(
- top: 16,
- right: 16,
- child: Container(
- width: 180,
- child: VButton(
- label: '自理能力评估',
- onTap: () async {
- String? selfCareScore =
- await Get.dialog(SelfCareAbilityAssessmentView());
- if (selfCareScore != null) {
- _currentSelfCare = "";
- selectRaidoChangeByScore(int.parse(selfCareScore));
- }
- },
- ),
- ),
- ),
- Positioned(
- right: 206,
- top: 16,
- child: Container(
- width: 180,
- child: VButton(
- label: '导入结果',
- onTap: () async => {
- await getPatientExamList(),
- },
- ),
- ),
- ),
- ],
- );
- } else {
- return Container();
- }
- }
- }
|