lift_list_page.dart 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  1. import 'package:flutter/material.dart';
  2. import 'package:liftmanager/common/common.dart';
  3. import 'package:liftmanager/common/user_db.dart';
  4. import 'package:liftmanager/internal/lift/lift_router.dart';
  5. import 'package:liftmanager/internal/lift/model/lift_list_entity.dart';
  6. import 'package:liftmanager/internal/lift/presenter/lift_list_presenter.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/my_button.dart';
  14. import 'package:liftmanager/widgets/my_refresh_list.dart';
  15. import 'package:liftmanager/widgets/search_bar.dart';
  16. import 'package:liftmanager/widgets/state_layout.dart';
  17. import 'package:provider/provider.dart' as p;
  18. class LiftListPage extends StatefulWidget {
  19. LiftListPage(this.projectId);
  20. final String projectId;
  21. @override
  22. LiftListPageState createState() => LiftListPageState();
  23. }
  24. class LiftListPageState extends BasePageState<LiftListPage, LiftListPresenter> {
  25. BaseListProvider<LiftListItem> provider = BaseListProvider<LiftListItem>();
  26. String _keyword = "";
  27. int _page = 1;
  28. @override
  29. void initState() {
  30. /// 默认为加载中状态,本页面场景默认为空
  31. provider.setStateTypeNotNotify(StateType.loading);
  32. super.initState();
  33. _onRefresh();
  34. getHasRole();
  35. }
  36. bool noRole = true;
  37. getHasRole() async {
  38. var role = await User().getCompanyRole();
  39. print(role);
  40. if(role == Constant.RoleAdmin || role == Constant.RoleRegion || role == Constant.RoleWork){
  41. noRole = false;
  42. setState(() {
  43. });
  44. }
  45. }
  46. goToPage(pagePath){
  47. NavigatorUtils.pushResult(context, pagePath, (res){
  48. _onRefresh();
  49. });
  50. }
  51. @override
  52. Widget build(BuildContext context) {
  53. bool isDark = ThemeUtils.isDark(context);
  54. return p.ChangeNotifierProvider<BaseListProvider<LiftListItem>>(
  55. create: (_) => provider,
  56. child: Scaffold(
  57. appBar: MyAppBar(
  58. centerTitle: "电梯列表",
  59. actions: <Widget>[
  60. Offstage(
  61. offstage: noRole,
  62. child: FlatButton(
  63. child: Text("新建", key: const Key('actionName')),
  64. textColor: Colours.dark_text,
  65. highlightColor: Colors.transparent,
  66. onPressed: () {
  67. goToPage("${LiftRouter.liftCreatePage}?id="+widget.projectId);
  68. },
  69. )
  70. )
  71. ],
  72. ),
  73. body: Container(
  74. color: ThemeUtils.getBackgroundColor(context),
  75. child: Column(
  76. crossAxisAlignment: CrossAxisAlignment.start,
  77. children: <Widget>[
  78. Container(
  79. color: ThemeUtils.getTabsBg(context),
  80. padding:
  81. EdgeInsets.only(top: 10, bottom: 10, left: 15, right: 15),
  82. child: SearchBar(
  83. autofocus: false,
  84. hintText: "搜索电梯",
  85. onPressed: (text) {
  86. // if (text.isEmpty){
  87. // showToast("搜索团队名称不能为空!");
  88. // return;
  89. // }
  90. // FocusScope.of(context).unfocus();
  91. print(widget.projectId);
  92. _keyword = text;
  93. provider.setStateType(StateType.loading);
  94. _page = 1;
  95. presenter.searchLift(context,
  96. widget.projectId, _keyword, _page, true);
  97. },
  98. ),
  99. ),
  100. Expanded(
  101. flex: 1,
  102. child: p.Consumer<BaseListProvider<LiftListItem>>(
  103. builder: (_, provider, __) {
  104. return MyListView(
  105. key: Key('lift_list'),
  106. itemCount: provider.list.length,
  107. stateType: provider.stateType,
  108. onRefresh: _onRefresh,
  109. loadMore: _loadMore,
  110. // itemExtent: 67.0,
  111. hasMore: provider.hasMore,
  112. itemBuilder: (_, index) {
  113. return Container(
  114. margin: EdgeInsets.fromLTRB(15, 5, 15, 5),
  115. decoration: BoxDecoration(
  116. color:isDark?Colors.black:Colors.white,
  117. borderRadius: BorderRadius.circular(6.0),
  118. ),
  119. padding: const EdgeInsets.only(bottom: 10),
  120. child: Column(
  121. children: <Widget>[
  122. Container(
  123. decoration: BoxDecoration(
  124. border: Border(
  125. bottom: BorderSide(
  126. width: 0.5, color: Colours.text_gray_c),
  127. )),
  128. padding: EdgeInsets.only(left: 12),
  129. child: Row(
  130. children: <Widget>[
  131. Expanded(
  132. flex: 1,
  133. child: Text(
  134. provider.list[index].useCompanyCode,
  135. style: TextStyle(fontSize: 15,color:isDark?Colours.dark_text:Colours.text,),
  136. overflow: TextOverflow.ellipsis,
  137. softWrap: false, //单行显示
  138. )),
  139. MyButton(
  140. key: const Key('lift_list'),
  141. onPressed: () {
  142. // _liftList(provider.list[index].id);
  143. goToPage("${LiftRouter.liftDetailPage}?project_id="+widget.projectId+"&id="+provider.list[index].id);
  144. },
  145. height: 25,
  146. fontSize: 11,
  147. colors: [
  148. Colours.app_main,
  149. Colours.app_main
  150. ],
  151. borderWidth: 0.5,
  152. borderColor: Colours.app_main,
  153. text: "查看详情",
  154. )
  155. ],
  156. ),
  157. ),
  158. lineTxt("注册代码",
  159. "${provider.list[index].registrationCode}"),
  160. lineTxt(
  161. "电梯型号", "${provider.list[index].liftCode}"),
  162. lineTxt(
  163. "电梯类型", "${provider.list[index].liftTypeName}"),
  164. lineTxt(
  165. "电梯品牌", "${provider.list[index].liftBrand}")
  166. ],
  167. ),
  168. );
  169. },
  170. );
  171. }))
  172. ],
  173. ),
  174. ),
  175. ));
  176. }
  177. Widget lineTxt(title, value) {
  178. return Container(
  179. padding: EdgeInsets.only(left: 12, top: 5, right: 12),
  180. child: Row(
  181. children: <Widget>[
  182. Text("${title}",
  183. style: TextStyle(fontSize: 13, color: Colours.dark_text_gray)),
  184. Expanded(
  185. flex: 1,
  186. child: Text(
  187. "${value}",
  188. textAlign: TextAlign.right,
  189. style: TextStyle(fontSize: 13, color: Colours.dark_text_gray),
  190. ),
  191. )
  192. ],
  193. ),
  194. );
  195. }
  196. Future _onRefresh() async {
  197. _page = 1;
  198. await presenter.searchLift(context,widget.projectId, _keyword, _page, false);
  199. }
  200. Future _loadMore() async {
  201. _page++;
  202. await presenter.searchLift(context,widget.projectId, _keyword, _page, false);
  203. }
  204. @override
  205. LiftListPresenter createPresenter() {
  206. return LiftListPresenter();
  207. }
  208. }