user_xieyi.dart 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319
  1. import 'dart:io';
  2. import 'package:flutter/foundation.dart';
  3. import 'package:flutter/material.dart';
  4. import 'package:flutter_swiper/flutter_swiper.dart';
  5. import 'package:liftmanager/common/common.dart';
  6. import 'package:liftmanager/internal/account/provider/user_provider.dart';
  7. import 'package:liftmanager/internal/means/page/means_pdf.dart';
  8. import 'package:liftmanager/internal/wode/model/privilege_model.dart';
  9. import 'package:liftmanager/internal/wode/model/user_xieyi_model.dart';
  10. import 'package:liftmanager/internal/work/work_router.dart';
  11. import 'package:liftmanager/net/api_service.dart';
  12. import 'package:liftmanager/res/resources.dart';
  13. import 'package:liftmanager/routers/fluro_navigator.dart';
  14. import 'package:liftmanager/utils/toast.dart';
  15. import 'package:liftmanager/widgets/app_bar.dart';
  16. import 'package:liftmanager/widgets/click_item.dart';
  17. import 'package:liftmanager/widgets/load_image.dart';
  18. import 'package:path_provider/path_provider.dart';
  19. import 'package:provider/provider.dart';
  20. import 'package:flustars/flustars.dart' as FlutterStars;
  21. class UserXieyiPage extends StatefulWidget {
  22. UserXieyiPage();
  23. @override
  24. State<StatefulWidget> createState() {
  25. return UserXieyiPageState();
  26. }
  27. }
  28. class UserXieyiPageState extends State<UserXieyiPage>
  29. with AutomaticKeepAliveClientMixin {
  30. UserProvider provider = UserProvider();
  31. List<UserXieyi> datas = [];
  32. // UserXieyi datamodel = UserXieyi();
  33. @override
  34. void initState() {
  35. // getAllMenu();
  36. super.initState();
  37. }
  38. @override
  39. void dispose() {
  40. super.dispose();
  41. }
  42. void getDataList() {
  43. NewApiService().getUserXieYi(FlutterStars.SpUtil.getString(Constant.userId),
  44. onSuccess: (res) {
  45. setState(() {
  46. datas = res ?? UserXieyi();
  47. });
  48. }, onError: (code, msg) {
  49. toasts(msg);
  50. });
  51. }
  52. @override
  53. Widget build(BuildContext context) {
  54. double width = MediaQuery.of(context).size.width;
  55. double height = MediaQuery.of(context).size.height;
  56. return ChangeNotifierProvider<UserProvider>(
  57. create: (_) {
  58. getDataList();
  59. return provider;
  60. },
  61. child: Container(
  62. child: Scaffold(
  63. resizeToAvoidBottomPadding: false,
  64. appBar: MyAppBar(
  65. centerTitle: "用户协议",
  66. ),
  67. body: Consumer<UserProvider>(
  68. builder: (_, provider, __) {
  69. return ListView.builder(
  70. itemCount: datas.length,
  71. itemBuilder: (BuildContext context, int index) {
  72. return ClickItem(
  73. title: "${datas[index].name}",
  74. content: "",
  75. onTap: () {
  76. createFileOfPdfUrl("${datas[index].url}").then((f) {
  77. Navigator.push(
  78. context,
  79. MaterialPageRoute(
  80. builder: (context) =>
  81. PDFScreen(f.path, "null", "null")));
  82. // });
  83. });
  84. // NavigatorUtils.push(
  85. // context,
  86. // "${WorkRouter.webview}?title=" +
  87. // Uri.encodeComponent("${datas[index].name}") +
  88. // "&url=" +
  89. // Uri.encodeComponent("${datas[index].url}"),
  90. // );
  91. });
  92. },
  93. );
  94. },
  95. ),
  96. ),
  97. ),
  98. );
  99. }
  100. @override
  101. bool get wantKeepAlive => true;
  102. Future<File> createFileOfPdfUrl(url) async {
  103. final filename = url.substring(url.lastIndexOf("/") + 1);
  104. var request = await HttpClient().getUrl(Uri.parse(url));
  105. var response = await request.close();
  106. var bytes = await consolidateHttpClientResponseBytes(response);
  107. String dir = (await getApplicationDocumentsDirectory()).path;
  108. File file = new File('$dir/$filename');
  109. await file.writeAsBytes(bytes);
  110. return file;
  111. }
  112. }
  113. class SwipeWidget extends StatelessWidget {
  114. SwipeWidget({
  115. Key key,
  116. this.privilegeList,
  117. this.banners,
  118. this.onClickItem,
  119. this.onChangItem,
  120. this.defultModel,
  121. }) : super(key: key);
  122. final List<dynamic> banners;
  123. final List<MenuList> privilegeList;
  124. final Function onClickItem;
  125. final Function onChangItem;
  126. final MenuList defultModel;
  127. @override
  128. Widget build(BuildContext context) {
  129. double width = MediaQuery.of(context).size.width;
  130. double height = 420;
  131. return Container(
  132. width: width,
  133. height: height,
  134. child: Swiper(
  135. itemBuilder: (BuildContext context, index) {
  136. return Container(
  137. width: width,
  138. height: height,
  139. child: Stack(
  140. children: [
  141. Container(
  142. // alignment: Alignment.center,
  143. width: 328,
  144. height: height,
  145. child: LoadAssetImage('img_viptag_bigbg', fit: BoxFit.fill),
  146. ),
  147. Container(
  148. height: 40,
  149. alignment: Alignment.center,
  150. child: Text(
  151. privilegeList[index].name,
  152. style: TextStyle(color: Color(0xffFEEFE5), fontSize: 18),
  153. ),
  154. ),
  155. Positioned(
  156. left: 23,
  157. top: 84,
  158. right: 23,
  159. child: Column(
  160. crossAxisAlignment: CrossAxisAlignment.start,
  161. // mainAxisAlignment: MainAxisAlignment.start,
  162. children: [
  163. Row(
  164. children: [
  165. Container(
  166. height: 11,
  167. width: 2,
  168. color: Color(0xffDAB47E),
  169. margin: EdgeInsets.only(right: 10),
  170. ),
  171. Text(
  172. '权益介绍',
  173. style: TextStyle(
  174. color: Color(0xff222222), fontSize: 14),
  175. )
  176. ],
  177. ),
  178. SizedBox(
  179. height: 15,
  180. ),
  181. Row(
  182. // mainAxisAlignment: MainAxisAlignment.start,
  183. crossAxisAlignment: CrossAxisAlignment.start,
  184. children: [
  185. Container(
  186. height: 6,
  187. width: 6,
  188. margin: EdgeInsets.only(right: 7, top: 6),
  189. decoration: BoxDecoration(
  190. //背景
  191. color: Colours.text_gray,
  192. //设置四周圆角 角度
  193. borderRadius:
  194. BorderRadius.all(Radius.circular(3.0)),
  195. //设置四周边框
  196. ),
  197. ),
  198. Container(
  199. width: 240,
  200. child: Text(
  201. privilegeList[index].descr,
  202. style: TextStyle(
  203. color: Colours.text_gray, fontSize: 14),
  204. ),
  205. )
  206. ],
  207. ),
  208. SizedBox(
  209. height: 15,
  210. ),
  211. // Row(
  212. // crossAxisAlignment: CrossAxisAlignment.start,
  213. // // mainAxisAlignment: MainAxisAlignment.start,
  214. // children: [
  215. // Container(
  216. // height: 6,
  217. // width: 6,
  218. // margin: EdgeInsets.only(right: 7, top: 6),
  219. // decoration: BoxDecoration(
  220. // //背景
  221. // color: Colours.text_gray,
  222. // //设置四周圆角 角度
  223. // borderRadius:
  224. // BorderRadius.all(Radius.circular(3.0)),
  225. // //设置四周边框
  226. // ),
  227. // ),
  228. // Container(
  229. // width: 240,
  230. // child: Text(
  231. // '其他权益描述文本',
  232. // maxLines: 5,
  233. // style: TextStyle(
  234. // color: Colours.text_gray, fontSize: 14),
  235. // ),
  236. // )
  237. // ],
  238. // )
  239. ],
  240. )),
  241. Positioned(
  242. bottom: 35,
  243. left: -10,
  244. child: Container(
  245. height: 40,
  246. width: 328,
  247. alignment: Alignment.center,
  248. child: GestureDetector(
  249. onTap: () {
  250. Navigator.pop(context);
  251. },
  252. child: Text(
  253. '立即开通',
  254. style: TextStyle(
  255. color: Color(0xffFEEFE5), fontSize: 16),
  256. ),
  257. )
  258. // InkWell(
  259. // child: Text('data'),
  260. // ),
  261. ))
  262. ],
  263. ));
  264. },
  265. // pagination: SwiperPagination(
  266. // builder: DotSwiperPaginationBuilder(
  267. // color: Colors.grey,
  268. // activeColor: Colors.white,
  269. // size: 6,
  270. // activeSize: 6,
  271. // ),
  272. // ),
  273. key: UniqueKey(),
  274. viewportFraction: 0.8,
  275. //
  276. scale: 0.9,
  277. itemCount: privilegeList.length,
  278. scrollDirection: Axis.horizontal,
  279. loop: false,
  280. autoplay: false,
  281. index: privilegeList.indexOf(defultModel),
  282. //
  283. // autoplayDisableOnInteraction: false,
  284. // onTap: (index) {
  285. // onClickItem(index, privilegeList[index]);
  286. // },
  287. onIndexChanged: (index) {
  288. onChangItem(index, privilegeList[index]);
  289. },
  290. ),
  291. );
  292. }
  293. }
  294. class CusBehavior extends ScrollBehavior {
  295. @override
  296. Widget buildViewportChrome(
  297. BuildContext context, Widget child, AxisDirection axisDirection) {
  298. return child;
  299. // if (Platform.isAndroid || Platform.isIOS) return child;
  300. // return super.buildViewportChrome(context, child, axisDirection);
  301. }
  302. }