news_detail_page.dart 4.1 KB

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