|
@@ -2,159 +2,70 @@ import 'package:fis_jsonrpc/rpc.dart';
|
|
|
import 'package:flutter/material.dart';
|
|
|
import 'package:get/get.dart';
|
|
|
import 'package:vnoteapp/components/cell.dart';
|
|
|
-import 'package:vnoteapp/components/checkbox_button.dart';
|
|
|
-import 'package:vnoteapp/components/dynamic_drawer.dart';
|
|
|
import 'package:vnoteapp/pages/controllers/crowd_labels.dart';
|
|
|
-import 'package:vnoteapp/pages/patient/create/controller.dart';
|
|
|
|
|
|
-class CrowdLabel extends GetView<CrowdLabelsController> {
|
|
|
- final createController = Get.find<CreatePatientController>();
|
|
|
-
|
|
|
- CrowdLabel({super.key});
|
|
|
+class CrowdLabelView extends GetView<CrowdLabelsController> {
|
|
|
+ const CrowdLabelView({super.key});
|
|
|
@override
|
|
|
Widget build(BuildContext context) {
|
|
|
- return Column(
|
|
|
- children: [
|
|
|
- VListFormCellGroup(
|
|
|
+ return Container(
|
|
|
+ padding: const EdgeInsets.only(bottom: 80),
|
|
|
+ child: buildCrowdLables(context));
|
|
|
+ }
|
|
|
+
|
|
|
+ Widget buildCrowdLables(BuildContext context) {
|
|
|
+ return Obx(() {
|
|
|
+ final state = controller.state;
|
|
|
+ return SingleChildScrollView(
|
|
|
+ child: Column(
|
|
|
children: [
|
|
|
- VListFormCell(
|
|
|
- labelWidget: RichText(
|
|
|
- text: const TextSpan(
|
|
|
- text: '* ',
|
|
|
- style: TextStyle(color: Colors.red, fontSize: 20),
|
|
|
- children: [
|
|
|
- TextSpan(
|
|
|
- text: '人群分类',
|
|
|
- style: TextStyle(color: Colors.black, fontSize: 20),
|
|
|
- ),
|
|
|
- ],
|
|
|
- ),
|
|
|
- ),
|
|
|
- contentWidget: _buildContent(context),
|
|
|
- onTap: () {
|
|
|
- VDynamicDrawerWrapper.show(
|
|
|
- scaffoldKey: createController.homeScaffoldKey,
|
|
|
- builder: (_) => _buildDrawer(),
|
|
|
- );
|
|
|
- },
|
|
|
+ VListFormCellGroup(
|
|
|
+ children: [
|
|
|
+ ...state.normalOptions
|
|
|
+ .map((LabelDTO e) => buildItem(e, context))
|
|
|
+ .toList(),
|
|
|
+ ...state.diseaseOptions
|
|
|
+ .map((LabelDTO e) => buildItem(e, context))
|
|
|
+ .toList(),
|
|
|
+ ...state.specialCareOptions
|
|
|
+ .map((LabelDTO e) => buildItem(e, context))
|
|
|
+ .toList(),
|
|
|
+ ],
|
|
|
),
|
|
|
],
|
|
|
),
|
|
|
- ],
|
|
|
- );
|
|
|
+ );
|
|
|
+ });
|
|
|
}
|
|
|
|
|
|
- Widget _buildDrawer() {
|
|
|
- final state = controller.state;
|
|
|
- List<String> selectedNormalCodes = state.selectedNormalCodes;
|
|
|
- List<String> selectedDiseaseCodes = state.selectedDiseaseCodes;
|
|
|
- List<String> selectedSpecialCareCodes = state.selectedSpecialCareCodes;
|
|
|
- final scrollController = ScrollController();
|
|
|
- return VDrawer(
|
|
|
- width: 600,
|
|
|
- title: "设置人群分类",
|
|
|
- scaffoldKey: createController.homeScaffoldKey,
|
|
|
- onConfirm: () {
|
|
|
- VDynamicDrawerWrapper.hide(
|
|
|
- scaffoldKey: createController.homeScaffoldKey,
|
|
|
- );
|
|
|
- state.selectedNormalCodes = selectedNormalCodes;
|
|
|
- state.selectedDiseaseCodes = selectedDiseaseCodes;
|
|
|
- state.selectedSpecialCareCodes = selectedSpecialCareCodes;
|
|
|
+ Widget buildItem(LabelDTO dto, BuildContext context) {
|
|
|
+ return InkWell(
|
|
|
+ onTap: () {
|
|
|
+ controller.onItemCheckChanged(dto.code!);
|
|
|
},
|
|
|
- child: Scrollbar(
|
|
|
- controller: scrollController,
|
|
|
- thumbVisibility: true,
|
|
|
- child: SingleChildScrollView(
|
|
|
- controller: scrollController,
|
|
|
- child: Padding(
|
|
|
- padding: const EdgeInsets.symmetric(horizontal: 50),
|
|
|
- child: Column(
|
|
|
- children: [
|
|
|
- const SizedBox(height: 24),
|
|
|
- VCheckBoxButtonGroup<LabelDTO, String>(
|
|
|
- source: state.normalOptions,
|
|
|
- values: state.selectedNormalCodes,
|
|
|
- labelGetter: (LabelDTO data) => data.labelName!,
|
|
|
- valueGetter: (LabelDTO data) => data.code!,
|
|
|
- onChanged: (value) {
|
|
|
- selectedNormalCodes = value;
|
|
|
- },
|
|
|
- ),
|
|
|
- const SizedBox(height: 8),
|
|
|
- Divider(
|
|
|
- indent: 32,
|
|
|
- endIndent: 32,
|
|
|
- thickness: 1,
|
|
|
- color: Colors.grey.shade300,
|
|
|
- ),
|
|
|
- const SizedBox(height: 8),
|
|
|
- VCheckBoxButtonGroup<LabelDTO, String>(
|
|
|
- source: state.diseaseOptions,
|
|
|
- values: state.selectedDiseaseCodes,
|
|
|
- labelGetter: (LabelDTO data) => data.labelName!,
|
|
|
- valueGetter: (LabelDTO data) => data.code!,
|
|
|
- onChanged: (value) {
|
|
|
- selectedDiseaseCodes = value;
|
|
|
- },
|
|
|
- ),
|
|
|
- const SizedBox(height: 8),
|
|
|
- Divider(
|
|
|
- indent: 32,
|
|
|
- endIndent: 32,
|
|
|
- thickness: 1,
|
|
|
- color: Colors.grey.shade300,
|
|
|
- ),
|
|
|
- const SizedBox(height: 8),
|
|
|
- VCheckBoxButtonGroup<LabelDTO, String>(
|
|
|
- source: state.specialCareOptions,
|
|
|
- values: state.selectedSpecialCareCodes,
|
|
|
- labelGetter: (LabelDTO data) => data.labelName!,
|
|
|
- valueGetter: (LabelDTO data) => data.code!,
|
|
|
- onChanged: (value) {
|
|
|
- selectedSpecialCareCodes = value;
|
|
|
- },
|
|
|
+ child: Container(
|
|
|
+ margin: const EdgeInsets.symmetric(horizontal: 48, vertical: 8),
|
|
|
+ child: Row(
|
|
|
+ children: [
|
|
|
+ Expanded(
|
|
|
+ child: VListFormCell(
|
|
|
+ label: dto.labelName ?? '',
|
|
|
+ contentWidget: Obx(
|
|
|
+ () => Switch(
|
|
|
+ value: controller.state.selectedCodes.contains(dto.code),
|
|
|
+ onChanged: (value) {
|
|
|
+ controller.onItemCheckChanged(dto.code!);
|
|
|
+ },
|
|
|
+ activeColor: Theme.of(context).primaryColor,
|
|
|
+ inactiveThumbColor: Colors.grey,
|
|
|
+
|
|
|
+ ),
|
|
|
),
|
|
|
- ],
|
|
|
+ ),
|
|
|
),
|
|
|
- ),
|
|
|
+ ],
|
|
|
),
|
|
|
),
|
|
|
);
|
|
|
}
|
|
|
-
|
|
|
- Widget _buildContent(BuildContext context) {
|
|
|
- return Obx(
|
|
|
- () {
|
|
|
- final themeData = Theme.of(context);
|
|
|
- final color = themeData.secondaryHeaderColor;
|
|
|
- final names = controller.state.selectedNames;
|
|
|
- const itemHeight = 32.0;
|
|
|
- const itemRadius = itemHeight / 2;
|
|
|
- final itemTextStyle = TextStyle(
|
|
|
- color: themeData.primaryColor,
|
|
|
- fontSize: 14,
|
|
|
- );
|
|
|
- return Wrap(
|
|
|
- spacing: 16,
|
|
|
- runSpacing: 16,
|
|
|
- children: names.map(
|
|
|
- (e) {
|
|
|
- return Container(
|
|
|
- height: itemHeight,
|
|
|
- alignment: Alignment.center,
|
|
|
- padding: const EdgeInsets.symmetric(horizontal: 12),
|
|
|
- decoration: BoxDecoration(
|
|
|
- color: color,
|
|
|
- border: Border.all(style: BorderStyle.none),
|
|
|
- borderRadius: BorderRadius.circular(itemRadius),
|
|
|
- ),
|
|
|
- child: Text(e, style: itemTextStyle),
|
|
|
- );
|
|
|
- },
|
|
|
- ).toList(),
|
|
|
- );
|
|
|
- },
|
|
|
- );
|
|
|
- }
|
|
|
}
|