project_list_page.dart 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  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/presenter/project_list_presenter.dart';
  5. import 'package:liftmanager/internal/project/project_router.dart';
  6. import 'package:liftmanager/internal/search/presenter/base_list_provider.dart';
  7. import 'package:liftmanager/mvp/base_page_state.dart';
  8. import 'package:liftmanager/res/resources.dart';
  9. import 'package:liftmanager/routers/fluro_navigator.dart';
  10. import 'package:liftmanager/utils/theme_utils.dart';
  11. import 'package:liftmanager/widgets/app_bar.dart';
  12. import 'package:liftmanager/widgets/my_button.dart';
  13. import 'package:liftmanager/widgets/my_refresh_list.dart';
  14. import 'package:liftmanager/widgets/search_bar.dart';
  15. import 'package:liftmanager/widgets/state_layout.dart';
  16. import 'package:provider/provider.dart' as p;
  17. class ProjectListPage extends StatefulWidget {
  18. @override
  19. ProjectListPageState createState() => ProjectListPageState();
  20. }
  21. class ProjectListPageState
  22. extends BasePageState<ProjectListPage, ProjectListPresenter> {
  23. BaseListProvider<ProjectListItem> provider =
  24. BaseListProvider<ProjectListItem>();
  25. String _keyword = "";
  26. int _page = 1;
  27. @override
  28. void initState() {
  29. /// 默认为加载中状态,本页面场景默认为空
  30. provider.setStateTypeNotNotify(StateType.loading);
  31. super.initState();
  32. _onRefresh();
  33. }
  34. ///电梯列表
  35. void _liftList(id) {
  36. NavigatorUtils.push(context, LiftRouter.liftListPage + "?id=${id}");
  37. }
  38. ///项目详情
  39. void _projectDetail(id){
  40. NavigatorUtils.push(context, "${ProjectRouter.projectDetailPage}?id=${id}");
  41. }
  42. @override
  43. Widget build(BuildContext context) {
  44. bool isDark = ThemeUtils.isDark(context);
  45. return p.ChangeNotifierProvider<BaseListProvider<ProjectListItem>>(
  46. create: (_) => provider,
  47. child: WillPopScope(
  48. onWillPop:(){
  49. NavigatorUtils.goBackWithParams(context,true);
  50. return Future.value(false);
  51. },
  52. child:Scaffold(
  53. appBar: MyAppBar(
  54. centerTitle: "项目列表",
  55. ),
  56. body: Container(
  57. color: ThemeUtils.getBackgroundColor(context),
  58. child: Column(
  59. crossAxisAlignment: CrossAxisAlignment.start,
  60. children: <Widget>[
  61. Container(
  62. color:ThemeUtils.getTabsBg(context),
  63. padding:
  64. EdgeInsets.only(top: 10, bottom: 10, left: 15, right: 15),
  65. child: SearchBar(
  66. hintText: "搜索项目",
  67. autofocus: false,
  68. onPressed: (text) {
  69. _keyword = text;
  70. provider.setStateType(StateType.loading);
  71. _page = 1;
  72. presenter.searchProject(context,_keyword, _page, true);
  73. },
  74. ),
  75. ),
  76. Expanded(
  77. flex: 1,
  78. child: p.Consumer<BaseListProvider<ProjectListItem>>(
  79. builder: (_, provider, __) {
  80. return MyListView(
  81. key: Key('project_list'),
  82. itemCount: provider.list.length,
  83. stateType: provider.stateType,
  84. onRefresh: _onRefresh,
  85. loadMore: _loadMore,
  86. hasMore: provider.hasMore,
  87. itemBuilder: (_, index) {
  88. return InkWell(
  89. onTap: (){
  90. _projectDetail(provider.list[index].projectId);
  91. },
  92. child: Container(
  93. margin: EdgeInsets.fromLTRB(15, 5, 15, 5),
  94. decoration: BoxDecoration(
  95. color: isDark?Colors.black:Colors.white,
  96. borderRadius: BorderRadius.circular(6.0),
  97. ),
  98. padding: const EdgeInsets.only(bottom: 10),
  99. child: Column(
  100. children: <Widget>[
  101. Container(
  102. decoration: BoxDecoration(
  103. border: Border(
  104. bottom: BorderSide(
  105. width: 0.5, color: Colours.text_gray_c),
  106. )),
  107. padding: EdgeInsets.only(left: 12),
  108. child: Row(
  109. children: <Widget>[
  110. Expanded(
  111. flex: 1,
  112. child: Text(
  113. provider.list[index].projectName,
  114. style: TextStyle(fontSize: 15,color:isDark?Colours.dark_text:Colours.text),
  115. overflow: TextOverflow.ellipsis,
  116. softWrap: false, //单行显示
  117. )),
  118. MyButton(
  119. key: const Key('lift_list'),
  120. onPressed: () {
  121. _liftList(provider.list[index].projectId);
  122. },
  123. height: 25,
  124. fontSize: 11,
  125. colors: [
  126. Colours.app_main,
  127. Colours.app_main
  128. ],
  129. borderWidth: 0.5,
  130. borderColor: Colours.app_main,
  131. text: "查看电梯",
  132. )
  133. ],
  134. ),
  135. ),
  136. lineTxt("项目编号",
  137. "${provider.list[index].projectCode}"),
  138. lineTxt("项目用途", "${provider.list[index].getProjectUsageName()}",),
  139. lineTxt(
  140. "项目台量", "${provider.list[index].actualNum}")
  141. ],
  142. ),
  143. ));
  144. },
  145. );
  146. }))
  147. ],
  148. ),
  149. ),
  150. )));
  151. }
  152. Widget lineTxt(title, value) {
  153. return Container(
  154. padding: EdgeInsets.only(left: 12, top: 5, right: 12),
  155. child: Row(
  156. children: <Widget>[
  157. Text("${title}",
  158. style: TextStyle(fontSize: 13, color: Colours.dark_text_gray)),
  159. Expanded(
  160. flex: 1,
  161. child: Text(
  162. "${value}",
  163. textAlign: TextAlign.right,
  164. style: TextStyle(fontSize: 13, color: Colours.dark_text_gray),
  165. ),
  166. )
  167. ],
  168. ),
  169. );
  170. }
  171. Future _onRefresh() async {
  172. _page = 1;
  173. await presenter.searchProject(context,_keyword, _page, false);
  174. }
  175. Future _loadMore() async {
  176. _page++;
  177. await presenter.searchProject(context,_keyword, _page, false);
  178. }
  179. @override
  180. ProjectListPresenter createPresenter() {
  181. return ProjectListPresenter();
  182. }
  183. }