123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 |
- import 'dart:convert';
- import 'package:fis_common/index.dart';
- import 'package:flutter/foundation.dart';
- import 'package:flutter/material.dart';
- import 'package:flutter/services.dart';
- import 'package:get/get.dart';
- import 'package:vitalapp/architecture/utils/prompt_box.dart';
- import 'package:vitalapp/managers/interfaces/doctor.dart';
- import 'package:vitalapp/pages/check/models/form.dart';
- import 'package:vitalapp/pages/check/widgets/exam_configurable/exam_blood.dart';
- import 'package:vitalapp/pages/check/widgets/exam_configurable/exam_check_box.dart';
- import 'package:vitalapp/pages/check/widgets/exam_configurable/exam_date.dart';
- import 'package:vitalapp/pages/check/widgets/exam_configurable/exam_input.dart';
- import 'package:vitalapp/pages/check/widgets/exam_configurable/exam_multi_select_list.dart';
- import 'package:vitalapp/pages/check/widgets/exam_configurable/exam_number_input.dart';
- import 'package:vitalapp/pages/check/widgets/exam_configurable/exam_radio.dart';
- import 'package:vitalapp/pages/check/widgets/exam_configurable/exam_signature.dart';
- import 'package:vitalapp/pages/check/widgets/exam_configurable/exam_single_option.dart';
- import 'package:vitalapp/pages/check/widgets/exam_configurable/exam_single_select.dart';
- import 'package:vitalapp/pages/check/widgets/exam_configurable/exam_text_input.dart';
- import 'package:vitalapp/pages/check/widgets/exam_configurable/exam_virtual_title.dart';
- import 'package:vitalapp/store/store.dart';
- import '../medical/widgets/exam_card.dart';
- import 'form_info.dart';
- class FormView extends StatefulWidget {
- final String templateJson;
- FormView(this.templateJson);
- @override
- State<StatefulWidget> createState() {
- return FormViewState();
- }
- }
- class FormViewState extends State<FormView> {
- final ScrollController _scrollController = ScrollController();
- List<FormObject> _templateItems = [];
- @override
- void initState() {
- var _templateJson = widget.templateJson;
- var templateItems = jsonDecode(_templateJson);
- for (var item in templateItems) {
- if (item is Map<String, dynamic> && item.containsKey('type')) {
- try {
- var templateItem = FormObject.fromJson(item);
- _templateItems.add(templateItem);
- } catch (e) {
- print(e);
- }
- }
- }
- super.initState();
- }
- @override
- Widget build(BuildContext context) {
- return Scrollbar(
- thumbVisibility: true,
- controller: _scrollController,
- child: SingleChildScrollView(
- controller: _scrollController,
- child: Container(
- alignment: Alignment.topCenter,
- padding: const EdgeInsets.all(15),
- child: FormItemsView(_templateItems),
- ),
- ),
- );
- }
- }
- class FormItemsView extends StatelessWidget {
- final List<FormObject> templateItems;
- FormItemsView(this.templateItems);
- @override
- Widget build(BuildContext context) {
- return LayoutBuilder(
- builder: (BuildContext context, BoxConstraints constraints) {
- return Wrap(
- runSpacing: 20, // 纵向元素间距
- alignment: WrapAlignment.start,
- children: templateItems.map(
- (e) {
- switch (e.type) {
- case "dateTime":
- return Container(
- width: constraints.maxWidth / 2,
- child: ExamDate(currentFormObject: e),
- );
- case "longInput":
- var width = constraints.maxWidth;
- return Container(
- width: width,
- child: ExamTextInput(
- currentFormObject: e,
- ),
- );
- case "input":
- var width = constraints.maxWidth / 2;
- if ((e.label?.length ?? 0) > 15) {
- width = constraints.maxWidth;
- }
- return Container(
- width: width,
- child: ExamTextInput(
- currentFormObject: e,
- ),
- );
- case "textareaInput":
- return Container(
- height: 200,
- child: ExamTextInput(
- currentFormObject: e,
- ),
- );
- case "numberInput":
- return Container(
- width: constraints.maxWidth / 2,
- child: ExamTextInput(
- currentFormObject: e,
- isNumber: true,
- ),
- );
- case "checkbox":
- List<Option> options = e.options ?? [];
- return ExammultiSelectList(
- currentFormObject: e,
- currentSelectedCheckBox: [],
- options: options,
- );
- case "option":
- return ExamSingleOption(
- option: Option(label: e.label, value: e.key),
- currentFormObject: e,
- isSelected: false,
- );
- case "radio":
- List<Option> options = e.options ?? [];
- return ExamSingleSelect(
- options: options,
- currentFormObject: e,
- currentSelected: "",
- );
- case "virtualTitle":
- return VirtualTitleContent(
- formObject: e,
- );
- case "signature":
- return Container(
- width: constraints.maxWidth / 2,
- child: Signature(e),
- );
- case "bloodPressure":
- return Container(
- width: constraints.maxWidth / 2,
- child: ExamBlood(
- currentFormObject: e,
- ),
- );
- case "label":
- return ExamCard(
- content: Container(),
- title: e.label,
- );
- }
- if (kDebugMode) {
- return Text("存在异常组件:$e");
- }
- return SizedBox();
- },
- ).toList(),
- );
- });
- }
- }
|