hospital_page.dart 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281
  1. import 'dart:async';
  2. import 'package:flutter/material.dart';
  3. import 'package:flutter_spinkit/flutter_spinkit.dart';
  4. import 'package:liftmanager/internal/bbs/bbs_router.dart';
  5. import 'package:liftmanager/internal/bbs/model/banner_model.dart' as prefix;
  6. import 'package:liftmanager/internal/bbs/model/mix_model.dart';
  7. import 'package:liftmanager/internal/bbs/presenter/question_list_presenter.dart';
  8. import 'package:liftmanager/internal/search/presenter/base_list_provider.dart';
  9. import 'package:liftmanager/mvp/base_page_state.dart';
  10. import 'package:liftmanager/net/api_service.dart';
  11. import 'package:liftmanager/res/resources.dart';
  12. import 'package:liftmanager/routers/fluro_navigator.dart';
  13. import 'package:liftmanager/utils/fast_notification.dart';
  14. import 'package:liftmanager/utils/location_helper.dart';
  15. import 'package:liftmanager/utils/theme_utils.dart';
  16. import 'package:liftmanager/utils/toast.dart';
  17. import 'package:liftmanager/utils/utils.dart';
  18. import 'package:liftmanager/widgets/app_city_search_bar.dart';
  19. import 'package:liftmanager/widgets/bbs_content.dart';
  20. import 'package:liftmanager/widgets/my_refresh_list.dart';
  21. import 'package:liftmanager/widgets/state_layout.dart';
  22. import 'package:provider/provider.dart';
  23. class HospitalPage extends StatefulWidget {
  24. @override
  25. HospitalPageState createState() => HospitalPageState();
  26. }
  27. class HospitalPageState
  28. extends BasePageState<HospitalPage, QuestionListPresenter>
  29. with AutomaticKeepAliveClientMixin {
  30. BaseListProvider<Records> provider = BaseListProvider<Records>();
  31. StreamSubscription<Map<String, Object>> _locationListener;
  32. TabController _tabController;
  33. PageController _pageController = PageController();
  34. int _page = 1;
  35. String _cityName;
  36. bool display = true;
  37. getLocation() async {
  38. if (null != _locationListener) {
  39. _locationListener.cancel();
  40. }
  41. var helper = LocationHelper();
  42. helper.getLocation((lat, lng, cityName, {address, provinceName}) {
  43. if (cityName != null) {
  44. setState(() {
  45. _cityName = cityName;
  46. });
  47. helper.stopGettingLocation();
  48. }
  49. });
  50. }
  51. @override
  52. void initState() {
  53. super.initState();
  54. provider.setStateTypeNotNotify(StateType.loading);
  55. getLocation();
  56. _onRefresh();
  57. getBannerList();
  58. getNotificaList();
  59. FastNotification.addListener("initNotice", (initThisNotice) {
  60. if (mounted) {
  61. setState(() {
  62. getNotificaList();
  63. });
  64. }
  65. });
  66. if (!Utils.getAuthByRouter(context, 'question_center', false)) {
  67. getQuestionList();
  68. }
  69. }
  70. List<dynamic> questionsList;
  71. Future getQuestionList() async {
  72. await NewApiService().getQuestionList(1, 4, null, null, null,
  73. onSuccess: (res) {
  74. // res.records.forEach((item){
  75. // questionsList.addAll(item);
  76. // });
  77. questionsList = res.records;
  78. // print(JsonEncoder().convert(res.records));
  79. setState(() {});
  80. }, onError: (code, msg) {
  81. toasts(msg);
  82. });
  83. }
  84. List<dynamic> bannerList;
  85. Future getBannerList() async {
  86. await NewApiService().getBanner(1, 3, onSuccess: (prefix.BannerModel res) {
  87. bannerList = res.records;
  88. print(bannerList.length);
  89. setState(() {});
  90. }, onError: (code, msg) {
  91. toasts(msg);
  92. });
  93. }
  94. Future getNotificaList() async {
  95. display = true;
  96. await NewApiService().getNotificationMessageList(1, 10, onSuccess: (res) {
  97. res.records.forEach((item) {
  98. if (item.viewFlag == 0) {
  99. setState(() {
  100. display = false;
  101. });
  102. return;
  103. }
  104. });
  105. setState(() {});
  106. }, onError: (code, msg) {
  107. toasts(msg);
  108. });
  109. }
  110. @override
  111. void dispose() {
  112. _tabController?.dispose();
  113. // _timer.cancel();
  114. _pageController.dispose();
  115. super.dispose();
  116. }
  117. @override
  118. Widget build(BuildContext context) {
  119. return ChangeNotifierProvider<BaseListProvider<Records>>(
  120. create: (_) => provider,
  121. child: Scaffold(
  122. appBar: AppCitySearchAppBar(
  123. city: "${_cityName ?? '暂无定位'}",
  124. display: display,
  125. ),
  126. body: Container(
  127. // margin:EdgeInsets.only(left: ScreenUtil().setWidth(10),),
  128. color: ThemeUtils.getTabsBg(context),
  129. child: Column(
  130. crossAxisAlignment: CrossAxisAlignment.start,
  131. children: <Widget>[
  132. Container(
  133. color: ThemeUtils.getTabsBg(context),
  134. child: Column(
  135. children: <Widget>[
  136. Stack(children: <Widget>[
  137. ClipPath(
  138. clipper: BottomClipper(), //路
  139. child: Container(
  140. width: double.infinity,
  141. height: 100,
  142. decoration: BoxDecoration(
  143. gradient: const LinearGradient(colors: [
  144. Color(0xFF00ACFF),
  145. Color(0xFF5888FF)
  146. ])),
  147. ),
  148. ),
  149. Container(
  150. child: Diagnosis(),
  151. )
  152. ]),
  153. // Container(
  154. // height: 5,
  155. // color: ThemeUtils.getDialogTextFieldColor(context)),
  156. Container(
  157. // margin: EdgeInsets.only(
  158. // left: 10
  159. // // ScreenUtil().setWidth(10),
  160. // ),
  161. child: LabelTitle(
  162. title: "热门问题",
  163. userTap: () {
  164. if (Utils.getAuthByRouter(
  165. context, 'question_center')) {
  166. NavigatorUtils.push(
  167. context, BbsRouter.questionList);
  168. }
  169. },
  170. ),
  171. )
  172. ],
  173. ),
  174. ),
  175. Utils.getAuthByRouter(context, 'question_center', false)
  176. ? Expanded(
  177. flex: 1,
  178. child: Consumer<BaseListProvider<Records>>(
  179. builder: (_, provider, __) {
  180. return MyListView(
  181. key: Key('question_list'),
  182. itemCount: provider.list.length,
  183. stateType: provider.stateType,
  184. onRefresh: _onRefresh,
  185. loadMore: _loadMore,
  186. hasMore: provider.hasMore,
  187. itemBuilder: (_, index) {
  188. return Padding(
  189. padding: EdgeInsets.only(left: 10, right: 10),
  190. child: QuestionCell(item: provider.list[index]),
  191. );
  192. },
  193. );
  194. }))
  195. : Expanded(
  196. child: ListView(
  197. children: <Widget>[
  198. Container(
  199. child:
  200. questionsList != null && questionsList != []
  201. ? HotQuestion(initList: questionsList)
  202. : loadCircle()),
  203. ],
  204. ),
  205. )
  206. ],
  207. ),
  208. ),
  209. ));
  210. }
  211. Widget loadCircle() {
  212. return Container(
  213. padding: EdgeInsets.only(top: 10, bottom: 10),
  214. color: ThemeUtils.getTabsBg(context),
  215. child: Center(
  216. child: SpinKitFadingCircle(
  217. color: Colors.blueAccent,
  218. size: 30.0,
  219. ),
  220. ),
  221. );
  222. }
  223. Widget lineTxt(title, value) {
  224. return Container(
  225. padding: EdgeInsets.only(left: 12, top: 5, right: 12),
  226. child: Row(
  227. children: <Widget>[
  228. Text("$title",
  229. style: TextStyle(fontSize: 13, color: Colours.dark_text_gray)),
  230. Expanded(
  231. flex: 1,
  232. child: Text(
  233. "$value",
  234. textAlign: TextAlign.right,
  235. style: TextStyle(fontSize: 13, color: Colours.dark_text_gray),
  236. ),
  237. )
  238. ],
  239. ),
  240. );
  241. }
  242. Future _onRefresh() async {
  243. _page = 1;
  244. await presenter.getQuestionList(_page);
  245. }
  246. Future _loadMore() async {
  247. _page++;
  248. await presenter.getQuestionList(_page);
  249. }
  250. @override
  251. QuestionListPresenter createPresenter() {
  252. return QuestionListPresenter();
  253. }
  254. bool get wantKeepAlive => true;
  255. }