control_list.dart 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. import 'dart:async';
  2. import 'package:flutter/foundation.dart';
  3. import 'package:flutter/material.dart';
  4. import 'package:flutter_screenutil/flutter_screenutil.dart';
  5. import 'package:liftmanager/internal/bbs/model/control_model.dart';
  6. import 'package:liftmanager/internal/means/means_router.dart';
  7. import 'package:liftmanager/internal/means/presenter/control_list_presenter.dart';
  8. import 'package:liftmanager/internal/search/presenter/base_list_provider.dart';
  9. import 'package:liftmanager/mvp/base_page_state.dart';
  10. import 'package:liftmanager/res/resources.dart';
  11. import 'package:liftmanager/routers/fluro_navigator.dart';
  12. import 'package:liftmanager/widgets/app_search_bar.dart';
  13. import 'package:liftmanager/widgets/load_image.dart';
  14. import 'package:liftmanager/widgets/my_refresh_list.dart';
  15. import 'package:liftmanager/widgets/state_layout.dart';
  16. import 'package:provider/provider.dart';
  17. class ControlList extends StatefulWidget {
  18. @override
  19. ControlListState createState() => ControlListState();
  20. }
  21. class ControlListState
  22. extends BasePageState<ControlList, ControlListPresenterSeconds> {
  23. BaseListProvider<Records> provider = BaseListProvider<Records>();
  24. int _page = 1;
  25. String searchWord;
  26. ScrollController _scrollController = new ScrollController();
  27. @override
  28. void initState() {
  29. provider.setStateTypeNotNotify(StateType.loading);
  30. super.initState();
  31. _onRefresh();
  32. }
  33. @override
  34. void dispose() {
  35. _scrollController.dispose();
  36. super.dispose();
  37. }
  38. @override
  39. Widget build(BuildContext context) {
  40. double width = MediaQuery.of(context).size.width;
  41. return ChangeNotifierProvider<BaseListProvider<Records>>(
  42. create: (_) => provider,
  43. child: Scaffold(
  44. appBar: SearchAppBar2(
  45. onPressed: (text) {
  46. searchWord = text;
  47. _onRefresh();
  48. },
  49. ),
  50. body: Container(
  51. child: Column(
  52. children: <Widget>[
  53. Expanded(
  54. flex: 1,
  55. child: Consumer<BaseListProvider<Records>>(
  56. builder: (_, provider, __) {
  57. return MyListView(
  58. key: Key('brand_list'),
  59. itemCount: provider.list.length,
  60. stateType: provider.stateType,
  61. onRefresh: _onRefresh,
  62. loadMore: _loadMore,
  63. hasMore: provider.hasMore,
  64. itemBuilder: (_, index) {
  65. return GestureDetector(
  66. child: Container(
  67. padding: EdgeInsets.only(
  68. left: ScreenUtil().setWidth(10),
  69. right: ScreenUtil().setWidth(10),
  70. top: ScreenUtil().setHeight(10),
  71. bottom: ScreenUtil().setHeight(10)),
  72. decoration: BoxDecoration(
  73. border: Border(
  74. bottom: BorderSide(
  75. width: 0.5, color: Colours.line),
  76. ),
  77. ),
  78. child: Column(children: <Widget>[
  79. Container(
  80. padding: EdgeInsets.only(
  81. bottom: ScreenUtil().setHeight(5)),
  82. child: Row(
  83. mainAxisAlignment:
  84. MainAxisAlignment.spaceBetween,
  85. children: <Widget>[
  86. Row(
  87. crossAxisAlignment:
  88. CrossAxisAlignment.center,
  89. children: <Widget>[
  90. Container(
  91. padding: EdgeInsets.only(
  92. right: ScreenUtil()
  93. .setWidth(10)),
  94. child: ClipRRect(
  95. borderRadius:
  96. BorderRadius.circular(0),
  97. child: Container(
  98. width:
  99. ScreenUtil().setWidth(40),
  100. height:
  101. ScreenUtil().setWidth(40),
  102. color: Color(0xffFAF7FA),
  103. padding: EdgeInsets.all(2),
  104. child: LoadNetworkImage(
  105. provider.list[index].logo,
  106. fit: BoxFit.cover,
  107. width: ScreenUtil()
  108. .setWidth(100),
  109. height: ScreenUtil()
  110. .setWidth(100),
  111. ),
  112. ),
  113. ),
  114. ),
  115. Container(
  116. child: Text(
  117. provider.list[index].name ?? '',
  118. textAlign: TextAlign.left,
  119. style: TextStyle(
  120. fontSize: 14,
  121. color: Color(0xff333333),
  122. ),
  123. ),
  124. ),
  125. ]),
  126. Container(
  127. child: Icon(
  128. Icons.keyboard_arrow_right,
  129. size: 26.0,
  130. color: Color(0xffdddddd),
  131. ),
  132. )
  133. ],
  134. ),
  135. ),
  136. ]),
  137. ),
  138. onTap: () {
  139. NavigatorUtils.push(context,
  140. "${MeansRouter.controlDetail}?id=${provider.list[index].id.toString()}");
  141. },
  142. );
  143. },
  144. );
  145. }))
  146. ],
  147. ))));
  148. }
  149. Future _onRefresh() async {
  150. _page = 1;
  151. await presenter.getControlList(_page, searchWord: searchWord);
  152. }
  153. Future _loadMore() async {
  154. _page++;
  155. await presenter.getControlList(_page, searchWord: searchWord);
  156. }
  157. @override
  158. ControlListPresenterSeconds createPresenter() {
  159. return ControlListPresenterSeconds();
  160. }
  161. }