page_crtacc.dart 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300
  1. import 'package:flutter/cupertino.dart';
  2. import 'package:flutter/material.dart';
  3. import 'package:flutter/widgets.dart';
  4. import 'package:taskservice/Common/JXColors.dart';
  5. import 'package:taskservice/Model/JXMemberModel.dart';
  6. import 'package:taskservice/Model/JXServiceModel.dart';
  7. import 'package:taskservice/database/DataBase.dart';
  8. import 'package:taskservice/src/custom_widgets.dart';
  9. import 'package:taskservice/src/service/page_servicelist.dart';
  10. class CreateAccPage extends StatefulWidget {
  11. @override
  12. _CreateAccPageState createState() => _CreateAccPageState();
  13. }
  14. class _CreateAccPageState extends State<CreateAccPage> {
  15. JXMemberModel member;
  16. TextEditingController nameController = TextEditingController();
  17. TextEditingController phoneController = TextEditingController();
  18. TextEditingController birthController = TextEditingController();
  19. TextEditingController addrConotroller = TextEditingController();
  20. TextEditingController remarkConotroller = TextEditingController();
  21. @override
  22. void initState() {
  23. super.initState();
  24. member = JXMemberModel();
  25. nameController.addListener(onInfoChanged);
  26. phoneController.addListener(onInfoChanged);
  27. birthController.addListener(onInfoChanged);
  28. addrConotroller.addListener(onInfoChanged);
  29. remarkConotroller.addListener(onInfoChanged);
  30. }
  31. void onInfoChanged() {
  32. member.name = nameController.value.text;
  33. member.tel = phoneController.value.text;
  34. member.birth = birthController.value.text;
  35. member.addr = addrConotroller.value.text;
  36. member.remark = remarkConotroller.value.text;
  37. }
  38. @override
  39. Widget build(BuildContext context) {
  40. return MyScaffold(title: '新建会员', body: Column(
  41. children: <Widget>[
  42. Expanded(
  43. child: CustomScrollView(physics:BouncingScrollPhysics(),
  44. slivers: <Widget>[
  45. buildEditPart(),
  46. buildItemsPart(),
  47. SliverToBoxAdapter(
  48. child: Container(
  49. decoration: BoxDecoration(
  50. borderRadius: BorderRadius.circular(12),
  51. border: Border.all(
  52. width: 1,
  53. )),
  54. margin: EdgeInsets.symmetric(vertical: 12, horizontal: 80),
  55. child: InkWell(
  56. onTap: () {
  57. /*跳转到服务*/
  58. Navigator.of(context).pushNamed('$CreateServiceList',
  59. arguments: {'services': member.services}).then((value) {
  60. print(value.toString());
  61. onClickAddServer(value);
  62. });
  63. },
  64. child: Container(
  65. padding: EdgeInsets.all(8),
  66. child: Text(
  67. '添加服务',
  68. textAlign: TextAlign.center,
  69. style: TextStyle(fontSize: 18),
  70. ),
  71. ),
  72. ),
  73. ),
  74. ),
  75. ],
  76. ),
  77. ),
  78. GestureDetector(onTap: onClickSave, child: Container(width: MediaQuery.of(context).size.width, child: Text('保存', textAlign: TextAlign.center, style: TextStyle(fontSize: 16, color: JXColors.kFFFFFF),), padding: EdgeInsets.symmetric(vertical: 16), decoration: BoxDecoration(color: JXColors.k101E40),)),
  79. ],
  80. ));
  81. }
  82. SliverList buildItemsPart() {
  83. return SliverList(
  84. delegate: SliverChildBuilderDelegate((BuildContext context, int index) {
  85. if (index <= member.services.length - 1) {
  86. var service = member.services[index];
  87. return Container(
  88. padding: EdgeInsets.symmetric(horizontal: 16),
  89. child: Column(
  90. children: <Widget>[
  91. SizedBox(
  92. height: 8,
  93. ),
  94. Row(
  95. mainAxisAlignment: MainAxisAlignment.spaceBetween,
  96. children: <Widget>[
  97. Text('类型: ${service.kind}'),
  98. Text('周期: ${service.cycle}${service.cycleUnit}'),
  99. ],
  100. ),
  101. SizedBox(
  102. height: 20,
  103. ),
  104. Row(
  105. children: <Widget>[
  106. Text('备注 ${service.remark}'),
  107. ],
  108. ),
  109. SizedBox(
  110. height: 8,
  111. ),
  112. Divider(
  113. height: 2,
  114. thickness: 2,
  115. ),
  116. ],
  117. ),
  118. );
  119. } else {
  120. return null;
  121. }
  122. }),
  123. );
  124. }
  125. SliverList buildEditPart() {
  126. return SliverList(
  127. delegate: SliverChildListDelegate([
  128. Row(
  129. mainAxisSize: MainAxisSize.max,
  130. children: <Widget>[
  131. SizedBox(
  132. width: 20,
  133. ),
  134. Text(
  135. '姓名',
  136. style: TextStyle(fontSize: 15, fontWeight: FontWeight.bold),
  137. ),
  138. Expanded(
  139. child: Padding(
  140. padding: const EdgeInsets.symmetric(horizontal: 20),
  141. child: TextField(controller: nameController,),
  142. )),
  143. ],
  144. ),
  145. Row(
  146. mainAxisSize: MainAxisSize.max,
  147. children: <Widget>[
  148. SizedBox(
  149. width: 20,
  150. ),
  151. Text(
  152. '电话',
  153. style: TextStyle(fontSize: 15, fontWeight: FontWeight.bold),
  154. ),
  155. Expanded(
  156. child: Padding(
  157. padding: const EdgeInsets.symmetric(horizontal: 20),
  158. child: TextField(controller: phoneController,),
  159. )),
  160. ],
  161. ),
  162. Row(
  163. mainAxisSize: MainAxisSize.max,
  164. children: <Widget>[
  165. SizedBox(
  166. width: 20,
  167. ),
  168. Text(
  169. '生日',
  170. style: TextStyle(fontSize: 15, fontWeight: FontWeight.bold),
  171. ),
  172. Expanded(
  173. child: Padding(
  174. padding: const EdgeInsets.symmetric(horizontal: 20),
  175. child: TextField(controller: birthController,),
  176. )),
  177. ],
  178. ),
  179. Container(
  180. height: 44,
  181. child: Row(
  182. mainAxisSize: MainAxisSize.max,
  183. children: <Widget>[
  184. SizedBox(
  185. width: 20,
  186. ),
  187. Text(
  188. '地址',
  189. style: TextStyle(fontSize: 15, fontWeight: FontWeight.bold),
  190. ),
  191. Expanded(
  192. child: Padding(
  193. padding: const EdgeInsets.symmetric(horizontal: 20),
  194. child: Container(
  195. margin: EdgeInsets.only(bottom: 1),
  196. child: Text('省份/城市/区域')),
  197. ),
  198. ),
  199. ],
  200. ),
  201. ),
  202. Divider(
  203. height: 1,
  204. ),
  205. SizedBox(
  206. height: 12,
  207. ),
  208. Row(
  209. crossAxisAlignment: CrossAxisAlignment.start,
  210. children: <Widget>[
  211. SizedBox(
  212. width: 12,
  213. ),
  214. Container(
  215. margin: EdgeInsets.only(top: 8),
  216. width: 60,
  217. alignment: Alignment.center,
  218. child: Text(
  219. '详细地址',
  220. style: TextStyle(fontSize: 15, fontWeight: FontWeight.bold),
  221. ),
  222. ),
  223. Expanded(
  224. child: Padding(
  225. padding: const EdgeInsets.symmetric(horizontal: 20),
  226. child: Container(
  227. decoration: BoxDecoration(
  228. border: Border.all(color: JXColors.kE6E6E6, width: 2),
  229. borderRadius: BorderRadius.circular(12)),
  230. height: 150,
  231. child: TextField(decoration: null, controller: addrConotroller,)),
  232. )),
  233. ],
  234. ),
  235. SizedBox(
  236. height: 12,
  237. ),
  238. Row(
  239. crossAxisAlignment: CrossAxisAlignment.start,
  240. children: <Widget>[
  241. SizedBox(
  242. width: 12,
  243. ),
  244. Container(
  245. margin: EdgeInsets.only(top: 8),
  246. width: 60,
  247. alignment: Alignment.center,
  248. child: Text(
  249. '备注',
  250. style: TextStyle(fontSize: 15, fontWeight: FontWeight.bold),
  251. ),
  252. ),
  253. Expanded(
  254. child: Padding(
  255. padding: const EdgeInsets.symmetric(horizontal: 20),
  256. child: Container(
  257. decoration: BoxDecoration(
  258. border: Border.all(color: JXColors.kE6E6E6, width: 2),
  259. borderRadius: BorderRadius.circular(12)),
  260. height: 150,
  261. child: TextField(decoration: null, controller: remarkConotroller,)),
  262. )),
  263. ],
  264. ),
  265. SizedBox(
  266. height: 12,
  267. ),
  268. Container(
  269. padding: EdgeInsets.all(12),
  270. decoration: BoxDecoration(color: JXColors.kE6E6E6),
  271. child: Text(
  272. '服务',
  273. style: TextStyle(color: JXColors.k2E3032),
  274. ),
  275. ),
  276. ]),
  277. );
  278. }
  279. /*保存*/
  280. Future<void> onClickSave() async {
  281. (await MyDataBase.database).saveMember(member);
  282. Navigator.of(context).pop();
  283. }
  284. /*界面返回后添加服务*/
  285. void onClickAddServer(List <JXServiceModel> services) {
  286. print('添加多个服务');
  287. member.services.clear();
  288. member.services.addAll(services);
  289. setState(() {});
  290. }
  291. }