repair_select_project_page.dart 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266
  1. import 'package:flutter/material.dart';
  2. import 'package:liftmanager/internal/lift/lift_router.dart';
  3. import 'package:liftmanager/internal/project/model/project_list_entity.dart';
  4. import 'package:liftmanager/internal/project/project_router.dart';
  5. import 'package:liftmanager/internal/repair/provider/repair_select_project_presenter.dart';
  6. import 'package:liftmanager/internal/repair/repair_router.dart';
  7. import 'package:liftmanager/internal/search/presenter/base_list_provider.dart';
  8. import 'package:liftmanager/mvp/base_page_state.dart';
  9. import 'package:liftmanager/res/resources.dart';
  10. import 'package:liftmanager/routers/fluro_navigator.dart';
  11. import 'package:liftmanager/utils/theme_utils.dart';
  12. import 'package:liftmanager/widgets/app_bar.dart';
  13. import 'package:liftmanager/widgets/app_search_bar.dart';
  14. import 'package:liftmanager/widgets/my_button.dart';
  15. import 'package:liftmanager/widgets/my_refresh_list.dart';
  16. import 'package:liftmanager/widgets/search_bar.dart';
  17. import 'package:liftmanager/widgets/state_layout.dart';
  18. import 'package:provider/provider.dart' as p;
  19. class RepairSelectProjectPage extends StatefulWidget {
  20. @override
  21. RepairSelectProjectPageState createState() => RepairSelectProjectPageState();
  22. }
  23. class RepairSelectProjectPageState extends BasePageState<
  24. RepairSelectProjectPage, RepairSelectProjectPresenter> {
  25. BaseListProvider<ProjectListItem> provider =
  26. BaseListProvider<ProjectListItem>();
  27. String _keyword = "";
  28. int _page = 1;
  29. @override
  30. void initState() {
  31. /// 默认为加载中状态,本页面场景默认为空
  32. provider.setStateTypeNotNotify(StateType.loading);
  33. super.initState();
  34. _onRefresh();
  35. }
  36. ///电梯列表
  37. void _liftList(ProjectListItem model) {
  38. NavigatorUtils.pushResult(
  39. context, "${RepairRouter.repairSelectLiftPage}?id=${model.projectId}", (result) {
  40. NavigatorUtils.goBackWithParams(context, [model,result]);
  41. // setState(() {
  42. // // LiftListItem model = result;
  43. // // item.registrationCode = model.registrationCode;
  44. // // item.liftId = model.id;
  45. // // setState(() {});
  46. // });
  47. });
  48. // NavigatorUtils.push(context, LiftRouter.liftListPage + "?id=${id}");
  49. }
  50. ///项目详情
  51. void _projectDetail(id) {
  52. // NavigatorUtils.push(context, "${ProjectRouter.projectDetailPage}?id=${id}");
  53. }
  54. @override
  55. Widget build(BuildContext context) {
  56. bool isDark = ThemeUtils.isDark(context);
  57. return p.ChangeNotifierProvider<BaseListProvider<ProjectListItem>>(
  58. create: (_) => provider,
  59. child: Scaffold(
  60. appBar: SearchAppBar2(
  61. backgroundColor: Colors.white,
  62. onPressed: (text) {
  63. _keyword = text;
  64. provider.setStateType(StateType.loading);
  65. _page = 1;
  66. presenter.searchProject(context, _keyword, _page, true);
  67. },
  68. ),
  69. body: Container(
  70. color: ThemeUtils.getBackgroundColor(context),
  71. child: Column(
  72. crossAxisAlignment: CrossAxisAlignment.start,
  73. children: <Widget>[
  74. // Container(
  75. // color:ThemeUtils.getTabsBg(context),
  76. // padding:
  77. // EdgeInsets.only(top: 10, bottom: 10, left: 15, right: 15),
  78. // child: SearchBar(
  79. // hintText: "搜索项目",
  80. // autofocus: false,
  81. // onPressed: (text) {
  82. // _keyword = text;
  83. // provider.setStateType(StateType.loading);
  84. // _page = 1;
  85. // presenter.searchProject(context,_keyword, _page, true);
  86. // },
  87. // ),
  88. // ),
  89. Expanded(
  90. flex: 1,
  91. child: p.Consumer<BaseListProvider<ProjectListItem>>(
  92. builder: (_, provider, __) {
  93. return MyListView(
  94. key: Key('project_list'),
  95. itemCount: provider.list.length,
  96. stateType: provider.stateType,
  97. onRefresh: _onRefresh,
  98. loadMore: _loadMore,
  99. hasMore: provider.hasMore,
  100. itemBuilder: (_, index) {
  101. return InkWell(
  102. onTap: () {
  103. _projectDetail(provider.list[index].projectId);
  104. },
  105. child: Container(
  106. margin: EdgeInsets.fromLTRB(15, 5, 15, 5),
  107. decoration: BoxDecoration(
  108. color: isDark ? Colors.black : Colors.white,
  109. borderRadius: BorderRadius.circular(6.0),
  110. ),
  111. padding: const EdgeInsets.only(bottom: 10),
  112. child: Column(
  113. children: <Widget>[
  114. Container(
  115. // decoration: BoxDecoration(
  116. // border: Border(
  117. // bottom: BorderSide(
  118. // width: 0.5, color: Colours.text_gray_c),
  119. // )),
  120. padding: EdgeInsets.only(left: 12),
  121. child: Row(
  122. children: <Widget>[
  123. Expanded(
  124. flex: 1,
  125. child: Text(
  126. provider
  127. .list[index].projectName,
  128. style: TextStyle(
  129. fontSize: 15,
  130. color: isDark
  131. ? Colours.dark_text
  132. : Colours.text),
  133. overflow: TextOverflow.ellipsis,
  134. softWrap: false, //单行显示
  135. )),
  136. MyButton(
  137. key: const Key('lift_list'),
  138. onPressed: () {
  139. _liftList(provider
  140. .list[index]);
  141. },
  142. height: 25,
  143. fontSize: 11,
  144. colors: [
  145. Colours.app_main,
  146. Colours.app_main
  147. ],
  148. borderWidth: 0.5,
  149. borderColor: Colours.app_main,
  150. text: "查看电梯",
  151. )
  152. ],
  153. ),
  154. ),
  155. Container(
  156. color: Colours.dark_line_bg,
  157. child: Column(
  158. children: [
  159. lineTxt("区域主管","${provider.list[index].directorName}"),
  160. lineTxt(
  161. "项目用途",
  162. "${provider.list[index].getProjectUsageName()}",
  163. ),
  164. lineTxt("项目台量",
  165. "${provider.list[index].actualNum}")
  166. ],
  167. ),
  168. )
  169. ],
  170. ),
  171. ));
  172. // InkWell(
  173. // onTap: (){
  174. // },
  175. // child: Container(
  176. // decoration: BoxDecoration(
  177. // color: isDark?Colors.black:Colors.white,
  178. // ),
  179. // padding: const EdgeInsets.only(bottom: 10),
  180. // child: Column(
  181. // children: <Widget>[
  182. // Container(
  183. // padding: EdgeInsets.only(left: 12),
  184. // child: Row(
  185. // children: <Widget>[
  186. // Expanded(
  187. // flex: 1,
  188. // child: Text(
  189. // provider.list[index].projectName,
  190. // style: TextStyle(fontSize: 15,color:isDark?Colours.dark_text:Colours.text),
  191. // overflow: TextOverflow.ellipsis,
  192. // softWrap: false, //单行显示
  193. // )),
  194. // MyButton(
  195. // key: const Key('lift_list'),
  196. // onPressed: () {
  197. // NavigatorUtils.goBackWithParams(context, provider.list[index]);
  198. // },
  199. // height: 25,
  200. // fontSize: 11,
  201. // colors: [
  202. // Colours.app_main,
  203. // Colours.app_main
  204. // ],
  205. // borderWidth: 0.5,
  206. // borderColor: Colours.app_main,
  207. // text: "选择",
  208. // )
  209. // ],
  210. // ),
  211. // ),
  212. // ],
  213. // ),
  214. // ));
  215. },
  216. );
  217. }))
  218. ],
  219. ),
  220. ),
  221. ));
  222. }
  223. Widget lineTxt(title, value) {
  224. return Container(
  225. padding: EdgeInsets.only(left: 12, top: 5, right: 12),
  226. child: Row(
  227. children: <Widget>[
  228. Text("${title}",
  229. style: TextStyle(fontSize: 13, color: Colours.dark_text_gray)),
  230. Expanded(
  231. flex: 1,
  232. child: Text(
  233. "${value}",
  234. textAlign: TextAlign.right,
  235. style: TextStyle(fontSize: 13, color: Colours.dark_text_gray),
  236. ),
  237. )
  238. ],
  239. ),
  240. );
  241. }
  242. Future _onRefresh() async {
  243. _page = 1;
  244. await presenter.searchProject(context, _keyword, _page, false);
  245. }
  246. Future _loadMore() async {
  247. _page++;
  248. await presenter.searchProject(context, _keyword, _page, false);
  249. }
  250. @override
  251. RepairSelectProjectPresenter createPresenter() {
  252. return RepairSelectProjectPresenter();
  253. }
  254. }