search_brand.dart 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. import 'package:flutter/material.dart';
  2. import 'package:liftmanager/widgets/search_app_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/brand_model.dart';
  7. import 'package:liftmanager/internal/search/presenter/base_list_provider.dart';
  8. import 'package:liftmanager/internal/search/presenter/brand_search_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/utils/toast.dart';
  20. class SearchBrand extends StatefulWidget {
  21. @override
  22. SearchBrandState createState() => SearchBrandState();
  23. }
  24. class SearchBrandState
  25. extends BasePageState<SearchBrand, BrandSearchPresenterSeconds> {
  26. BaseListProvider<Records> provider = BaseListProvider<Records>();
  27. int _page = 1;
  28. String searchWord = '';
  29. ScrollController _scrollController = new ScrollController();
  30. @override
  31. void initState() {
  32. provider.setStateTypeNotNotify(StateType.empty);
  33. super.initState();
  34. }
  35. @override
  36. void dispose() {
  37. _scrollController.dispose();
  38. super.dispose();
  39. }
  40. @override
  41. Widget build(BuildContext context) {
  42. double width = MediaQuery.of(context).size.width;
  43. return ChangeNotifierProvider<BaseListProvider<Records>>(
  44. create: (_) => provider,
  45. child: Scaffold(
  46. appBar: SearchAppBar(
  47. hintText: "请输入需要搜索的内容",
  48. onPressed: (text) {
  49. if (text.isEmpty) {
  50. toasts("搜索关键字不能为空!");
  51. return;
  52. }
  53. FocusScope.of(context).unfocus();
  54. searchWord = text;
  55. _onRefresh();
  56. },
  57. ),
  58. body: Container(
  59. child: Column(
  60. children: <Widget>[
  61. Expanded(
  62. flex: 1,
  63. child: Consumer<BaseListProvider<Records>>(
  64. builder: (_, provider, __) {
  65. return MyListView(
  66. key: Key('brand_list'),
  67. itemCount: provider.list.length,
  68. stateType: provider.stateType,
  69. onRefresh: _onRefresh,
  70. loadMore: _loadMore,
  71. hasMore: provider.hasMore,
  72. itemBuilder: (_, index) {
  73. return GestureDetector(
  74. child: Container(
  75. padding: EdgeInsets.only(
  76. left: ScreenUtil().setWidth(15),
  77. right: ScreenUtil().setWidth(15),
  78. top: ScreenUtil().setHeight(10),
  79. bottom: ScreenUtil().setHeight(10),
  80. ),
  81. decoration: BoxDecoration(
  82. border: Border(
  83. bottom:
  84. BorderSide(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().setWidth(10)),
  102. child: ClipRRect(
  103. borderRadius: BorderRadius.circular(
  104. ScreenUtil().setWidth(18)),
  105. child: Container(
  106. width: ScreenUtil().setWidth(36),
  107. height: ScreenUtil().setWidth(36),
  108. color: Color(0xffFAF7FA),
  109. padding: EdgeInsets.all(2),
  110. child: LoadNetworkImage(
  111. provider.list[index].logo,
  112. fit: BoxFit.cover,
  113. width:
  114. ScreenUtil().setWidth(100),
  115. height:
  116. ScreenUtil().setWidth(100),
  117. ),
  118. ),
  119. ),
  120. ),
  121. Container(
  122. child: Text(
  123. provider.list[index].name ?? '',
  124. textAlign: TextAlign.left,
  125. style: TextStyle(
  126. fontSize: ScreenUtil().setSp(14),
  127. color: Color(0xff333333),
  128. ),
  129. ),
  130. ),
  131. ],
  132. ),
  133. Container(
  134. child: Icon(
  135. Icons.keyboard_arrow_right,
  136. size: 26.0,
  137. color: Color(0xffdddddd),
  138. ),
  139. )
  140. ],
  141. ),
  142. ),
  143. ]),
  144. ),
  145. onTap: () {
  146. NavigatorUtils.push(context,
  147. "${MeansRouter.brandDetail}?id=${provider.list[index].id.toString()}");
  148. },
  149. );
  150. },
  151. );
  152. },
  153. ),
  154. )
  155. ],
  156. ),
  157. ),
  158. ),
  159. );
  160. }
  161. Future _onRefresh() async {
  162. _page = 1;
  163. await presenter.getBrandList(_page, searchWord);
  164. }
  165. Future _loadMore() async {
  166. _page++;
  167. await presenter.getBrandList(_page, searchWord);
  168. }
  169. @override
  170. BrandSearchPresenterSeconds createPresenter() {
  171. return BrandSearchPresenterSeconds();
  172. }
  173. }