brand_list.dart 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  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/brand_model.dart';
  7. import 'package:liftmanager/internal/search/presenter/base_list_provider.dart';
  8. import 'package:liftmanager/internal/means/presenter/brand_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 BrandList extends StatefulWidget {
  21. @override
  22. BrandListState createState() => BrandListState();
  23. }
  24. class BrandListState
  25. extends BasePageState<BrandList, BrandListPresenterSeconds> {
  26. BaseListProvider<Records> provider = BaseListProvider<Records>();
  27. int _page = 1;
  28. ScrollController _scrollController = new ScrollController();
  29. @override
  30. void initState() {
  31. provider.setStateTypeNotNotify(StateType.loading);
  32. super.initState();
  33. _onRefresh();
  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. onPressed: () {
  48. NavigatorUtils.push(context, SearchRouter.searchBrand);
  49. }
  50. ),
  51. body: Container(
  52. child: Column(
  53. children: <Widget>[
  54. Expanded(
  55. flex: 1,
  56. child: Consumer<BaseListProvider<Records>>(
  57. builder: (_, provider, __) {
  58. return MyListView(
  59. key: Key('brand_list'),
  60. itemCount: provider.list.length,
  61. stateType: provider.stateType,
  62. onRefresh: _onRefresh,
  63. loadMore: _loadMore,
  64. hasMore: provider.hasMore,
  65. itemBuilder: (_, index) {
  66. return GestureDetector(
  67. child: Container(
  68. padding: EdgeInsets.only(
  69. left: ScreenUtil().setWidth(15),
  70. right: ScreenUtil().setWidth(15),
  71. top: ScreenUtil().setHeight(10),
  72. bottom: ScreenUtil().setHeight(10),
  73. ),
  74. decoration: BoxDecoration(
  75. border: Border(
  76. bottom:
  77. BorderSide(width: 0.5, color: Colours.line),
  78. ),
  79. ),
  80. child: Column(children: <Widget>[
  81. Container(
  82. padding: EdgeInsets.only(
  83. bottom: ScreenUtil().setHeight(5)),
  84. child: Row(
  85. mainAxisAlignment:
  86. MainAxisAlignment.spaceBetween,
  87. children: <Widget>[
  88. Row(
  89. crossAxisAlignment:
  90. CrossAxisAlignment.center,
  91. children: <Widget>[
  92. Container(
  93. padding: EdgeInsets.only(
  94. right: ScreenUtil().setWidth(10)),
  95. child: ClipRRect(
  96. borderRadius: BorderRadius.circular(
  97. ScreenUtil().setWidth(18)),
  98. child: Container(
  99. width: ScreenUtil().setWidth(36),
  100. height: ScreenUtil().setWidth(36),
  101. color: Color(0xffFAF7FA),
  102. padding: EdgeInsets.all(2),
  103. child: LoadNetworkImage(
  104. provider.list[index].logo,
  105. fit: BoxFit.cover,
  106. width:
  107. ScreenUtil().setWidth(100),
  108. height:
  109. ScreenUtil().setWidth(100),
  110. ),
  111. ),
  112. ),
  113. ),
  114. Container(
  115. child: Text(
  116. provider.list[index].name ?? '',
  117. textAlign: TextAlign.left,
  118. style: TextStyle(
  119. fontSize: ScreenUtil().setSp(14),
  120. ),
  121. ),
  122. ),
  123. ],
  124. ),
  125. Container(
  126. child: Icon(
  127. Icons.keyboard_arrow_right,
  128. size: 26.0,
  129. color: Color(0xffdddddd),
  130. ),
  131. )
  132. ],
  133. ),
  134. ),
  135. ]),
  136. ),
  137. onTap: () {
  138. NavigatorUtils.push(context,
  139. "${MeansRouter.brandDetail}?id=${provider.list[index].id.toString()}");
  140. },
  141. );
  142. },
  143. );
  144. },
  145. ),
  146. )
  147. ],
  148. ),
  149. ),
  150. ),
  151. );
  152. }
  153. Future _onRefresh() async {
  154. _page = 1;
  155. await presenter.getBrandList(_page);
  156. }
  157. Future _loadMore() async {
  158. _page++;
  159. await presenter.getBrandList(_page);
  160. }
  161. @override
  162. BrandListPresenterSeconds createPresenter() {
  163. return BrandListPresenterSeconds();
  164. }
  165. }