search_page2.dart 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. import 'package:flutter/material.dart';
  2. import 'package:liftmanager/mvp/base_page_state.dart';
  3. import 'package:liftmanager/internal/search/model/search_entity.dart';
  4. import 'package:liftmanager/internal/search/presenter/base_list_provider.dart';
  5. import 'package:liftmanager/internal/search/presenter/search_presenter.dart';
  6. import 'package:liftmanager/widgets/my_refresh_list.dart';
  7. import 'package:liftmanager/widgets/search_app_bar.dart';
  8. import 'package:liftmanager/widgets/state_layout.dart';
  9. import 'package:provider/provider.dart';
  10. class SearchPage extends StatefulWidget {
  11. @override
  12. SearchPageState createState() => SearchPageState();
  13. }
  14. class SearchPageState extends BasePageState<SearchPage, SearchPresenter> {
  15. BaseListProvider<SearchItem> provider = BaseListProvider<SearchItem>();
  16. String _keyword;
  17. int _page = 1;
  18. @override
  19. void initState() {
  20. /// 默认为加载中状态,本页面场景默认为空
  21. provider.setStateTypeNotNotify(StateType.loading);
  22. super.initState();
  23. _onRefresh();
  24. }
  25. @override
  26. Widget build(BuildContext context) {
  27. return ChangeNotifierProvider<BaseListProvider<SearchItem>>(
  28. create: (_) => provider,
  29. child: Scaffold(
  30. appBar: SearchAppBar(
  31. hintText: "请输入需要搜索的内容",
  32. onPressed: (text){
  33. if (text.isEmpty){
  34. showToast("搜索关键字不能为空!");
  35. return;
  36. }
  37. FocusScope.of(context).unfocus();
  38. _keyword = text;
  39. provider.setStateType(StateType.loading);
  40. _page = 1;
  41. presenter.search(_keyword, _page, true);
  42. },
  43. ),
  44. body: Consumer<BaseListProvider<SearchItem>>(
  45. builder: (_, provider, __) {
  46. return MyListView(
  47. key: Key('order_search_list'),
  48. itemCount: provider.list.length,
  49. stateType: provider.stateType,
  50. onRefresh: _onRefresh,
  51. loadMore: _loadMore,
  52. itemExtent: 50.0,
  53. hasMore: provider.hasMore,
  54. itemBuilder: (_, index){
  55. return Container(
  56. padding: const EdgeInsets.symmetric(horizontal: 16.0),
  57. alignment: Alignment.centerLeft,
  58. child: Text(provider.list[index].name),
  59. );
  60. },
  61. );
  62. }
  63. ),
  64. ),
  65. );
  66. }
  67. Future _onRefresh() async {
  68. _page = 1;
  69. await presenter.search(_keyword, _page, false);
  70. }
  71. Future _loadMore() async {
  72. _page++;
  73. await presenter.search(_keyword, _page, false);
  74. }
  75. @override
  76. SearchPresenter createPresenter() {
  77. return SearchPresenter();
  78. }
  79. }