hospital_page.dart 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297
  1. import 'package:flutter/cupertino.dart';
  2. import 'package:flutter/material.dart';
  3. import 'package:liftmanager/internal/hospital/hospital_roter.dart';
  4. import 'package:liftmanager/internal/hospital/model/article_item.dart';
  5. import 'package:liftmanager/res/resources.dart';
  6. import 'package:liftmanager/routers/fluro_navigator.dart';
  7. import 'package:liftmanager/utils/image_utils.dart';
  8. import 'package:liftmanager/utils/theme_utils.dart';
  9. import 'package:liftmanager/widgets/app_bar.dart';
  10. import 'package:liftmanager/widgets/load_image.dart';
  11. class HospitalPage extends StatefulWidget {
  12. @override
  13. State<StatefulWidget> createState() {
  14. return HospitalPageState();
  15. }
  16. }
  17. class HospitalPageState extends State<HospitalPage> {
  18. List<ArticleItem> list = [
  19. ArticleItem(
  20. title: "[三菱]电梯常见故障有哪些?",
  21. content:
  22. "1、闭合底层钥匙开关,激战不能开门离开的肌肤轮廓的肌肤抵抗封疆大吏剪六爹上看风景来上课的肌肤来上课的肌肤离开时的肌肤离开时交电费离开时交电费了科技的身份",
  23. author: Author(
  24. name: "阮英",
  25. avatar:
  26. "https://dss1.bdstatic.com/70cFvXSh_Q1YnxGkpoWK1HF6hhy/it/u=1305353222,2352820043&fm=26&gp=0.jpg"),
  27. images: [],
  28. createdAt: "2020-02-20",
  29. like: 13),
  30. ArticleItem(
  31. title: "[三菱]电梯不能正常开门是什么原因?",
  32. content:
  33. "1、闭合底层钥匙开关,激战不能开门离开的肌肤轮廓的肌肤抵抗封疆大吏剪六爹上看风景来上课的肌肤来上课的肌肤离开时的肌肤离开时交电费离开时交电费了科技的身份",
  34. author: Author(
  35. name: "彭强强",
  36. avatar:
  37. "https://dss1.bdstatic.com/70cFuXSh_Q1YnxGkpoWK1HF6hhy/it/u=2471723103,4261647594&fm=26&gp=0.jpg"),
  38. images: [
  39. ArticleImg(
  40. url:
  41. "http://img3.99114.com/group10/M00/2F/52/rBADslmH99WAZvgiAABvnSElCFg396.jpg"),
  42. ArticleImg(
  43. url:
  44. "http://img1.99114.com/group10/M00/F1/F0/rBADs1mDTaCAXoGYAABOcC-l-IQ457.jpg"),
  45. ArticleImg(
  46. url:
  47. "http://img1.99114.com/group10/M00/9D/87/rBADs1ofk1GABugKAAArg-CFe1A183.jpg")
  48. ],
  49. createdAt: "2020-02-20",
  50. like: 145)
  51. ];
  52. @override
  53. Widget build(BuildContext context) {
  54. return WillPopScope(
  55. onWillPop: () {
  56. NavigatorUtils.goBackWithParams(context, true);
  57. return Future.value(false);
  58. },
  59. child: Scaffold(
  60. appBar: MyAppBar(
  61. centerTitle: "电梯医院",
  62. isBack: false,
  63. ),
  64. body: Container(
  65. color: ThemeUtils.getBackgroundColor(context),
  66. child: Column(
  67. crossAxisAlignment: CrossAxisAlignment.start,
  68. children: <Widget>[
  69. Container(
  70. padding: EdgeInsets.all(15),
  71. color: ThemeUtils.getTabsBg(context),
  72. child: Column(
  73. children: <Widget>[
  74. GestureDetector(
  75. onTap: () {
  76. NavigatorUtils.push(
  77. context, HospitalRouter.hospitalDetailPage);
  78. },
  79. child: Row(
  80. children: <Widget>[
  81. CircleAvatar(
  82. radius: 21.5,
  83. backgroundColor: Colors.transparent,
  84. backgroundImage:
  85. ImageUtils.getImageProvider(null)),
  86. Gaps.hGap10,
  87. Expanded(
  88. child: Column(
  89. mainAxisAlignment: MainAxisAlignment.center,
  90. crossAxisAlignment: CrossAxisAlignment.start,
  91. children: <Widget>[
  92. Row(
  93. children: <Widget>[
  94. Text(
  95. "快速问诊",
  96. style: TextStyles.textBold24,
  97. ),
  98. ],
  99. ),
  100. Text(
  101. "搜电梯品牌 找专家咨询电梯疑问",
  102. style: TextStyles.textGray13,
  103. )
  104. ],
  105. ),
  106. ),
  107. ],
  108. )),
  109. Gaps.vGap12,
  110. Row(
  111. children: <Widget>[
  112. CircleAvatar(
  113. radius: 21.5,
  114. backgroundColor: Colors.transparent,
  115. backgroundImage:
  116. ImageUtils.getImageProvider(null)),
  117. Gaps.hGap10,
  118. Expanded(
  119. child: Column(
  120. mainAxisAlignment: MainAxisAlignment.center,
  121. crossAxisAlignment: CrossAxisAlignment.start,
  122. children: <Widget>[
  123. Row(
  124. children: <Widget>[
  125. Text(
  126. "出诊",
  127. style: TextStyles.textBold24,
  128. ),
  129. // Gaps.hGap10,
  130. // Container(
  131. // decoration: BoxDecoration(
  132. // color: Colours.app_main,
  133. // borderRadius: BorderRadius.circular(6.0),
  134. // ),
  135. // padding: EdgeInsets.fromLTRB(5, 0, 5, 0),
  136. // child: Text("",style: TextStyle(fontSize: 12,color: Colors.white),),
  137. // )
  138. ],
  139. ),
  140. Text(
  141. "在线预约专家上门维修服务",
  142. style: TextStyles.textGray13,
  143. )
  144. ],
  145. ),
  146. ),
  147. ],
  148. )
  149. ],
  150. ),
  151. ),
  152. Gaps.vGap10,
  153. Container(
  154. height: 45,
  155. padding: EdgeInsets.only(left: 15, right: 15),
  156. alignment: Alignment.centerLeft,
  157. decoration: BoxDecoration(
  158. color: ThemeUtils.getTabsBg(context),
  159. border: Border(
  160. bottom: BorderSide(width: 0.5, color: Colours.line),
  161. ),
  162. ),
  163. child: Row(
  164. mainAxisAlignment: MainAxisAlignment.spaceBetween,
  165. children: <Widget>[
  166. Container(
  167. padding: EdgeInsets.only(left: 10),
  168. decoration: BoxDecoration(
  169. border: Border(
  170. left: BorderSide(width: 3, color: Colours.app_main),
  171. )),
  172. child: Text(
  173. "热门问题",
  174. style: TextStyles.textBold15,
  175. ),
  176. ),
  177. ],
  178. ),
  179. ),
  180. Expanded(
  181. flex: 1,
  182. child: ListView.separated(
  183. itemBuilder: (_, index) {
  184. var item = list[index];
  185. bool isDark = ThemeUtils.isDark(context);
  186. return InkWell(
  187. onTap: () {
  188. // NavigatorUtils.push(context,
  189. // "${NewsRouter.newsDetail}?id=${item.id}");
  190. },
  191. child: Container(
  192. decoration: BoxDecoration(
  193. color: ThemeUtils.getTabsBg(context),
  194. border: Border(
  195. bottom: BorderSide(
  196. width: 0.5, color: Colours.line)),
  197. ),
  198. padding: const EdgeInsets.all(15),
  199. child: Column(
  200. crossAxisAlignment: CrossAxisAlignment.start,
  201. mainAxisAlignment: MainAxisAlignment.start,
  202. children: <Widget>[
  203. Text(
  204. "${item.title}",
  205. style: TextStyle(
  206. fontSize: 15,
  207. color: isDark
  208. ? Colours.dark_text
  209. : Colours.text),
  210. // overflow: TextOverflow.ellipsis,
  211. ),
  212. Gaps.vGap12,
  213. Text(
  214. "${item.content}",
  215. style: TextStyles.textGray13,
  216. // overflow: TextOverflow.ellipsis,
  217. ),
  218. Offstage(
  219. offstage: list[index].images.length == 0,
  220. child: Gaps.vGap12,
  221. ),
  222. Offstage(
  223. offstage: list[index].images.length == 0,
  224. child: Container(
  225. color: ThemeUtils.getTabsBg(context),
  226. child: _ToolsItem(list[index].images,
  227. (index) {
  228. if (index == 0) {
  229. // NavigatorUtils.push(context, AccountRouter.certificatePage);
  230. } else if (index == 1) {
  231. // NavigatorUtils.push(context, TeamRouter.teamUserPage);
  232. }
  233. }),
  234. ),
  235. ),
  236. Gaps.vGap12,
  237. Text(
  238. "${item.author.name}·阅读${item.like}次",
  239. style: TextStyle(
  240. fontSize: 11, color: Colours.text_gray),
  241. )
  242. ],
  243. ),
  244. ),
  245. );
  246. },
  247. separatorBuilder: (BuildContext context, int index) {
  248. return Container(
  249. height: 0.5,
  250. color: Color(0xFFF5F5F5),
  251. );
  252. },
  253. itemCount: list.length))
  254. ],
  255. ),
  256. ),
  257. ));
  258. }
  259. }
  260. class _ToolsItem extends StatelessWidget {
  261. _ToolsItem(this.imgs, this.onTap, {Key key}) : super(key: key);
  262. List<ArticleImg> imgs;
  263. Function onTap;
  264. @override
  265. Widget build(BuildContext context) {
  266. return GridView.builder(
  267. shrinkWrap: true,
  268. padding: const EdgeInsets.fromLTRB(8.0, 0, 8.0, 12.0),
  269. physics: NeverScrollableScrollPhysics(),
  270. gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
  271. crossAxisCount: 4, childAspectRatio: 0.9, crossAxisSpacing: 2),
  272. itemCount: imgs.length,
  273. itemBuilder: (_, index) {
  274. return InkWell(
  275. child: Column(
  276. mainAxisAlignment: MainAxisAlignment.center,
  277. children: <Widget>[
  278. LoadImage(
  279. "${imgs[index].url}",
  280. width: 80.0,
  281. height: 80,
  282. ),
  283. ],
  284. ),
  285. onTap: () {
  286. onTap(index);
  287. });
  288. },
  289. );
  290. }
  291. }