search_page.dart 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. import 'package:flutter/material.dart';
  2. import 'package:liftmanager/internal/news/news_router.dart';
  3. import 'package:liftmanager/internal/news/model/news_comm_entity.dart';
  4. import 'package:liftmanager/mvp/base_page_state.dart';
  5. import 'package:liftmanager/internal/search/model/search_entity.dart';
  6. import 'package:liftmanager/internal/search/presenter/base_list_provider.dart';
  7. import 'package:liftmanager/internal/search/presenter/search_presenter.dart';
  8. import 'package:liftmanager/res/resources.dart';
  9. import 'package:liftmanager/routers/fluro_navigator.dart';
  10. import 'package:liftmanager/utils/theme_utils.dart';
  11. import 'package:liftmanager/widgets/my_refresh_list.dart';
  12. import 'package:liftmanager/widgets/search_app_bar.dart';
  13. import 'package:liftmanager/widgets/state_layout.dart';
  14. import 'package:provider/provider.dart' as p;
  15. class SearchPage extends StatefulWidget {
  16. @override
  17. SearchPageState createState() => SearchPageState();
  18. }
  19. class SearchPageState extends BasePageState<SearchPage, SearchPresenter> {
  20. BaseListProvider<NewsItem> provider = BaseListProvider<NewsItem>();
  21. String _keyword="";
  22. int _page = 1;
  23. @override
  24. void initState() {
  25. /// 默认为加载中状态,本页面场景默认为空
  26. provider.setStateTypeNotNotify(StateType.loading);
  27. super.initState();
  28. _onRefresh();
  29. }
  30. @override
  31. Widget build(BuildContext context) {
  32. return p.ChangeNotifierProvider<BaseListProvider<NewsItem>>(
  33. create: (_) => provider,
  34. child: Scaffold(
  35. appBar: SearchAppBar(
  36. hintText: "请输入需要搜索的内容",
  37. onPressed: (text){
  38. if (text.isEmpty){
  39. showToast("搜索关键字不能为空!");
  40. return;
  41. }
  42. FocusScope.of(context).unfocus();
  43. _keyword = text;
  44. provider.setStateType(StateType.loading);
  45. _page = 1;
  46. presenter.search(context,_keyword, _page, true);
  47. },
  48. ),
  49. body: p.Consumer<BaseListProvider<NewsItem>>(
  50. builder: (_, provider, __) {
  51. bool isDark = ThemeUtils.isDark(context);
  52. return MyListView(
  53. key: Key('order_search_list'),
  54. itemCount: provider.list.length,
  55. stateType: provider.stateType,
  56. onRefresh: _onRefresh,
  57. loadMore: _loadMore,
  58. hasMore: provider.hasMore,
  59. itemBuilder: (_, index){
  60. return InkWell(
  61. onTap: () {
  62. NavigatorUtils.push(context,
  63. "${NewsRouter.newsDetail}?id=${provider.list[index].id}");
  64. },
  65. child: Container(
  66. decoration: BoxDecoration(
  67. color: isDark?Colours.dark_bg_color:Colors.white,
  68. border: Border(
  69. bottom: BorderSide(
  70. width: 0.5, color: Colours.line)),
  71. ),
  72. padding: const EdgeInsets.all(15),
  73. child: Column(
  74. crossAxisAlignment:
  75. CrossAxisAlignment.start,
  76. mainAxisAlignment: MainAxisAlignment.start,
  77. children: <Widget>[
  78. Text(
  79. "${provider.list[index].title}",
  80. style: TextStyle(fontSize: 15,color: isDark?Colours.dark_text:Colours.text),
  81. // overflow: TextOverflow.ellipsis,
  82. ),
  83. Gaps.vGap12,
  84. Text(
  85. "${provider.list[index].releaseUser}·阅读${provider.list[index].lookNum}次·点赞${provider.list[index].likeNum}",
  86. style: TextStyle(
  87. fontSize: 11,
  88. color: Colours.text_gray),
  89. )
  90. ],
  91. ),
  92. ),
  93. );
  94. },
  95. );
  96. }
  97. ),
  98. ),
  99. );
  100. }
  101. Future _onRefresh() async {
  102. _page = 1;
  103. await presenter.search(context,_keyword, _page, false);
  104. }
  105. Future _loadMore() async {
  106. _page++;
  107. await presenter.search(context,_keyword, _page, false);
  108. }
  109. @override
  110. SearchPresenter createPresenter() {
  111. return SearchPresenter();
  112. }
  113. }