news_detail_page.dart 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. import 'package:flutter/cupertino.dart';
  2. import 'package:flutter/material.dart';
  3. import 'package:flutter_html/style.dart';
  4. import 'package:liftmanager/common/common.dart';
  5. import 'package:liftmanager/internal/account/account_router.dart';
  6. import 'package:liftmanager/net/api_service.dart';
  7. import 'package:liftmanager/res/colors.dart';
  8. import 'package:liftmanager/res/gaps.dart';
  9. import 'package:liftmanager/res/iconfont.dart';
  10. import 'package:liftmanager/routers/fluro_navigator.dart';
  11. import 'package:liftmanager/utils/theme_utils.dart';
  12. import 'package:liftmanager/utils/toast.dart';
  13. import 'package:liftmanager/utils/url.dart';
  14. import 'package:liftmanager/widgets/app_bar.dart';
  15. import 'package:flutter_html/flutter_html.dart';
  16. import 'package:liftmanager/widgets/load_image.dart';
  17. import 'package:flutter_screenutil/flutter_screenutil.dart';
  18. import 'package:flustars/flustars.dart' as FlutterStars;
  19. import 'package:fluwx/fluwx.dart' as fluwx;
  20. import 'package:umeng_common_sdk/umeng_common_sdk.dart';
  21. class NewsDetailPage extends StatefulWidget {
  22. NewsDetailPage(this.id);
  23. final String id;
  24. @override
  25. State<StatefulWidget> createState() {
  26. return NewsDetailPageState();
  27. }
  28. }
  29. class NewsDetailPageState extends State<NewsDetailPage> {
  30. dynamic item;
  31. @override
  32. void initState() {
  33. UmengCommonSdk.onPageStart("新闻详情");
  34. super.initState();
  35. getNewsDetail();
  36. }
  37. @override
  38. void dispose() {
  39. UmengCommonSdk.onPageEnd("新闻详情");
  40. super.dispose();
  41. }
  42. getNewsDetail() {
  43. print(666);
  44. NewApiService().newsDetail(widget.id, onSuccess: (res) {
  45. if (res != null) {
  46. _hasData = true;
  47. item = res;
  48. }
  49. setState(() {});
  50. }, onError: (code, msg) {
  51. toasts(msg);
  52. });
  53. }
  54. zanClick() {
  55. ApiService(context: context).newsZan(widget.id, onSuccess: (res) {
  56. item.isLike = item.isLike ? false : true;
  57. item.likeNum = "${int.parse(item.likeNum) + (item.isLike ? 1 : -1)}";
  58. setState(() {});
  59. }, onError: (code, msg) {
  60. toasts(msg);
  61. });
  62. }
  63. bool _hasData = false;
  64. showAlertEvent() {
  65. showAlert(
  66. context,
  67. "提示",
  68. "确定登录?",
  69. "确定",
  70. () {
  71. NavigatorUtils.push(context, AccountRouter.loginPage, clearStack: true);
  72. },
  73. txt2: "取消",
  74. onPre2: () {
  75. NavigatorUtils.goBack(context);
  76. },
  77. );
  78. }
  79. @override
  80. Widget build(BuildContext context) {
  81. double width = MediaQuery.of(context).size.width;
  82. bool isDark = ThemeUtils.isDark(context);
  83. return Scaffold(
  84. backgroundColor: ThemeUtils.getTabsBg(context),
  85. appBar: MyAppBar(
  86. centerTitle: "新闻详情",
  87. actions: [
  88. GestureDetector(
  89. onTap: () {
  90. if (FlutterStars.SpUtil.getString(Constant.userId) == "-1") {
  91. showAlertEvent();
  92. } else {
  93. String initThis = randomInt(1111, 9999).toString() +
  94. DateTime.now().millisecondsSinceEpoch.toString();
  95. fluwx
  96. .shareToWeChat(fluwx.WeChatShareWebPageModel(
  97. scene: fluwx.WeChatScene.SESSION,
  98. webPage:
  99. "$jumpUrl/h5/index.html?num=$initThis&page=/news/detail&id=${widget.id}",
  100. title: item.title,
  101. // description: item.descr,
  102. thumbnail: '',
  103. ))
  104. .then((result) {}, onError: (msg) {});
  105. }
  106. },
  107. child: Icon(
  108. Iconfont.fenxiang,
  109. ),
  110. )
  111. ],
  112. ),
  113. body: SafeArea(
  114. child: _hasData
  115. ? ListView(
  116. padding: EdgeInsets.fromLTRB(15, 18, 15, 18),
  117. // mainAxisAlignment: MainAxisAlignment.start,
  118. // crossAxisAlignment: CrossAxisAlignment.start,
  119. children: <Widget>[
  120. Text(
  121. "${item.title}",
  122. style: TextStyle(
  123. fontSize: 20,
  124. color: isDark ? Color(0xff333333) : Colours.text,
  125. fontWeight: FontWeight.w500),
  126. ),
  127. Container(
  128. padding: EdgeInsets.only(top: 10, bottom: 10),
  129. child: Row(
  130. children: <Widget>[
  131. Text(
  132. "来源:${item.releaseUser}·${item.releaseDate}",
  133. style:
  134. TextStyle(fontSize: 12, color: Color(0xFF999999)),
  135. ),
  136. ],
  137. ),
  138. ),
  139. Html(
  140. data: item.content,
  141. style: {
  142. "html": Style(width: width),
  143. "p": Style(fontSize: FontSize(ScreenUtil().setSp(15)))
  144. },
  145. ),
  146. Row(
  147. children: <Widget>[
  148. Text(
  149. "${item.lookNum}阅读·${item.likeNum}赞",
  150. style:
  151. TextStyle(fontSize: 11, color: Color(0xffCCCCCC)),
  152. ),
  153. ],
  154. ),
  155. Gaps.vGap15,
  156. Center(
  157. child: GestureDetector(
  158. onTap: () {
  159. zanClick();
  160. },
  161. child: Column(
  162. children: <Widget>[
  163. LoadAssetImage(
  164. "news/${item.isLike ? 'zan_yes' : 'zan_no'}",
  165. width: 21,
  166. height: 21,
  167. ),
  168. Text(
  169. "${item.isLike ? '已赞' : '点赞'}",
  170. style: TextStyle(
  171. fontSize: 13,
  172. color: Color(0xff666666),
  173. ),
  174. ),
  175. ],
  176. ),
  177. ),
  178. )
  179. ],
  180. )
  181. : Center(
  182. child: Text("正在加载..."),
  183. ),
  184. ),
  185. );
  186. }
  187. }