news_detail_page.dart 6.0 KB

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