view_new.dart 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. import 'package:fis_jsonrpc/rpc.dart';
  2. import 'package:flutter/material.dart';
  3. import 'package:get/get.dart';
  4. import 'package:vnoteapp/components/cell.dart';
  5. import 'package:vnoteapp/components/checkbox_button.dart';
  6. import 'package:vnoteapp/components/dynamic_drawer.dart.dart';
  7. import 'package:vnoteapp/pages/controllers/crowd_labels.dart';
  8. import 'package:vnoteapp/pages/patient/create/controller.dart';
  9. class CreatePatientPageNew extends GetView<CreatePatientController> {
  10. const CreatePatientPageNew({super.key});
  11. @override
  12. Widget build(BuildContext context) {
  13. return Container(
  14. alignment: Alignment.topCenter,
  15. child: SizedBox(
  16. width: 800,
  17. child: Scrollbar(
  18. child: ListView(
  19. shrinkWrap: true,
  20. children: [
  21. _CrowdLabelPanel(),
  22. ],
  23. ),
  24. ),
  25. ),
  26. );
  27. }
  28. }
  29. class _CrowdLabelPanel extends GetView<CrowdLabelsController> {
  30. @override
  31. Widget build(BuildContext context) {
  32. final createController = Get.find<CreatePatientController>();
  33. return VListFormCellGroup(
  34. children: [
  35. VListFormCell(
  36. label: "人群分类",
  37. contentWidget: _buildContent(context),
  38. onTap: () {
  39. VDynamicDrawerWrapper.show(
  40. scaffoldKey: createController.homeScaffoldKey,
  41. builder: (_) => _buildDrawer(),
  42. );
  43. },
  44. ),
  45. ],
  46. );
  47. }
  48. Widget _buildDrawer() {
  49. final state = controller.state;
  50. return VDrawer(
  51. width: 800,
  52. child: Column(
  53. children: [
  54. VCheckBoxButtonGroup<LabelDTO, String>(
  55. source: state.normalOptions,
  56. values: state.selectedNormalCodes,
  57. labelGetter: (LabelDTO data) => data.labelName!,
  58. valueGetter: (LabelDTO data) => data.code!,
  59. onChanged: (value) {
  60. state.selectedNormalCodes = value;
  61. },
  62. ),
  63. ],
  64. ),
  65. );
  66. }
  67. Widget _buildContent(BuildContext context) {
  68. return Obx(() {
  69. final themeData = Theme.of(context);
  70. final color = themeData.secondaryHeaderColor;
  71. final names = controller.state.selectedNames;
  72. const itemHeight = 32.0;
  73. const itemRadius = itemHeight / 2;
  74. final itemTextStyle = TextStyle(
  75. color: themeData.primaryColor,
  76. fontSize: 14,
  77. );
  78. return Wrap(
  79. children: names.map(
  80. (e) {
  81. return Container(
  82. height: itemHeight,
  83. alignment: Alignment.center,
  84. decoration: BoxDecoration(
  85. color: color,
  86. border: Border.all(style: BorderStyle.none),
  87. borderRadius: BorderRadius.circular(itemRadius),
  88. ),
  89. child: Text(e, style: itemTextStyle),
  90. );
  91. },
  92. ).toList(),
  93. );
  94. });
  95. }
  96. }