news_detail_page.dart 4.7 KB

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