news_detail_page.dart 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. import 'package:flutter/cupertino.dart';
  2. import 'package:flutter/material.dart';
  3. import 'package:flutter_html/style.dart';
  4. import 'package:liftmanager/net/api_service.dart';
  5. import 'package:liftmanager/res/colors.dart';
  6. import 'package:liftmanager/res/gaps.dart';
  7. import 'package:liftmanager/utils/theme_utils.dart';
  8. import 'package:liftmanager/utils/toast.dart';
  9. import 'package:liftmanager/widgets/app_bar.dart';
  10. import 'package:flutter_html/flutter_html.dart';
  11. import 'package:liftmanager/widgets/load_image.dart';
  12. import 'package:flutter_screenutil/flutter_screenutil.dart';
  13. class NewsDetailPage extends StatefulWidget {
  14. NewsDetailPage(this.id);
  15. final String id;
  16. @override
  17. State<StatefulWidget> createState() {
  18. return NewsDetailPageState();
  19. }
  20. }
  21. class NewsDetailPageState extends State<NewsDetailPage> {
  22. dynamic item;
  23. @override
  24. void initState() {
  25. super.initState();
  26. getNewsDetail();
  27. }
  28. getNewsDetail() {
  29. print(666);
  30. NewApiService().newsDetail(widget.id, onSuccess: (res) {
  31. if (res != null) {
  32. _hasData = true;
  33. item = res;
  34. }
  35. setState(() {});
  36. }, onError: (code, msg) {
  37. toasts(msg);
  38. });
  39. }
  40. zanClick(){
  41. ApiService(context: context).newsZan(widget.id,onSuccess: (res){
  42. item.isLike =item.isLike?false:true;
  43. item.likeNum ="${int.parse(item.likeNum)+(item.isLike?1:-1)}";
  44. setState(() {
  45. });
  46. },onError: (code,msg){
  47. toasts(msg);
  48. });
  49. }
  50. bool _hasData = false;
  51. @override
  52. Widget build(BuildContext context) {
  53. double width = MediaQuery.of(context).size.width;
  54. bool isDark = ThemeUtils.isDark(context);
  55. return Scaffold(
  56. backgroundColor: ThemeUtils.getTabsBg(context),
  57. appBar: MyAppBar(
  58. centerTitle: "新闻详情",
  59. ),
  60. body: SafeArea(
  61. child: _hasData? ListView(
  62. padding: EdgeInsets.fromLTRB(15, 18, 15, 18),
  63. // mainAxisAlignment: MainAxisAlignment.start,
  64. // crossAxisAlignment: CrossAxisAlignment.start,
  65. children: <Widget>[
  66. Text(
  67. "${item.title}",
  68. style: TextStyle(
  69. fontSize: 15,
  70. color: isDark ? Colours.dark_text : Colours.text,
  71. fontWeight: FontWeight.w500),
  72. ),
  73. Container(
  74. padding: EdgeInsets.only(top: 10, bottom: 10),
  75. child: Row(
  76. children: <Widget>[
  77. Text(
  78. "${item.releaseDate}",
  79. style: TextStyle(
  80. fontSize: 11, color: Color(0xFF999999)),
  81. ),
  82. Gaps.hGap10,
  83. Text(
  84. "@${item.releaseUser}",
  85. style: TextStyle(
  86. fontSize: 11, color: Color(0xFF999999)),
  87. ),
  88. ],
  89. ),
  90. ),
  91. Html(
  92. data: item.content,
  93. style: {
  94. "html": Style(
  95. width: width
  96. ),
  97. "p":Style(
  98. fontSize: FontSize(ScreenUtil().setSp(15))
  99. )
  100. },
  101. ),
  102. Row(
  103. children: <Widget>[
  104. Text(
  105. "阅读${item.lookNum}次·点赞${item.likeNum}",
  106. style:
  107. TextStyle(fontSize: 11, color: Colours.text_gray),
  108. ),
  109. ],
  110. ),
  111. Gaps.vGap15,
  112. Center(
  113. child:GestureDetector(
  114. onTap: (){
  115. zanClick();
  116. },
  117. child: Column(
  118. children: <Widget>[
  119. LoadAssetImage(
  120. "news/${item.isLike?'zan_yes':'zan_no'}",
  121. width: 45.0,
  122. height: 45,
  123. ),
  124. Text("${item.isLike?'已赞':'点赞'}")
  125. ],
  126. ),
  127. ) ,
  128. )
  129. ],
  130. ): Center(
  131. child: Text("正在加载..."),
  132. ),),
  133. );
  134. }
  135. }