means_list.dart 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251
  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:liftmanager/internal/means/page/means_pdf.dart';
  5. import 'package:flutter_screenutil/flutter_screenutil.dart';
  6. import 'package:liftmanager/internal/bbs/model/means_model.dart';
  7. import 'package:liftmanager/internal/search/presenter/base_list_provider.dart';
  8. import 'package:liftmanager/internal/means/presenter/means_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:path_provider/path_provider.dart';
  13. import 'package:liftmanager/routers/fluro_navigator.dart';
  14. import 'package:liftmanager/widgets/my_refresh_list.dart';
  15. import 'package:liftmanager/utils/toast.dart';
  16. import 'package:liftmanager/utils/url.dart';
  17. import 'package:provider/provider.dart';
  18. import 'package:liftmanager/widgets/preview_images.dart';
  19. import 'package:liftmanager/utils/utils.dart';
  20. import 'package:liftmanager/internal/search/search_router.dart';
  21. import 'dart:async';
  22. import 'dart:io';
  23. class MeansList extends StatefulWidget {
  24. MeansList(this.catagoryId, this.dataTable, this.brandId);
  25. final String catagoryId;
  26. final String dataTable;
  27. final String brandId;
  28. @override
  29. MeansListState createState() => MeansListState();
  30. }
  31. class MeansListState
  32. extends BasePageState<MeansList, MeansListPresenterSeconds> {
  33. BaseListProvider<MeansDetailModel> provider =
  34. BaseListProvider<MeansDetailModel>();
  35. int _page = 1;
  36. ScrollController _scrollController = new ScrollController();
  37. String pathPDF = "";
  38. String searchWord = '';
  39. @override
  40. void initState() {
  41. provider.setStateTypeNotNotify(StateType.loading);
  42. super.initState();
  43. _onRefresh();
  44. }
  45. @override
  46. void dispose() {
  47. _scrollController.dispose();
  48. super.dispose();
  49. }
  50. @override
  51. Widget build(BuildContext context) {
  52. double width = MediaQuery.of(context).size.width;
  53. return ChangeNotifierProvider<BaseListProvider<MeansDetailModel>>(
  54. create: (_) => provider,
  55. child: Scaffold(
  56. appBar: SearchAppBar2(
  57. onPressed: (text) {
  58. print(text);
  59. searchWord = text;
  60. _onRefresh();
  61. },
  62. ),
  63. body: Container(
  64. child: Column(
  65. children: <Widget>[
  66. Expanded(
  67. flex: 1,
  68. child: Consumer<BaseListProvider<MeansDetailModel>>(
  69. builder: (_, provider, __) {
  70. return MyListView(
  71. key: Key('means_list'),
  72. itemCount: provider.list.length,
  73. stateType: provider.stateType,
  74. onRefresh: _onRefresh,
  75. loadMore: _loadMore,
  76. hasMore: provider.hasMore,
  77. itemBuilder: (_, index) {
  78. return GestureDetector(
  79. child: Container(
  80. padding: EdgeInsets.only(
  81. left: ScreenUtil().setWidth(15),
  82. right: ScreenUtil().setWidth(15),
  83. top: ScreenUtil().setHeight(10),
  84. bottom: ScreenUtil().setHeight(10),
  85. ),
  86. decoration: BoxDecoration(
  87. border: Border(
  88. bottom:
  89. BorderSide(width: 0.5, color: Colours.line),
  90. ),
  91. ),
  92. child: Column(
  93. children: <Widget>[
  94. Container(
  95. padding: EdgeInsets.only(
  96. bottom: ScreenUtil().setHeight(5)),
  97. child: Row(
  98. mainAxisAlignment:
  99. MainAxisAlignment.spaceBetween,
  100. children: <Widget>[
  101. Container(
  102. padding: EdgeInsets.only(
  103. right: ScreenUtil().setWidth(10)),
  104. child: ClipRRect(
  105. borderRadius: BorderRadius.circular(
  106. ScreenUtil().setWidth(18)),
  107. child: Container(
  108. width: ScreenUtil().setWidth(36),
  109. height: ScreenUtil().setWidth(36),
  110. color: Color(0xffFAF7FA),
  111. // padding: EdgeInsets.only(right:10),
  112. child: Icon(
  113. IconData(0xe648,
  114. fontFamily: "myfont"),
  115. size: 24.0,
  116. color: Color(0xff53C3FA),
  117. ),
  118. ),
  119. ),
  120. ),
  121. Expanded(
  122. child: Text(
  123. provider.list[index].name ?? '',
  124. textAlign: TextAlign.left,
  125. style: TextStyle(
  126. fontSize: ScreenUtil().setSp(14),
  127. ),
  128. ),
  129. ),
  130. ],
  131. ),
  132. ),
  133. ],
  134. ),
  135. ),
  136. onTap: () {
  137. var fileUrl = provider.list[index].url;
  138. if (fileUrl != null && fileUrl != '') {
  139. fileUrl = Utils.getImagePath(provider.list[index].url);
  140. print(fileUrl);
  141. if (Utils.getFileType(fileUrl) == 'image') {
  142. Navigator.of(context).push(
  143. new FadeRoute(
  144. page: PhotoViewGalleryScreen(
  145. images: [fileUrl], //传入图片list
  146. index: index, //传入当前点击的图片的index
  147. // heroTag: img,//传入当前点击的图片的hero tag (可选)
  148. ),
  149. ),
  150. );
  151. } else if (Utils.getFileType(fileUrl) == 'pdf') {
  152. createFileOfPdfUrl(fileUrl).then(
  153. (f) {
  154. setState(
  155. () {
  156. pathPDF = f.path;
  157. print(f.path);
  158. print("123456789-----");
  159. Navigator.push(
  160. context,
  161. MaterialPageRoute(
  162. builder: (context) =>
  163. PDFScreen(f.path, fileUrl,provider.list[index].id.toString()),
  164. ),
  165. );
  166. },
  167. );
  168. },
  169. );
  170. }
  171. } else {
  172. toasts("暂无文件");
  173. }
  174. },
  175. );
  176. },
  177. );
  178. },
  179. ),
  180. )
  181. ],
  182. ),
  183. ),
  184. ),
  185. );
  186. }
  187. Future _onRefresh() async {
  188. _page = 1;
  189. await presenter.getMeansList(
  190. _page, widget.dataTable, widget.catagoryId, widget.brandId, searchWord: searchWord);
  191. }
  192. Future _loadMore() async {
  193. _page++;
  194. await presenter.getMeansList(
  195. _page, widget.dataTable, widget.catagoryId, widget.brandId, searchWord: searchWord);
  196. }
  197. Future<File> createFileOfPdfUrl(url) async {
  198. final filename = url.substring(url.lastIndexOf("/") + 1);
  199. var request = await HttpClient().getUrl(Uri.parse(url));
  200. var response = await request.close();
  201. var bytes = await consolidateHttpClientResponseBytes(response);
  202. String dir = (await getApplicationDocumentsDirectory()).path;
  203. File file = new File('$dir/$filename');
  204. await file.writeAsBytes(bytes);
  205. return file;
  206. }
  207. @override
  208. MeansListPresenterSeconds createPresenter() {
  209. return MeansListPresenterSeconds();
  210. }
  211. }
  212. class FadeRoute extends PageRouteBuilder {
  213. final Widget page;
  214. FadeRoute({this.page})
  215. : super(
  216. pageBuilder: (
  217. BuildContext context,
  218. Animation<double> animation,
  219. Animation<double> secondaryAnimation,
  220. ) =>
  221. page,
  222. transitionsBuilder: (
  223. BuildContext context,
  224. Animation<double> animation,
  225. Animation<double> secondaryAnimation,
  226. Widget child,
  227. ) =>
  228. FadeTransition(
  229. opacity: animation,
  230. child: child,
  231. ),
  232. );
  233. }