field_control.dart 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. import 'package:track_common/service/map_watch.dart';
  2. import 'package:track_common/track_common.dart';
  3. import 'package:track_common/view/home/field_control/field_control.dart';
  4. import 'package:track_common/view/home/field_control/field_control_controller.dart';
  5. import 'package:track_common/widget/prelude.dart';
  6. class FieldControlPageImpl extends FieldControlPage {
  7. const FieldControlPageImpl({super.key});
  8. @override
  9. Widget get rightColumn {
  10. return Obx(() => Container(
  11. width: 263,
  12. padding: const EdgeInsets.all(6.4),
  13. height: double.infinity,
  14. color: Colors.white,
  15. child: Column(
  16. children: [
  17. SizedBox(
  18. width: double.infinity,
  19. child: DarkButton(
  20. child: const Text('注册比赛'),
  21. onPressed: () {
  22. Get.dialog(RegisterDialog());
  23. })),
  24. Expanded(
  25. child: ListView(
  26. children: controller.eventList
  27. .map((element) => eventView(element))
  28. .toList(),
  29. ),
  30. )
  31. ],
  32. )));
  33. }
  34. Widget eventView(EventOnMap event) {
  35. return Card(
  36. shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(3.56)),
  37. child: Row(
  38. children: [
  39. Text(event.name),
  40. Text('(${event.userList.length} 人)'),
  41. const Spacer(),
  42. IconButton(
  43. onPressed: () {},
  44. icon: const Icon(Icons.arrow_drop_down_outlined))
  45. ],
  46. ),
  47. );
  48. }
  49. }
  50. class FieldControlControllerImpl extends FieldControlController {
  51. var registerName = '';
  52. TimeOfDay? registerStartAt;
  53. TimeOfDay? registerStopAt;
  54. final registerStartAtController = TextEditingController();
  55. final registerStopAtController = TextEditingController();
  56. }
  57. class RegisterDialog extends GetView<FieldControlController> {
  58. const RegisterDialog({super.key});
  59. FieldControlControllerImpl get c => controller as FieldControlControllerImpl;
  60. @override
  61. Widget build(BuildContext context) {
  62. return AlertDialog(
  63. title: const Center(
  64. child: Text(
  65. '注册比赛',
  66. style: TextStyle(fontSize: 17),
  67. )),
  68. backgroundColor: Colors.white,
  69. shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(17.78)),
  70. content: SizedBox(
  71. width: 75.38,
  72. child: ListView(
  73. shrinkWrap: true,
  74. children: [
  75. const _TextField(hint: '请选择活动'),
  76. const SizedBox(height: 21.34),
  77. _TextField(
  78. hint: '请输入名称',
  79. onChanged: (v) {
  80. c.registerName = v;
  81. }),
  82. const SizedBox(height: 21.34),
  83. Row(children: [
  84. Expanded(
  85. child: _TextField(
  86. hint: '开始时间',
  87. readOnly: true,
  88. controller: c.registerStartAtController,
  89. onTap: () async {
  90. debug('onTap');
  91. final t =
  92. await _showTimePicker(context, c.registerStartAt);
  93. c.registerStartAt = t;
  94. if (t != null) {
  95. c.registerStartAtController.text = t.toString();
  96. }
  97. })),
  98. const SizedBox(width: 15.64),
  99. Expanded(
  100. child: _TextField(
  101. hint: '结束时间',
  102. readOnly: true,
  103. controller: c.registerStopAtController,
  104. onTap: () async {
  105. debug('onTap');
  106. final t =
  107. await _showTimePicker(context, c.registerStopAt);
  108. c.registerStopAt = t;
  109. if (t != null) {
  110. c.registerStopAtController.text = t.toString();
  111. }
  112. })),
  113. ]),
  114. Row(
  115. mainAxisSize: MainAxisSize.min,
  116. children: [
  117. Switch(value: true, onChanged: (v) {}),
  118. const Text('查询密码')
  119. ],
  120. ),
  121. SizedBox(
  122. width: double.infinity,
  123. child: DarkButton(child: const Text('注 册'), onPressed: () {}))
  124. ],
  125. )),
  126. );
  127. }
  128. Future<TimeOfDay?> _showTimePicker(
  129. BuildContext context, TimeOfDay? init) async {
  130. final TimeOfDay? time = await showTimePicker(
  131. context: context,
  132. initialTime: init ?? TimeOfDay.now(),
  133. );
  134. return time;
  135. }
  136. }
  137. class _TextField extends StatelessWidget {
  138. const _TextField(
  139. {required this.hint,
  140. this.onChanged,
  141. this.readOnly = false,
  142. this.onTap,
  143. this.controller});
  144. final String hint;
  145. final void Function(String)? onChanged;
  146. final bool readOnly;
  147. final void Function()? onTap;
  148. final TextEditingController? controller;
  149. @override
  150. Widget build(BuildContext context) {
  151. return SizedBox(
  152. height: 34.13,
  153. child: TextField(
  154. controller: controller,
  155. maxLines: 1,
  156. style: const TextStyle(fontSize: 11.38),
  157. onChanged: onChanged,
  158. onTap: onTap,
  159. readOnly: readOnly,
  160. decoration: InputDecoration(
  161. hintText: hint,
  162. border: OutlineInputBorder(
  163. borderSide: const BorderSide(
  164. width: 0.71, color: Color(0xff818181)), //<-- SEE HERE
  165. borderRadius: BorderRadius.circular(2.13),
  166. ),
  167. isDense: true,
  168. contentPadding: const EdgeInsets.all(8.53)),
  169. ),
  170. );
  171. }
  172. }