control_list.dart 7.9 KB

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